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 相关文章推荐
PHP静态类
Nov 25 PHP
PHP采集相关教程之一 CURL函数库
Feb 15 PHP
理解php原理的opcodes(操作码)
Oct 26 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
Aug 09 PHP
php小经验:解析preg_match与preg_match_all 函数
Jun 29 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
Aug 19 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
Sep 10 PHP
完美解决thinkphp验证码出错无法显示的方法
Dec 09 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
laravel高级的Join语法详解以及使用Join多个条件
Oct 16 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
消息持续发送的完整例子
2006/10/09 PHP
php桌面中心(二) 数据库写入
2007/03/11 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
PHP异常处理浅析
2015/05/12 PHP
php根据生日计算年龄的方法
2015/07/13 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
php引用和拷贝的区别知识点总结
2019/09/23 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
深入剖析JavaScript中的函数currying柯里化
2016/04/29 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
深入理解Django中内置的用户认证
2017/10/06 Python
python批量修改文件编码格式的方法
2018/05/31 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
毕业评语大全
2014/05/04 职场文书
网络销售员岗位职责
2015/04/11 职场文书
裁员通知
2015/04/25 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
分享几个实用的CSS代码块
2022/06/10 HTML / CSS
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL