【问题标题】:yii createUrl rule to return url with subdomainyii createUrl 规则返回带有子域的 url
【发布时间】:2013-03-17 10:20:33
【问题描述】:

假设我的 yii 站点基域是http://ii.local。

所有控制器操作都可以显示在基本域上,除了 我需要http://events.ii.local 来处理控制器event 的所有动作

拨打$this->createUrl('/event/index',array('code' => 'guruevent')) 我需要生成为http://events.ii.local/guruevent的网址

拨打$this->createUrl('/site/login') 我需要生成为http://ii.local/site/login 的url。

'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>',
            ),
     ),

事件子域的 URL 是使用 /event/index?code=guruevent 生成的,而不是使用 events.ii.local 子域。

单域路由工作正常,但我需要为少数控制器和模块使用少数子域。我也尝试设置 request->baseUrl 但只要我将其设置为 http://ii.local/ 所有路由都会停止,并且所有 url 都会打开相同的主页。

请提出修复建议。

【问题讨论】:

    标签: php url-rewriting yii routing


    【解决方案1】:

    交换你的第一条和第二条规则。规则按顺序处理,并使用第一个匹配的。 UrlManager 不寻找最佳匹配,而是先到先得。

    自从

    $this->createUrl('/event/index',array('code' => 'guruevent'))
    

    匹配第一个规则提供的模式,它将使用该规则,而不管 code 的“额外”数据是否存在。

    一个好的经验法则是始终将最具体的规则放在首位,以确保它们匹配,然后以一般规则结束,以找出任何不符合具体规则的规则。

    【讨论】:

      【解决方案2】:

      您可以使用自定义函数来创建您的网址。例如url($route, $params=array())。您将在内部使用Yii::app()-&gt;createUrl(),并根据$route 将其与您的其他主机名放在一起。然后在你的项目中总是使用这个函数来创建 URL。

      如果您有信心,您还可以增强您的实现并为该函数添加更多参数,例如$schema='' 或$absolute=false。这样你就可以使用这个函数来创建你项目中需要的所有类型的 URL。

      另一种方法是编写从CUrlManager 扩展的自定义urlManager 组件,然后覆盖createUrl()。在那里您可以按照上面的建议执行相同的操作:检查 $route 并创建适当的 URL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多