我正在开发一个项目,我想要添加语言 - 我不想在任何控制器中更改 - 为其他语言切换模板 - 找到了这个解决方案:
Symfony 2 load different template depending on user agent properties
我设置了它:
<?php
/**
* Created by PhpStorm.
* User: grek
* Date: 15.01.14
* Time: 15:41
*/
namespace ed\siteBundle\Service;
use Symfony\Bundle\FrameworkBundle\Templating\Loader\FilesystemLoader;
use Symfony\Component\Templating\Storage\FileStorage;
class templateLangLoader extends FilesystemLoader{
protected $container;
public function __construct($templatePathPatterns, $container)
{
parent::__construct($templatePathPatterns);
$this->container = $container;
}
public function load(\Symfony\Component\Templating\TemplateReferenceInterface $template)
{
$translatedBundles = ['eddiscoveryBundle','edpartnerBundle','edregisterBundle','siteBundle','userBundle'];
if(in_array($template->get('bundle'),$translatedBundles))
{
//$request = $this->container->get('request');
}
try {
$file = $this->locator->locate($template);
echo "<BR>$file";
/*
print_r([
$template->getLogicalName()
,$template->getPath()
, var_dump($template,1)
, $file
]);
*/
} catch (\InvalidArgumentException $e) {
return false;
}
return new FileStorage($file);
}
}
我来到现场:
/home/grek/public_html/edpartner/src/ed/discoveryBundle/Resources/views/Default/pl_listItem.html.twig
/home/grek/public_html/edpartner/src/ed/discoveryBundle/Resources/views/Default/pl_header.html.twig
/home/grek/public_html/edpartner/src/ed/discoveryBundle/Resources/views/Default/pl_list.html.twig
/home/grek/public_html/edpartner/src/ed/discoveryBundle/Resources/views/Default/pl_fullPage.html.twig
/home/grek/public_html/edpartner/src/ed/discoveryBundle/Resources/views/Default/pl_listItemDemo.html.twig
/home/grek/public_html/edpartner/app/Resources/views/pl_ajax-layout.html.twig
/home/grek/public_html/edpartner/app/Resources/views/pl_clean.html.twig
/home/grek/public_html/edpartner/app/Resources/views/pl_base.html.twig
不允许序列化'Closure' 500内部服务器错误 - 例外
非常奇怪 - 模板名称 - 我重命名所有模板添加pl_surfix但是在代码上我没有改变但是synfony自我查找模板?
我有代码: $这 - &GT;呈现( 'eddiscoveryBundle:默认:list.html.twig')
symfony看看 - pl_list.html.twig怎么追求呢?我想要它,但我想我必须改变 - 这是自我改变和错误'封闭'的序列化是不允许的
新:
我重命名模板
/home/grek/public_html/edpartner/src/ed/discoveryBundle/Resources/views/Default/pl_listItem.html.twig
至
/home/grek/public_html/edpartner/src/ed/discoveryBundle/Resources/views/Default/asdasdasdasdasasd_listItem.html.twig
我在echo“
$ file”上看到这个名字;没有任何改变?怎么可能?
那么如何纠正现在在代码上重命名呢?
更新2:
是更改加载程序:
public function load(\Symfony\Component\Templating\TemplateReferenceInterface $template)
{
$translatedBundles = ['eddiscoveryBundle','edpartnerBundle','edregisterBundle','siteBundle','userBundle'];
if(in_array($template->get('bundle'),$translatedBundles))
{
var_dump($template);
$request = $this->container->get('request');
}
$file = $this->locator->locate($template);
return new FileStorage($file);
}
并将所有模板重命名为原始模板而不使用pl _
首先获得(网站工作):
object(Symfony\Bundle\FrameworkBundle\Templating\TemplateReference)[1268]
protected 'parameters' =>
array (size=5)
'bundle' => string 'eddiscoveryBundle' (length=17)
'controller' => string 'Default' (length=7)
'name' => string 'fullPage' (length=8)
'format' => string 'html' (length=4)
'engine' => string 'twig' (length=4)
重命名模板添加pl_ - 无需更改代码:
和(网站不工作)得到:
object(Symfony\Bundle\FrameworkBundle\Templating\TemplateReference)[335]
protected 'parameters' =>
array (size=5)
'bundle' => string 'eddiscoveryBundle' (length=17)
'controller' => string 'Default' (length=7)
'name' => string 'pl_fullPage' (length=11)
'format' => string 'html' (length=4)
'engine' => string 'twig' (length=4)
和网站崩溃 - 不允许序列化'关闭' 500内部服务器错误 - 例外
所以如何将文件名重命名为pl_ - 它是自我重命名和崩溃:)
这个例子使用FilesystemLoader - 也许可以使用 - Twig_LoaderInterface我在doc中发现了一些想法,但是没有看到这个类或例子如何在symfony中覆盖它......