yii初学者三大卡点:环境配置、url美化、路由跳转。需正确设置cookievalidationkey、启用php扩展;开启enableprettyurl和showscriptname;按顺序定义路由规则;用redirect/gohome/goback语义化跳转。

刚接触 Yii,最常卡在三件事上:环境跑不起来、URL 丑得没法见人、点个链接就 404 或跳错地方。其实核心就三点——入口配对、路由写对、跳转用对,不靠猜,靠配置逻辑。
环境跑起来:三步到位,别漏关键项
下载 Basic 模板后,解压到 Web 根目录(如 htdocs/basic),接着改两处:
- 打开 config/web.php,给 cookieValidationKey 填一个字符串,不能为空,例如
'cookieValidationKey' => 'my-secret-key' - 确认 PHP 已启用 mbstring 和 openssl 扩展(Windows 下检查 php.ini 是否取消了
extension=php_mbstring.dll等注释) - 浏览器访问 /basic/web/index.php,看到 “Congratulations” 页面即成功;若报 500,大概率是 cookieValidationKey 没设或扩展未开
URL变干净:美化不是加个配置就完事
想让 /index.php?r=site/about 变成 /about,光改 PHP 不行,Apache/Nginx 都得配合:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 在 config/web.php 的 urlManager 中必须同时设:
'enablePrettyUrl' => true'showScriptName' => false
(少一个,index.php就还在 URL 里) - Apache 用户:确保 web/ 目录下有 .htaccess,内容为官方标准四行(含
RewriteCond %{REQUEST_FILENAME} !-f等),且服务器已启用mod_rewrite并允许AllowOverride All - Nginx 用户:在 server 块的
location /里写try_files $uri $uri/ /index.php?$args,千万别写进location ~ \.php$里,否则静态资源会出错
路由规则怎么写才不踩坑
规则本质是“请求路径 → 控制器/动作”的映射表,顺序和语法决定是否生效:
- 数组从上到下匹配,更具体的放前面,比如:
'post/<id:>' => 'post/view'</id:>要比'<controller:>/<action:>' => '<controller>/<action>'</action></controller></action:></controller:>靠前 - 参数占位符带类型限制更安全:
<id:></id:>只接受数字,<slug:></slug:>匹配英文标题 - RESTful 接口要用
'class' => 'yii\rest\UrlRule',普通UrlRule不识别extraPatterns;动作名必须写成'POST activate'(大写方法 + 空格 + 短横线命名) - 分页、排序等非结构化参数(如
?page=2&sort=name)不要塞进路由 pattern,应由Url::to()的第二个参数传入
页面跳转:别再手拼 URL 字符串
Yii 提供语义化跳转方式,既安全又易维护:
-
$this->redirect(['site/about'])—— 跳转到路由地址,自动按当前 urlManager 规则生成 URL -
$this->goHome()—— 跳回defaultRoute定义的首页(默认是site/index) -
$this->goBack()—— 返回上一页,依赖$_SERVER['HTTP_REFERER'],提交后立即跳转可避免重复提交 - 需要带参数?直接传数组:
$this->redirect(['user/view', 'id' => 123, 'tab' => 'profile']),框架自动拼成/user/123.html?tab=profile(如果规则支持)










