2015-07-19 3 views
1

В последнее время я использую template manager for silex, но я заметил, что он был оставлен и больше не работает для более новых версий силекса. Вот пример кода, что он делает (это можно увидеть на его GitHub page):Альтернативный шаблон 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'); 

Итак, что же именно делает то, что это делает файл вы даете, и вы также можете дать другие параметры, чтобы отправить его в файл перед его рендерингом ... Это было очень полезно для меня, но, как я уже сказал, он был оставлен, и он больше не работает с более новыми версиями 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 Templating компонента:

Установить с композитором симфони/шаблонам, а затем зарегистрировать услугу:

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 Templating, [это, вероятно, также будет отменено] (https://github.com/symfony/symfony/issues/12897). – mTorres