0

正如雅虎指出的那样,我希望能够做两件事:

  • 使用 URI主机解析前端控制器中的路由
  • 创建/使用模板时,返回的不是“相对”路由(like '/img/st.jpg')而是完整路由(like '//s1.mysite.com/st.png')等等:增量计数器(=> 下一个静态链接应该像'//s2.mysite.com/whatever.png'
  • 更进一步,我想包括语言(如'//s1.us.mysite.com/st.png''//s1.fr.mysite.com/st.png'

你会怎么做?我可以轻松地执行 Apache 规则,例如:

RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9\-]+)\.((([a-zA-Z0-9\-]+)\.)+)([a-zA-Z0-9\-]+)\.(fr|com|net|org|eu)$
RewriteRule BLABLABLABLA

我在这里没有更进一步,但我对 RewriteRules 没有任何问题。问题在于如何构建包含正确“优化”URL 的网页。你会怎么做?

如果我不够清楚,我很抱歉,所以我给你一个真实的例子:我想转换这段代码:

<img src="/p/s/pizza.png" alt="aaa" />
<div class="img-large">
    <img src="/l/l/pizza.png" alt="bbb" />
</div>

<img src="http://fr.s2.partner.mysite.fr/p/s/pizza.png" alt="aaa" />
<div class="img-large">
    <img src="http://fr.s3.partner.mysite.fr/p/l/pizza.png" alt="bbb" />
</div>

(我没有编写 Twig 模板代码以保持尽可能清晰)。你会怎么做?

4

2 回答 2

0

Symfony 2.2 支持主机路由:http ://symfony.com/doc/master/components/routing/hostname_pattern.html

如果您使用的是 Symfony 2.1 或更低版本,则不能使用子域本身进行路由,但您可以设置侦听器以根据子域在页面加载时执行某些操作。

监听器示例:

#config.yml
services:        
  myListener:
    class: myApp\MyBundle\Controller\MyListener
    arguments: 
        container: "@service_container"
    tags:
        - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 64 }



class MyListener extends controller
{

    public function __construct($container)
    {
        $this->container = $container;
    }    

    public function onKernelRequest(GetResponseEvent $event)
    {       
        $currentHost = $request->getHost();
        // do something, i.e set the language
    }

}
于 2013-02-01T23:20:17.823 回答
0

扩展路由生成器。我想说添加一个名为 hostname 的附加参数让我们对 generateRoute 方法说。下面给出了如何覆盖路由生成器的简单示例:

自定义 url 生成器类http://symfony.com/doc/master/cookbook/bundles/inheritance.html

然后,您可以创建一个自定义 Twig 标记以专门用于静态资产,您可以在其中调用新的 generateRoute 方法,使用您想要的任何策略设置名为 hostname 的新自定义参数(随机,基于某种递增逻辑(可能使用会议))。那只是概念证明,需要一些谷歌搜索和阅读文档,但没有理由不应该工作......

于 2013-02-02T06:23:17.780 回答