我必须实现使用主题的能力。我试过https://github.com/liip/LiipThemeBundle并且它有效。 但是因为我使用多站点功能(即根据域名定义了site_id),路径应该是这样的:
如果我请求::template.html.twig
路径将是:
所以问题是:
只有在运行时$container->get('engine.site')->getId()
时才能获取site_id。我试图进入Liip \ ThemeBundle \ Locator \ FileLocator的构造函数并调整$this->path
,以便能够为视图app/Resources/sites/{site_id}/
的不同站点获取路径(但是可以获得{{1} }})。但是这样我们当然会在第一次请求和尚未形成缓存时遇到错误(app/sites/{site_id}/Resources/
)。而其他所有请求都会正常运行。但这真的不是一个解决方案。 从这个问题是我可以在哪里动态构建模板路径?
可以在config中设置LiipThemeBundle中的所有主题。 但是如何动态制作此列表(我们可以使用«Whoops, looks like something went wrong. InactiveScopeException: You cannot create a service ("request") of an inactive scope ("request").»
获取所有主题?
答案 0 :(得分:0)
LiipThemeBundle创建参数liip_theme.file_locator.class,其中包含类的名称(带定位符)。
所以我们必须将我们bandle的DI中的这个参数改为我们班级的名字。它的描述很简单:
<?php
namespace Acme\Bundle\EngineBundle\Locator;
use Liip\ThemeBundle\Locator\FileLocator as BaseFileLocator;
class MultisitesFileLocator extends BaseFileLocator
{
public function locateAppResource($name, $dir = null, $first = true)
{
$container = $this->kernel->getContainer();
if ($container->getParameter('engine.dir_sites') !== '') {
$dir = $container->getParameter('kernel.root_dir') . '/' .
$container->getParameter('engine.dir_sites') .
$container->get('engine.site')->getId() . '/Resources';
}
return parent::locateAppResource($name, $dir, $first);
}
}
然而,多站点功能不能以这种方式工作...... 但这不是什么大问题。