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


Posted in PHP onMay 27, 2019

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

控制器与路由

控制器以Controller作为后缀,继承自yii\web\Controller;
动作以action作为前缀,public访问修饰;
控制器ID 类名去后缀,全部转为小写,如果是驼峰命名多个单词转为中杠分割;
动作ID 去前缀,全部转为小写,如果是驼峰命名多个单词,转为中杠分割;
路由如何指向动作:控制器ID/动作ID
URL访问规则:index.php?r=路由 传参使用&参数=值 的方式
默认路由site定义在yii\web\Application::$defaultRouteyii\base\Module::$defaultRoute
默认动作ID index定义在yii\base\Controller::$defaultAction

1.新建一个FooBarController.php

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

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

浏览器访问:

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

URL生成

Url帮助类工作方式演示

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

在控制器中跳转

return $this->redirect(['site/index']);
//内部调用 Url::to()生成Url,所以大多数情况下需要传入一个数组

去掉url中的index.php?r=

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

[ Apache ]

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

AllowOverride NoneNone改为 All

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

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

[ Nginx ]

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

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

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
Aug 10 PHP
Laravel 5框架学习之用户认证
Apr 09 PHP
smarty模板判断数组为空的方法
Jun 10 PHP
PHP编程中的__clone()方法使用详解
Nov 27 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
mac下多个php版本快速切换的方法
Oct 09 PHP
PHP实现多关键字加亮功能
Oct 21 PHP
CI框架使用composer安装的依赖包步骤与方法分析
Nov 21 PHP
PHP7内核之Reference详解
Mar 14 PHP
PHP正则表达式笔记与实例详解
May 09 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
May 27 #PHP
Yii2框架视图(View)操作及Layout的使用方法分析
May 27 #PHP
Yii2框架操作数据库的方法分析【以mysql为例】
May 27 #PHP
php session_decode函数用法讲解
May 26 #PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 #PHP
Yii2框架自定义类统一处理url操作示例
May 25 #PHP
Yii2框架加载css和js文件的方法分析
May 25 #PHP
You might like
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
Javascript 中介者模式实例
2009/12/16 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
详解ES6 中的Object.assign()的用法实例代码
2021/01/11 Javascript
pycharm 使用心得(五)断点调试
2014/06/06 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
求职信内容考虑哪几点
2013/10/05 职场文书
数学专业毕业生自荐信
2013/11/10 职场文书
合同专员岗位职责
2013/12/18 职场文书
最新的互联网创业计划书
2014/01/10 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis