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 相关文章推荐
基于mysql的论坛(3)
Oct 09 PHP
第十节--抽象方法和抽象类
Nov 16 PHP
新安装的MySQL数据库需要注意的安全知识
Jul 30 PHP
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 PHP
PHP中file_exists与is_file,is_dir的区别介绍
Sep 12 PHP
ThinkPHP实现跨模块调用操作方法概述
Jun 20 PHP
php中opendir函数用法实例
Nov 15 PHP
主流PHP框架的优缺点对比分析
Dec 25 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
php微信公众平台开发之微信群发信息
Sep 13 PHP
Laravel框架验证码类用法实例分析
Sep 11 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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非阻塞模式
2016/03/03 PHP
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
jQuery动画animate方法使用介绍
2013/05/06 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
清除输入框内的空格
2016/12/21 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
python读取Android permission文件
2013/11/01 Python
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
解决python 输出是省略号的问题
2018/04/19 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
先进个人获奖感言
2014/01/24 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
详解Python牛顿插值法
2021/05/11 Python
windows server2016安装oracle 11g的图文教程
2022/07/15 Servers