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
dedecms中常见问题修改方法总结
Mar 21 PHP
PHPLog php 程序调试追踪工具
Sep 09 PHP
PHP has encountered an Access Violation 错误的解决方法
Jan 17 PHP
php和javascript之间变量的传递实现代码
Dec 19 PHP
php 如何获取数组第一个值
Aug 06 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
Nov 25 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
php实现图片等比例缩放代码
Jul 23 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
Oct 19 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 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 simplexml_import_dom()函数讲解
2019/02/03 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
js 走马灯简单实例
2013/11/21 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
javascript中取前n天日期的两种方法分享
2014/01/26 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
nodejs 图片预览和上传的示例代码
2017/09/30 NodeJs
node的process以及child_process模块学习笔记
2018/03/06 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
python修改字典内key对应值的方法
2015/07/11 Python
Windows下搭建python开发环境详细步骤
2020/07/20 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
python实现文字版扫雷
2020/04/24 Python
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
党员学习十八大感想
2014/01/17 职场文书
暑期社会实践方案
2014/02/05 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang