Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php yii createUrl规则返回带有子域的url_Php_Url Rewriting_Yii_Routing - Fatal编程技术网

Php yii createUrl规则返回带有子域的url

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

假设我的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/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'))
与第一条规则提供的模式匹配,它将使用该规则,而不管
代码
的“额外”数据是否存在

一个好的经验法则是总是把最具体的规则放在第一位,以确保它们匹配,然后以一般规则结束,以抓住任何不符合具体规则的规则