以下是我的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
感谢您阅读我的问题。
答案 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 }