我有一个symfony项目,有多个皮肤/模板,有自己的路线,有没有人有一个正确的设置的想法?
-
每个皮肤/模板都是自己的捆绑包,因为它不仅仅是皮肤和资产,也可能是某些皮肤中可能存在的服务 .
-
主机名决定皮肤 .
-
使用自定义RouteLoader加载目标包的route.yml .
自定义RouteLoader完成工作 - 但生成的路由正在缓存,据我所知,没有办法阻止路由缓存 .
一些建议是:
-
创建一个/ 路由,所以手动形成路由..但我不想丢弃路由器的那部分功能,或者重构整个项目..
-
使用模板标识符作为路径的前缀 . 这将要求我加载所有route.yml文件,这是因为它们的共享路径是不可能的 .
任何人?我真的不能去多个项目,皮肤的数量将在20-30左右 .
这种设置的原因是因为它是Content-as-a-Service ..服务的目标,多个客户端将项目用作平台,并且它们的设置决定使用哪些模板 .
3 回答
听起来你想根据主机名动态加载bundle?由于缓存,Symfony 2不会发生 . 特别是服务 .
你最好的办法是为每个皮肤设置一个应用程序,然后做一些url majic来执行所需的app.php文件 . 显然,因为你已经为每个皮肤定义了一个包,所以有一个有限的数字,所以有多个应用程序应该不是很多或负担 .
您可能能够解决模板问题 . 你仍然需要加载你所有的皮肤束,但你可以使用模板名称或路径,并可能得到一些工作 .
但服务?除非您开始将主机名附加到服务ID,否则我看不到任何解决方法 .
我认为通过在内核请求上添加一个监听器,可以根据用户动态加载twig模板 .
我可以给你一段代码,希望能帮助你:
使用$ this-> loader在Listener构造函数中定义为\ Twig_Loader_Filesystem
希望它可以给你一个线索
Symfony2已经支持开箱即用的主机感知路由,如下所示: