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作的文本留言本的例子(三)
Oct 09 PHP
怎样在PHP中通过ADO调用Asscess数据库和COM程序
Oct 09 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
php socket实现的聊天室代码分享
Aug 16 PHP
PHP中__FILE__、dirname与basename用法实例分析
Dec 01 PHP
php利用事务处理转账问题
Apr 22 PHP
PHP文件读取功能的应用实例
May 08 PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
Jun 10 PHP
php实现在线考试系统【附源码】
Sep 18 PHP
PHP类的自动加载机制实现方法分析
Jan 10 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与MySQL交互使用详解
2006/10/09 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
vue实现简单实时汇率计算功能
2017/01/15 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
iview在vue-cli3如何按需加载的方法
2018/10/31 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
Python中turtle作图示例
2017/11/15 Python
Django实现网页分页功能
2019/10/31 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
2019/12/09 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
会计应聘求职信范文
2013/12/17 职场文书
企业演讲稿范文
2013/12/28 职场文书
汉语言文学职业规划
2014/02/14 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
2015年检察院个人工作总结
2015/05/20 职场文书
小学英语听课心得体会
2016/01/14 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
nginx+lua单机上万并发的实现
2021/05/31 Servers
java executor包参数处理功能 
2022/02/15 Java/Android
详解Python中*args和**kwargs的使用
2022/04/07 Python