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 增加了对 .ZIP 文件的读取功能
Oct 09 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
从php核心代码分析require和include的区别
Jan 02 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
php实现无限级分类
Dec 24 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
php与Mysql的一些简单的操作
Feb 26 PHP
php数据访问之查询关键字
May 09 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
yii2 开发api接口时优雅的处理全局异常的方法
May 14 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
Oct 17 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 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
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
浅析javascript闭包 实例分析
2010/12/25 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
javascript实现连续赋值
2015/08/10 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python程序员开发中常犯的10个错误
2014/07/07 Python
python使用多线程不断刷新网页的方法
2015/03/31 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
Python中一行和多行import模块问题
2018/04/01 Python
python斐波那契数列的计算方法
2018/09/27 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
女方婚礼新郎答谢词
2014/01/11 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
讲文明倡议书
2015/04/29 职场文书
青涩记忆观后感
2015/06/18 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript