2014-11-14 97 views
3

我剛開始學習如何使用Symfony,我相信這很直接,但是我對模板引擎有點問題。我想在Symfony中的一個我的樹枝模板(2.5.6)中包含一個靜態HTML片段。現在我在資源目錄中創建了一個靜態子文件夾(這可能會改變,但絕對不會在視圖文件夾內)。然而,我無法完成這件事,我總是以unable to find template錯誤結束。我發現關於這個主題的文檔有點稀少(參見http://symfony.com/doc/current/book/templating.html#including-other-templates),枝條文檔也無法幫助我解決這個問題。我甚至不確定我是否可以使用魔術@Bundle符號,或者如果我必須駐留在視圖文件夾中,因爲../符號在include標籤中是不允許的。Symfony包含模板中的靜態html

我嘗試了以下(和一對夫婦的變化):

{{ include('@FashionMediaBundle/Resources/static/pricing.html') }} 

我猜包括但我可以使用,沒有任何模板標籤以及一個PHP模板的symfony不能處理原始的HTML,所以這個問題是隻是如何指定視圖文件夾之外的位置。

我知道http://github.com/kgilden/KGStaticBundle這可能會解決我的問題,但我不能相信這是不可實現的默認配置。

編輯:我只是試圖從指定模板文件的名稱(如在文檔中完成,請參閱上面的鏈接)相同的目錄中包含一個常規模板文件。儘管如此,我仍然收到一個錯誤,它也抱怨它預計爲bundle:section:template.format.engine作爲它的格式。文檔中是否有錯誤?

+1

如果你的包被稱爲'FashionMediaBundle'然後取出束部,樹枝命名空間的路徑被稱爲沒有它,就像這樣:'@ FashionMedia' – xurshid29 2014-11-14 12:54:09

+0

@ xurshid29不,這不是,但你必須忽略'@ '。我有一個工作測試用於另一個模板,其中包括「FashionMediaBundle:Static:include.html.php」,但不適用於「FashionMedia:Static:include.html.php」。 – patman 2014-11-14 14:13:53

+0

不,它不是但是[閱讀此](http: //symfony.com/doc/current/cookbook/templating/namespaced_pa​​ths.html):) – xurshid29 2014-11-14 15:13:16

回答

4

貌似海報找到了解決辦法,而我打字。我想我會在這裏留下一點點。

創建和使用樹枝命名空間在這裏討論:http://symfony.com/doc/current/cookbook/templating/namespaced_paths.html

默認情況下,每束得到的它自己的命名空間指向views目錄。您可以通過調整應用程序/ config.yml

twig: 
    debug:   %kernel.debug% 
    strict_variables: %kernel.debug% 
    paths: 
     "%kernel.root_dir%/../../cerad2/src/Cerad/Bundle/FashionMediaBundle/Resources/static": FashionMedia 

裝入模板,添加額外的目錄:「@ FashionMedia/pricing.html」

我不會進入所有的細節,但你也可以使用一個編譯器傳遞(http://symfony.com/doc/current/cookbook/service_container/compiler_passes.html)可以從bundle內部添加額外的路徑,而無需調整配置。陽明:

class Pass implements CompilerPassInterface 
{ 
public function process(ContainerBuilder $container) 
{ 
    $bundleDirAction = $container->getParameter('cerad_api01__bundle_dir') . '/Action'; 

    $twigFilesystemLoaderDefinition = $container->getDefinition('twig.loader.filesystem'); 

    $twigFilesystemLoaderDefinition->addMethodCall('addPath', array($bundleDirAction, 'CeradApi01'));   
} 
} 
+3

感謝您的幫助!請永久保留它,因爲它似乎是這個更完整的答案。 – patman 2014-11-14 16:37:03

1

試試這個:如果你希望把其他目錄這個文件,我建議你使用

{{ include('FashionMediaBundle:Resources:static:pricing.html') }} 

一個symbolic link(我不知道是否能枝杈包括文件,該文件是不是在Resources目錄)。

+0

仍然是相同的結果。 – patman 2014-11-14 14:10:31

+0

您的文件是否位於'FashionMediaBundle/Resources/views/static/pricing.html'路徑中? – 2014-11-14 14:13:11

+0

不,如上所述,它不在視圖目錄中,這是實際的複雜性。我有一個測試用例'{{include('FashionMediaBundle:Static:include.html.php')}}'它在views目錄中工作,但是1)呈現爲twig而不是php,2)沒有捆綁和部分,但我不能這樣做... – patman 2014-11-14 14:14:52

1

我找到了解決方案!

在樹枝配置中,您可以設置路徑併爲它們分配一個名稱。

twig: 
    [... twig options here ...] 
    paths: 
     "%kernel.root_dir%/../[path to static]": static_pages 

然後你就可以將它們包括在

{% include "@static_pages/pricing.html.twig" %}