2015-07-19 59 views
1

最近我一直在使用template manager for silex,但我注意到它已被廢棄,不再適用於新版本的silex。另類的php silex模板

<?php 

use Herrera\Template\TemplateServiceProvider; 
use Silex\Application; 

$app = new Application(); 

$app->register(new TemplateServiceProvider(), array(
    'template.dir' => '/path/to/dir', 
    'template.dir' => array(
     '/path/to/dir1', 
     '/path/to/dir2', 
     '/path/to/dir3', 
    ) 
)); 

$app['template.engine']->render('test.php'); 

那麼,它究竟做的是,它使你給的文件,你也可以給其他的參數發送:這裏是做什麼的一個示例代碼(它可以在它的GitHub page可以看出)在渲染之前將其保存到文件中......這對我來說非常有用,但正如我所說,它已被廢棄,並且不再適用於較新版本的Silex。
所以,我問的是:這是一個很好的替代品,適用於較新的版本?我應該降級我的Silex以便能夠使用它?或者是否很難嘗試「創造」一個能夠使用它的系統?

我聽說過Twig,但它並沒有真正說服我,因爲它似乎並不方便,我想實現。

謝謝!

回答

3

你可以有相同的結果只是擴展枝加載器(Twig_Loader_Filesystem)。

$app['twig.loader.filesystem'] = $app->share(
    $app->extend('twig.loader.filesystem', function($loader, $app) { 
     $loader->addPath('/path/to/dir1'); 
     $loader->addPath('/path/to/dir2'); 
     $loader->addPath('/path/to/dir3'); 
     return $loader; 
    } 
); 

然後,你只是一如既往地使用樹枝。 $app['twig']->render('template.twig', array(...));

文件系統加載器會模板/路徑/到/ DIR1,如果他們不存在,它將退回去尋找他們/路徑/到/ DIR2等。

如果您在使用純PHP模板引擎堅持你可以用Symfony的模板組件做:

與作曲家的symfony /模板安裝,然後註冊服務:

use Symfony\Component\Templating\PhpEngine; 
use Symfony\Component\Templating\TemplateNameParser; 
use Symfony\Component\Templating\Loader\FilesystemLoader; 

$app['templating'] = $app->share(function() { 
    $loader = new FilesystemLoader(array(
     '/path/to/dir1', 
     '/path/to/dir2', 
     '/path/to/dir3', 
    )); 
    $nameParser = new TemplateNameParser(); 
    $templating = new PhpEngine($nameParser, $loader); 
    return $templating; 
}); 

然後您只需使用此引擎作爲$app['templating']->render('template.php', array(...));

+0

哦,謝謝!這真的會幫助我,它看起來對我的項目來說可以。再次感謝!! :D – peregraum

+0

請注意Symfony模板組件,[它也可能會被放棄](https://github.com/symfony/symfony/issues/12897)。 – mTorres