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代码优化及php相关问题总结
Oct 09 PHP
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
介绍一些PHP判断变量的函数
Apr 24 PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
PHP中使用TCPDF生成PDF文档实例
Jul 01 PHP
PHP实现视频文件上传完整实例
Aug 28 PHP
PHP对象递归引用造成内存泄漏分析
Aug 28 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
Mar 03 PHP
php计算税后工资的方法
Jul 28 PHP
php实现的二叉树遍历算法示例
Jun 15 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 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
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
PHP容易忘记的知识点分享
2013/04/30 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
jstree的简单实例
2016/12/01 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
Python实现的三层BP神经网络算法示例
2018/02/07 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
高校毕业生自我鉴定
2013/10/27 职场文书
书法培训心得体会
2014/01/05 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
建党伟业观后感
2015/06/01 职场文书
总经理聘用协议书
2015/09/21 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书
pytorch 6 batch_train 批训练操作
2021/05/28 Python