Routing.yml Symfony2中子域的默认值

时间:2014-07-25 06:05:44

标签: php symfony php-5.4

以下是我的routing.yml,其中包含来自控制器的所有路由:

Parameters.yml

domain: testmultidb.hrd

的routing.yml

vi_company:
    resource: "@ViCompanyBundle/Controller/"
    type:     annotation
    prefix:   /
    host:     "admin.{company}.%domain%"
    defaults:
#        company: #any way to  get subdomain name here.

现在,{company}可以是company1, company2, companyn ...之类的内容,因此每次在网址生成时都会出现问题我必须传递此company参数

<a href="{{ path("vi_company_dashboard", {company: subdomainName } ) }}">DashBoard</a>

无论如何都要在生成URL时消除此{company: subdomainName }。所以它会得到&#34; company1&#34;来自admin.company1.testmultidb.hrd,​​&#34; company2&#34;来自admin.company2.testmultidb.hrd

无论如何还要限制任何子域:

vi_company:
    resource: "@ViCompanyBundle/Controller/"
    type:     annotation
    prefix:   /
    host:     "admin.{company}.%domain%"
    requirements:
#        company: any way to restrict 'super' subdomain here

感谢您阅读我的问题。

3 个答案:

答案 0 :(得分:2)

路由器有一个RequestContext对象,它实际上保存当前请求的上下文 在生成路径路径时,这样就完成了缺少参数。

因此,如果在生成路由之前将默认company设置为RequestContext,它可能会正常工作:

$this->get('router.request_context')->setParameter('company', $request->attributes->get('company'));

在调用RouterListener :: onKernelRequest之后,应该通过EventDispatcher处理所有请求的代码(即优先级应小于16)。

答案 1 :(得分:1)

我有相同的目标 - 子域识别客户,识别语言的前缀。我希望{domain}属性与默认输入相同,并在我的模板中覆盖它。

app:
    resource: @AppBundle/Controller/
    type:     annotation
    prefix:   /{_locale}
    host:     "{domain}.qufi.net"
    requirements:
        _locale: "%available_locales%"
        domain: "[a-z0-9]+"

这个帖子中的Issei.M回答了这个问题,虽然没有提供一个有效的例子。我在这里粘贴了我:http://pastebin.com/kenVw9mv

干杯!

答案 2 :(得分:0)

编辑:

我真的看不出如何在路由配置中将{company}作为默认值。

但您仍然可以根据{company}参数生成路线:

<a href="{{ path("vi_company_dashboard", {company: app.request.get('company') } ) }}">DashBoard</a>

可以在安全设置(see access_control doc)中限制对“超级”子域的访问。

它应该是这样的:

security:

    access_control:

        - { path: ^/*, host: admin\.super\.testmultidb\.hrd$, roles: ROLE_ADMIN }