2

使用 Symfony2,可以很容易地根据主机匹配路由(详见http://symfony.com/doc/current/components/routing/hostname_pattern.html)。

我想根据主机有不同的错误页面。

example.com 上的
404 错误 -> test.com 上的一个布局 404 错误 -> 另一种布局

你会怎么做?

4

1 回答 1

2

如果您可以访问您的网络服务器的配置,您可以将模板名称声明为 Symfony 可以获取并用作应用程序参数的环境变量。

示例:在 Apache 中为第一个(虚拟)主机配置以下 ENV:

SetEnv SYMFONY__ERROR_TEMPLATE SomeBundle:error:template1.html.twig

...第二个:

SetEnv SYMFONY__ERROR_TEMPLATE SomeBundle:error:template2.html.twig

然后,您可以将该参数注入用于呈现错误页面的任何服务(很可能是异常侦听器):

# Your exception listener
your_exception_listener:
    class:     SomeClass
    arguments:
        - @dependency1
        - ...
        - %error_template%

然后,您可以简单地呈现作为参数传递的模板并删除代码中的任何硬编码模板引用。

这样,通过在两个主机上运行相同的代码,您可以为错误页面显示两种不同的布局。

注意:你还必须记住在你的 shell 中设置一个同名的环境变量,否则当应用程序在 CLI 模式下运行时你会得到异常。

更多信息在这里:http ://symfony.com/doc/current/cookbook/configuration/external_parameters.html

于 2015-01-19T16:33:19.507 回答