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 相关文章推荐
多文件上传的例子
Oct 09 PHP
php zend解密软件绿色版测试可用
Apr 14 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
May 14 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
Nov 14 PHP
ThinkPHP中ajax使用实例教程
Aug 22 PHP
IIS下PHP的三种配置方式对比
Nov 20 PHP
php跨服务器访问方法小结
May 12 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
nginx下安装php7+php5
Jul 31 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
PHP实现PDO操作mysql存储过程示例
Feb 13 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 替换模板变量实现步骤
2009/08/24 PHP
openPNE常用方法分享
2011/11/29 PHP
第二章 PHP入门基础之php代码写法
2011/12/30 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
php实现购物车功能(下)
2016/01/05 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
JQuery之focus函数使用介绍
2013/08/20 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
JS实现字体背景跑马灯
2020/01/06 Javascript
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python中异常重试的解决方案详解
2017/05/05 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
wxPython多个窗口的基本结构
2019/11/19 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
xml有哪些解析技术?区别是什么
2016/04/26 面试题
客服部班长工作责任制
2014/02/25 职场文书
《雷雨》教学反思
2016/02/20 职场文书
《春酒》教学反思
2016/02/22 职场文书
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python
python神经网络ResNet50模型
2022/05/06 Python