Intereting Posts
создать папку и подпапку в этой папке Есть ли статический способ бросить исключение в php Как проверить, имеют ли два индексированных массива одинаковые значения, даже если порядок не совпадает с PHP? Как загрузить файл с SFTP-сервера с помощью PHP Как добиться эффекта размытия в PHP? Измените размер изображения без искажения, сохраняя пропорции, а затем избыток урожая с помощью WideImage Preg_match для выражения, эквивалентного регулярному выражению как взять sqrt в sqlite Как я могу получить совпадения при использовании preg_replace в PHP? Как безопасно использовать UniqueEntity (на сайтах с более чем одним одновременным пользователем) Поменяйте все URL-адреса youtube, чтобы вставлять их через preg_replace () Возможно ли создать файл * .sh с помощью PHP CLI и получить доступ к экспортированным Env vars в PHP-скрипте? Безопасное генерирование случайных чисел в PHP php включает файл, который включает Задание php cron не работает

Использование Усы в качестве шаблона в Symfony 2

Я начинаю использовать symfony 2, но я бы хотел использовать усы как язык шаблонов вместо Twig или PHP. Я не буду использовать усы, потому что это абсолютно логично, и потому я могу использовать его в javascript, если я решаю обработать визуализацию шаблона clientside.

Любые советы о том, как это сделать?

Related of "Использование Усы в качестве шаблона в Symfony 2"

Дополнительная информация, на которую распространяется ответ @ m2mdas.

Если вы еще не знакомы с системами шаблонов Symfony и конфигурацией пакетов, взгляните на них, прежде чем начинать кодирование:

  • Как открыть семантическую конфигурацию для пакета
  • Создание и использование шаблонов
  • Как использовать PHP вместо Twig для шаблонов

И теперь быстрый рецепт, чтобы вы начали. Возьмите следующие примеры: нет необходимости придерживаться выбранных имен.

1. Создайте Resources/config/mustache.xml чтобы определить свои службы и определить свой механизм движка шаблона (пометьте его как "templating.engine" ).

Вы можете использовать Yaml и PHP вместо XML, но последний предпочтительнее для «публичных» пакетов.

 <service id="mustache" class="Mustache"> <file>Mustache.php</file> </service> <service id="templating.engine.mustache" class="MustacheBundle\MustacheEngine" public="false"> <argument type="service" id="mustache" /> <argument type="service" id="templating.name_parser"/> <argument type="service" id="templating.loader" /> <tag name="templating.engine" /> </service> 

Примеры:

  • прут
  • PHP
  • всезнайка

2. Создайте класс Extension для обработки семантической конфигурации для вашего пакета.

 <?php namespace MustacheBundle; use Symfony\Component\HttpKernel\DependencyInjection\Extension; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; class MustacheExtension extends Extension { $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('mustache.xml'); // you may parse the $configs array here // see: http://symfony.com/doc/current/cookbook/bundles/extension.html#parsing-the-configs-array } 

Наличие предыдущего класса означает, что теперь вы можете определить пространство имен конфигурации mustache в любом файле конфигурации.

Примеры:

  • прут
  • всезнайка

3. [Необязательно] Создайте класс Configuration для проверки и объединения конфигурации

 <?php namespace Mustache\DependencyInjection; use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; class Configuration implements ConfigurationInterface { public function getConfigTreeBuilder() { $treeBuilder = new TreeBuilder(); $rootNode = $treeBuilder->root('mustache'); // see: http://symfony.com/doc/current/cookbook/bundles/extension.html#validation-and-merging-with-a-configuration-class } } 

Примеры:

  • прут
  • всезнайка

4. Создайте MustacheEngine который реализует EngineInterface

 <?php namespace MustacheBundle; use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface; use Symfony\Component\Templating\TemplateNameParserInterface; use Symfony\Component\Templating\Loader\LoaderInterface; use Symfony\Component\HttpFoundation\Response; class MustacheBundle implements EngineInterface { public function __construct(\Mustache $mustache, TemplateNameParserInterface $parser, LoaderInterface $loader) { $this->mustache = $mustache; $this->parser = $parser; } public function render($name, array $parameters = array()) { $template = $this->load($name); return $this->mustache->render($template); } // Renders a view and returns a Response. public function renderResponse($view, array $parameters = array(), Response $response = null) { if (null === $response) { $response = new Response(); } $response->setContent($this->render($view, $parameters)); return $response; } // Returns true if the template exists. public function exists($name) { try { $this->load($name); } catch (\InvalidArgumentException $e) { return false; } return true; } // Returns true if this class is able to render the given template. public function supports($name) { $template = $this->parser->parse($name); return 'mustache' === $template->get('engine'); } // Loads the given template. // Should return the template name or a Mustache template object protected function load($name) { $template = $this->parser->parse($name); $template = $this->loader->load($template); return (string) $template; } 

Примеры:

  • прут
  • PHP
  • всезнайка

5. Включите свой новый механизм шаблонов в файле конфигурации приложения:

 # app/config/config.yml templating: { engines: ['twig', 'mustache'] } 

6. Попробуйте

 <?php // src/Acme/HelloBundle/Controller/HelloController.php public function indexAction($name) { return $this->render('AcmeHelloBundle:Hello:index.html.mustache', array('name' => $name)); } 

Вы можете поделиться ссылкой на свой репозиторий пакетов, чтобы мы могли отслеживать прогресс и при необходимости помогать. Удачи.

Вы должны создать класс, который реализует EngineInterface, и создать для службы DIC сервис с именем templating.engine.mustache для ссылки на класс. А затем в app/config.yml вы можете установить двигатель по умолчанию.

 #app/config.yml framework: #..... templating: engines: ['mustache'] //mustache is the last portion of the service id 

Для справки вы можете проверить класс PhpEngine и его определение сервиса .