2012-11-19 37 views
4

我正在創建一個新的控制器提供程序,我將在幾個項目中使用,並且我需要在此控制器提供程序的目錄內有幾個樹枝模板以供某些路由使用該提供者。我想避免必須將所有模板文件複製到項目目錄中,以便使用此控制器提供程序的每個項目(使其位於twig.path指定的目錄下),所以我的問題是這樣的:Silex控制器提供程序的替代樹枝路徑

我該如何才能呈現不在twig.path目錄下的模板?我可以告訴枝條服務提供商呈現特定路徑,例如控制器提供程序文件中的__DIR__.'/views/some.template.twig'

回答

1

像這樣的東西應該工作

$app['twig'] = $app->share($app->extend('twig', function($twig) use ($yourNewPath) { 
    $twig->addLoader(new \Twig_Loader_Filesystem($yourNewPath)); 
    return $twig; 
})); 
4

您可以通過使用$應用[ 'twig.loader.filesystem']訪問樹枝裝載機。

例如,把這個在你的控制器類connect方法

$app['twig.loader.filesystem']->addPath(
    $pathToTemplates 
); 

也有存在Twig_Loader_Filesystem :: prependPath()

你也可以指定命名空間的路徑。爲此,只需添加名稱空間的名稱作爲第二個參數,例如「NAMESPACE」。在這種情況下,您可以通過$app['twig']->render('@NAMESPACE/pathToATemplate');來訪問您的模板。注意@ -char在命名空間之前進行渲染。