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 相关文章推荐
require(),include(),require_once()和include_once()的异同
Jan 02 PHP
php strtotime 函数UNIX时间戳
Jan 14 PHP
php关于array_multisort多维数组排序的使用说明
Jan 04 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
Jun 18 PHP
php数组转换js数组操作及json_encode的用法详解
Oct 26 PHP
非常实用的php弹出错误警告函数扩展性强
Jan 17 PHP
php导入excel文件到mysql数据库的方法
Jan 14 PHP
php按单词截取字符串的方法
Apr 07 PHP
PHP中的事务使用实例
May 26 PHP
yii2使用gridView实现下拉列表筛选数据
Apr 10 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
2009/04/24 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
js操作textarea方法集合封装(兼容IE,firefox)
2011/02/22 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
详解Vue中的基本语法和常用指令
2019/07/23 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
将Python代码打包为jar软件的简单方法
2015/08/04 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
Python 读写文件的操作代码
2018/09/20 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
销售实习自我鉴定
2013/12/07 职场文书
红头文件任命书范本
2014/06/05 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
教师年度个人总结
2015/02/11 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
理解python中装饰器的作用
2021/07/21 Python
聊聊Python String型列表求最值的问题
2022/01/18 Python
Python尝试实现蒙特卡罗模拟期权定价
2022/04/21 Python