基于主机的错误页面

时间:2015-01-19 14:28:10

标签: symfony symfony-2.6

使用Symfony2,可以根据主机轻松匹配路由(详情请参阅http://symfony.com/doc/current/components/routing/hostname_pattern.html)。

我希望根据主机提供不同的错误页面。

example.com上的

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

你会怎么做?

1 个答案:

答案 0 :(得分:2)

如果您可以访问Web服务器的配置,则可以将模板名称声明为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