Php yii createUrl规则返回带有子域的url
假设我的yii站点基本域是Php yii createUrl规则返回带有子域的url,php,url-rewriting,yii,routing,Php,Url Rewriting,Yii,Routing,假设我的yii站点基本域是http://ii.local 所有控制器操作都可以在基本域上显示,但 我需要http://events.ii.local处理控制器的所有动作事件 通过调用$this->createUrl('/event/index',array('code'=>'guruevent')) 我需要生成为http://events.ii.local/guruevent 通过调用$this->createUrl('/site/login') 我需要生成为http://ii.local/si
http://ii.local
所有控制器操作都可以在基本域上显示,但
我需要http://events.ii.local
处理控制器的所有动作事件
通过调用$this->createUrl('/event/index',array('code'=>'guruevent'))
我需要生成为http://events.ii.local/guruevent
通过调用$this->createUrl('/site/login')
我需要生成为http://ii.local/site/login
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'caseSensitive'=>false,
'rules'=>array(
'http://events.ii.local/<code:\w+>'
=> '<controller:event>/<action:index>',
'http://events.ii.local/<code:\w+>/<action:\w+>'
=> '<controller:event>/<action>/<code>',
'<controller:\w+>/<action:\w+>'
=> '<controller>/<action>',
),
),
'urlManager'=>数组(
“urlFormat'=>“路径”,
'showScriptName'=>false,
“区分大小写”=>错误,
'规则'=>数组(
'http://events.ii.local/'
=> '/',
'http://events.ii.local//'
=>'/',
'/'
=> '/',
),
),
事件子域的URL是使用/event/index?code=guruevent
生成的,而不是使用events.ii.local子域
单域路由工作正常,但我需要为几个控制器和模块使用几个子域。我还试图设置request->baseUrl,但当我将其设置为http://ii.local/
所有路由停止,并为所有URL打开同一主页
请建议修复。您可以使用自定义函数创建URL。例如url($route,$params=array())
。您可以在内部使用Yii::app()->createUrl()
,根据$route
的不同,
会将它与其他主机名一起前置。然后在项目中始终使用此函数创建URL
如果您有信心,还可以增强实现并向该函数添加更多参数,如$schema=''
或$absolute=false
。通过这种方式,您可以将此函数用于项目中需要的所有类型的URL创建
另一种方法是编写自定义的
urlManager
组件,该组件从CUrlManager
扩展,然后重写createUrl()
。在那里,您可以执行与上面建议相同的操作:检查$route
并创建适当的URL。您可以使用自定义函数创建URL。例如url($route,$params=array())
。您可以在内部使用Yii::app()->createUrl()
,根据$route
的不同,会将它与其他主机名一起前置。然后在项目中始终使用此函数创建URL
如果您有信心,还可以增强实现并向该函数添加更多参数,如$schema=''
或$absolute=false
。通过这种方式,您可以将此函数用于项目中需要的所有类型的URL创建
另一种方法是编写自定义的
urlManager
组件,该组件从CUrlManager
扩展,然后重写createUrl()
。在那里,您可以按照上面的建议执行相同的操作:检查$route
并创建适当的URL。交换第一条和第二条规则。规则按顺序处理,并使用第一个匹配的规则。UrlManager不寻找最佳匹配,而是先到先得
自
$this->createUrl('/event/index',array('code' => 'guruevent'))
与第一条规则提供的模式匹配,它将使用该规则,而不管代码
的“额外”数据是否存在
一个好的经验法则是总是把最具体的规则放在第一位,以确保它们匹配,然后以一般规则结束,以抓住任何不符合具体规则的规则。交换第一条和第二条规则。规则按顺序处理,并使用第一个匹配的规则。UrlManager不寻找最佳匹配,而是先到先得 自
$this->createUrl('/event/index',array('code' => 'guruevent'))
与第一条规则提供的模式匹配,它将使用该规则,而不管代码
的“额外”数据是否存在
一个好的经验法则是总是把最具体的规则放在第一位,以确保它们匹配,然后以一般规则结束,以抓住任何不符合具体规则的规则