0

0

yii的urlManager组件配置

不言

不言

发布时间:2018-05-05 09:41:47

|

3173人浏览过

|

来源于php中文网

原创

这篇文章主要介绍了关于yii的urlManager组件配置,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

配置组件主要包括:

  • 指定类。缺少的话使用默认类

  • 属性。缺少的话使用默认类的对应属性

1 组件简单理解

urlManager是一个类,为什么又把它称为组件呢?先不用管,我们只需知道,要为组件指定类即可,如果没有指定会报错,除非该组件有默认类,哪些组件有默认类呢?就是核心组件,装个B看下源码,以yii高级模板为例。

Pis:如无特别说明,下面的路径指的是文件具体路径,不是命名空间
  1. 打开/frontend/web/index.php,看到
    frontend入口脚本
    首先,用数组助手类的merge方法递归合并数组,后覆盖前得出最终配置,然后,将配置数据传到Application的构造方法里,再执行其run方法。

  2. 跳转到verdor\yiisoft\yii2\web\Application.php的run方法,它触发了很多事件,具体就不看了,貌似无关~,components相关东西在哪?搜索components,发现执行了coreComponents方法,其内容是
    1
    并没有发现urlManager的默认类,并且各个配置文件都没为urlManager指定class,为什么没报错?因为它调用了父类的coreComponents方法。

  3. 跳转到verdor\yiisoft\yii2\base\Application.php,原来urlManager组件在这里指定了类。
    2

    我们已经知道是通过coreComponents指定核心组件的类了,但它是如何调用这个方法的呢?回头想想,在入口脚本还干了什么?实例化Application类时,自动调用构造方法!我们发现省略~\web\Application没有覆盖父类的构造方法,即看父类的构造方法

    5

  4. 跳转到preInit方法,在这个预初始化方法里,接受的参数是引用,即这个方法要对$config数组改造,重点看6

    大概意思是,如果配置文件没有配置某组件或没有为某组件指定类,这个组件就用coreComponents指定的类。将$config变量构造好后,传到Component::__construct($config),开始组件的具体内容,就不往下走了。

  5. 下面看组件属性的配置,跳到/项目目录/frontend/config/main.php,我们看到urlManager组件配置被注释掉了,即意味着其使用了urlManager组件指定类的属性的默认值,具体在\vendor\yiisoft\yii2\wbe\UrlManager.php
    配置文件的urlManager

    小结一下:组件配置,一指定类(无默认就要在配置文件写明),二配置属性,属性就是类的成员变量

2  添加虚拟主机

为了方便,先给前台项目添加虚拟主机,具体看链接

DocumentRoot "${INSTALL_DIR}/www/advanced/frontend/web/"ServerName frontend.advanced.com

这步不是必须的~

3 各配置作用

以请求Site控制器的about动作为例子

  1. enablePrettyUrl

    Pis:这个设为false,下面的设置都不起作用

  • false [默认]:通过入口脚本?r=[模块/]控制器/动作 方式访问。即http://localhost/advanced/frontend/web/index.php?r=site/about

  • true:开启美化路由,(注意是仅配置这个为ture,其他不配置,即用默认),通过入口脚本/[模块/]控制器/动作 方式访问。即http://localhost/advanced/frontend/web/index.php/site/about

  • showScriptName

    完成后,才能通过http://frontend.advanced.com/site/about访问

    • true [默认]: 不隐藏入口脚本,即要加入口脚本文件名index.php才能访问到,http://localhost/advanced/frontend/web/index.php/site/about

      数据源可配置的记事日历插件
      数据源可配置的记事日历插件

      数据源可配置的记事日历插件

      下载
    • false:按理解,设为false,应该是http://localhost/advanced/frontend/web/site/about即可访问,但发现是apache提示找不到页面
      7这意味着,apache服务器找不到url请求的文件,按apache理解,省略~/web/下没有site目录,所以,想要实现隐藏入口脚本,还要在/frontend/web/下添加.htaccess文件,官方文档介绍,具体步骤如下:

      RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . index.php
    1. .htaccess添加内容如下,意思是,如果请求的文件或目录找不到,就转到index.php

  • enableStrictParsing

    • false [默认]:不启用严格解析路由,意思是,如果请求url与所有rules规则都不匹配的话,就按照默认的路由处理方式来处理,即按[模块/]控制器/动作,方式去解析url。

    • true:设为true后,当请求url与rules规则不匹配,就报错。

      如,通过http://frontend.advanced.com/site/about请求,得到Yii框架的报错提示
      8

      这意味着,请求经过apache的转发,已经找到目的文件(入口脚本),目的文件运行过程中,没有得到期望参数(没传或验证不通过),因此Yii框架抛异常了

      注意与上面apache提示找不到页面区分~

  • suffix: 后缀名,如设置为suffix => '.html,需通过http://frontend.advanced.com/site/about.html才能访问到

  • rules: 规则的配置就很复杂了,下面详讲。

  • 4 rules配置

    1. 想访问Siteabout动作,要在rules里加

      'site/about' => 'site/about'

      其中,左边称为pattern,对应输入的url,右边为route,对应[模型/]控制器/动作。

    2. 如果不想为每个动作都加一个规则,可以这样

      '/' => '/',

      可以这样理解,左边,接收请求url的对应值,对它们作\w验证,即必须是字母或数字或下划线,以/site/about为例,验证通过,赋值给临时变量controller,action,右边使用,从而找到Site控制器的about动作。

    3. 同理,模块下的控制器动作也可以这样实现

      '//' => '//',
    4. restful的路由规则,在研究,日后再补~

    5 Notice

    • suffix 设了.html, 下面的rules都会用到,要想不用,需要在规则数组单独声明suffix=> ''

    • restful路由配置,pluralize参数默认为true,假如控制器为UserController,要通过users的url才能访问到,设为false的话,就不用加s,通过user即可访问,如果控制器本来就是UsersController,不管pluralize如何配置,都是通过users访问

    相关推荐:

    yii的CURD操作

    相关专题

    更多
    Java 桌面应用开发(JavaFX 实战)
    Java 桌面应用开发(JavaFX 实战)

    本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

    37

    2026.01.14

    php与html混编教程大全
    php与html混编教程大全

    本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

    19

    2026.01.13

    PHP 高性能
    PHP 高性能

    本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

    37

    2026.01.13

    MySQL数据库报错常见问题及解决方法大全
    MySQL数据库报错常见问题及解决方法大全

    本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

    19

    2026.01.13

    PHP 文件上传
    PHP 文件上传

    本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

    16

    2026.01.13

    PHP缓存策略教程大全
    PHP缓存策略教程大全

    本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

    6

    2026.01.13

    jQuery 正则表达式相关教程
    jQuery 正则表达式相关教程

    本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

    3

    2026.01.13

    交互式图表和动态图表教程汇总
    交互式图表和动态图表教程汇总

    本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

    45

    2026.01.13

    nginx配置文件详细教程
    nginx配置文件详细教程

    本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

    9

    2026.01.13

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    CSS教程
    CSS教程

    共754课时 | 19万人学习

    【web前端】Node.js快速入门
    【web前端】Node.js快速入门

    共16课时 | 2万人学习

    微信小程序开发之API篇
    微信小程序开发之API篇

    共15课时 | 1.2万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号