您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

yii的urlManager组件配置

2024/7/27 7:45:56发布23次查看
这篇文章主要介绍了关于yii的urlmanager组件配置,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
配置组件主要包括:
指定类。缺少的话使用默认类
属性。缺少的话使用默认类的对应属性
1 组件简单理解urlmanager是一个类,为什么又把它称为组件呢?先不用管,我们只需知道,要为组件指定类即可,如果没有指定会报错,除非该组件有默认类,哪些组件有默认类呢?就是核心组件,装个b看下源码,以yii高级模板为例。
pis:如无特别说明,下面的路径指的是文件具体路径,不是命名空间
打开/frontend/web/index.php,看到
首先,用数组助手类的merge方法递归合并数组,后覆盖前得出最终配置,然后,将配置数据传到application的构造方法里,再执行其run方法。
跳转到verdor\yiisoft\yii2\web\application.php的run方法,它触发了很多事件,具体就不看了,貌似无关~,components相关东西在哪?搜索components,发现执行了corecomponents方法,其内容是
并没有发现urlmanager的默认类,并且各个配置文件都没为urlmanager指定class,为什么没报错?因为它调用了父类的corecomponents方法。
跳转到verdor\yiisoft\yii2\base\application.php,原来urlmanager组件在这里指定了类。
我们已经知道是通过corecomponents指定核心组件的类了,但它是如何调用这个方法的呢?回头想想,在入口脚本还干了什么?实例化application类时,自动调用构造方法!我们发现省略~\web\application没有覆盖父类的构造方法,即看父类的构造方法
跳转到preinit方法,在这个预初始化方法里,接受的参数是引用,即这个方法要对$config数组改造,重点看
大概意思是,如果配置文件没有配置某组件或没有为某组件指定类,这个组件就用corecomponents指定的类。将$config变量构造好后,传到component::__construct($config),开始组件的具体内容,就不往下走了。
下面看组件属性的配置,跳到/项目目录/frontend/config/main.php,我们看到urlmanager组件配置被注释掉了,即意味着其使用了urlmanager组件指定类的属性的默认值,具体在\vendor\yiisoft\yii2\wbe\urlmanager.php。
小结一下:组件配置,一指定类(无默认就要在配置文件写明),二配置属性,属性就是类的成员变量
2  添加虚拟主机为了方便,先给前台项目添加虚拟主机,具体看链接
<virtualhost *:80>documentroot "${install_dir}/www/advanced/frontend/web/"servername frontend.advanced.com</virtualhost>
这步不是必须的~
3 各配置作用以请求site控制器的about动作为例子
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提示找不到页面,
这意味着,apache服务器找不到url请求的文件,按apache理解,省略~/web/下没有site目录,所以,想要实现隐藏入口脚本,还要在/frontend/web/下添加.htaccess文件,官方文档介绍,具体步骤如下:
rewriteengine onrewritecond %{request_filename} !-frewritecond %{request_filename} !-drewriterule . index.php
在.htaccess添加内容如下,意思是,如果请求的文件或目录找不到,就转到index.php
enablestrictparsing:
false [默认]:不启用严格解析路由,意思是,如果请求url与所有rules规则都不匹配的话,就按照默认的路由处理方式来处理,即按[模块/]控制器/动作,方式去解析url。
true:设为true后,当请求url与rules规则不匹配,就报错。
如,通过http://frontend.advanced.com/site/about请求,得到yii框架的报错提示
这意味着,请求经过apache的转发,已经找到目的文件(入口脚本),目的文件运行过程中,没有得到期望参数(没传或验证不通过),因此yii框架抛异常了。
注意与上面apache提示找不到页面区分~
suffix: 后缀名,如设置为suffix => '.html,需通过http://frontend.advanced.com/site/about.html才能访问到
rules: 规则的配置就很复杂了,下面详讲。
4 rules配置想访问site的about动作,要在rules里加
'site/about' => 'site/about'
其中,左边称为pattern,对应输入的url,右边为route,对应[模型/]控制器/动作。
如果不想为每个动作都加一个规则,可以这样
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
可以这样理解,左边,接收请求url的对应值,对它们作\w验证,即必须是字母或数字或下划线,以/site/about为例,验证通过,赋值给临时变量controller,action,右边使用,从而找到site控制器的about动作。
同理,模块下的控制器动作也可以这样实现
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
restful的路由规则,在研究,日后再补~
5 noticesuffix 设了.html, 下面的rules都会用到,要想不用,需要在规则数组单独声明suffix=> ''
restful路由配置,pluralize参数默认为true,假如控制器为usercontroller,要通过users的url才能访问到,设为false的话,就不用加s,通过user即可访问,如果控制器本来就是userscontroller,不管pluralize如何配置,都是通过users访问
相关推荐:
yii的curd操作
以上就是yii的urlmanager组件配置的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product