当前位置:首页 > CMS教程 > 其它CMS > 列表

Yii2框架控制器、路由、Url生成操作示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-23 21:27:23 浏览: 评论:0 

这篇文章主要介绍了Yii2框架控制器、路由、Url生成操作,结合实例形式分析了Yii2框架控制器、路由、url生成跳转等相关原理及操作技巧,需要的朋友可以参考下。

本文实例讲述了Yii2框架控制器、路由、Url生成操作,分享给大家供大家参考,具体如下:

控制器与路由

控制器以Controller作为后缀,继承自yii\web\Controller;

动作以action作为前缀,public访问修饰;

控制器ID 类名去后缀,全部转为小写,如果是驼峰命名多个单词转为中杠分割;

动作ID 去前缀,全部转为小写,如果是驼峰命名多个单词,转为中杠分割;

路由如何指向动作:控制器ID/动作ID

URL访问规则:index.php?r=路由 传参使用&参数=值 的方式

默认路由site定义在yii\web\Application::$defaultRoute或 yii\base\Module::$defaultRoute

默认动作ID index定义在yii\base\Controller::$defaultAction

1.新建一个FooBarController.php

Yii2控制器 Yii2路由 Yii2Url生成

  1. <?php 
  2. namespace app\controllers; 
  3. use yii\web\Controller; 
  4. class FooBarController extends Controller 
  5.   public function actionUserInfo() 
  6.   { 
  7.     return '控制器ID是:foo-bar,动作ID是:user-ino'
  8.   } 

浏览器访问:

Yii2控制器 Yii2路由 Yii2Url生成

URL生成

Url帮助类工作方式演示

  1. use yii\helpers\Url; 
  2. // 同一个控制器中的action 
  3. echo Url::toRoute(['update','id'=>'1']);  //如果没有参数,可以传字符串,不需要数组 
  4. // 不同控制器的action(同一个module) 
  5. echo Url::toRoute('post/index'); 
  6. // 绝对路由(可以跳出当前module,如果启用了module,需要在前面加入module的ID) 
  7. echo Url::toRoute('site/index'
  8. // 当前控制器,多个单词组成的action,例如actionUserInfo 
  9. echo Url::toRoute('user-info'); 
  10. // 控制器中间有大写的情况,例如 DateTimeController中的actionUpdate方法 
  11. echo Url::toRoute(['date-time/update','id'=>105]); 
  12. // 带域名的Url 
  13. echo Url::toRoute('site/index',true); 
  14. // 路由别名 
  15. echo Url::toRoute('@register'); //需要先注册别名,例如Yii::setAlias('@register','site/register') 
  16. // 拼接image、css等 
  17. echo Url::base();    //yiipro/web 
  18. echo Url::base(true);  //http://localhost/yiipro\web 
  19. echo Url::to(); //为空时表示当前url包括参数 
  20. echo Url::to(数组); //等价Url::toRoute(数组) 
  21. echo Url::to('@baidu'); //别名,例如Yii::setAlias('@baidu','http://www.phpfensi.com/') 

在控制器中跳转

return $this->redirect(['site/index']);

//内部调用 Url::to()生成Url,所以大多数情况下需要传入一个数组

去掉url中的index.php?r=

  1. 'components' => [ 
  2.       'urlManager'=>[ 
  3.         'enablePrettyUrl'=>true, //是否美化url(去掉?r=) 
  4.         'showScriptName'=>false, //去掉index.php(apache需要开启rewrite,并添加.htaccess文件) 
  5.         'rules'=>[], 
  6.       ], 
  7.     ], 
  8. [ Apache ] 

httpd.conf配置文件中加载了mod_rewrite.so模块

AllowOverride None 将None改为 All

把下面的内容保存为.htaccess文件放到应用入口文件的同级目录下

  1. <IfModule mod_rewrite.c> 
  2.  RewriteEngine on 
  3.  RewriteCond %{REQUEST_FILENAME} !-d 
  4.  RewriteCond %{REQUEST_FILENAME} !-f 
  5.  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 
  6. </IfModule> 
  7. [ Nginx ] 

在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现:

  1. location / { // …..省略部分代码 
  2.  if (!-e $request_filename) { 
  3.  rewrite ^(.*)$ /index.php?s=$1 last; 
  4.  break
  5.  } 
  6. }

Tags: Yii2控制器 Yii2路由 Yii2Url生成

分享到: