Php 在Symfony 2中使用moustach作为模板语言

Php 在Symfony 2中使用moustach作为模板语言,php,symfony,mustache,Php,Symfony,Mustache,我开始使用symfony2,但我想使用moustache作为模板语言,而不是Twig或PHP。我不想使用小胡子,因为它完全没有逻辑,而且如果我决定处理模板客户端的呈现,我也可以在javascript中使用它 如何做到这一点?您必须创建一个实现并创建名为templating.engine.mustache的DIC服务的类来引用该类。然后在app/config.yml中可以设置默认引擎 #app/config.yml framework: #..... templating: e

我开始使用symfony2,但我想使用moustache作为模板语言,而不是Twig或PHP。我不想使用小胡子,因为它完全没有逻辑,而且如果我决定处理模板客户端的呈现,我也可以在javascript中使用它


如何做到这一点?

您必须创建一个实现并创建名为
templating.engine.mustache的DIC服务的类来引用该类。然后在
app/config.yml
中可以设置默认引擎

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

作为参考,您可以检查类及其。

一些扩展@m2mdas answer的额外信息

如果您还不熟悉Symfony模板系统和捆绑包配置,请在开始编码之前查看以下内容:

现在是一个让你开始的快速配方。以下面的例子为例,不需要坚持使用所选的名称

1。创建一个
Resources/config/mustache.xml
来定义您的服务并标识您的模板引擎服务(将其标记为
“templating.engine”
)。

<?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
}
您可以使用Yaml和PHP而不是XML,但对于“公共”捆绑包,更倾向于使用XML


Mustache.php

  • 2。创建一个
    扩展
    类来处理包的语义配置。

    <?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
    }
    
    示例:

    4。创建一个实现


    谢谢,这是一个非常好的答案,我会在写一些代码后尽快发布(我的个人项目正在使用simfony2!):)noisebleed:great writeup。它帮了我很多忙:)-这个。我已经完成了一个80%的任务。。。如果你想玩的话,我可以发布它:)我一直想完成这件事有一段时间了。。。请随意伸出援手。@BOB我伸出援手了,我对symfony2还相当陌生,我想我需要一些时间来理解一切,特别是因为这是在我的业余时间完成的,无论如何,谢谢你!)在最新提交时,“我的捆绑包”可与Symfony2 v2.1.0-DEV:)一起使用。您也可以尝试此捆绑包:
    
    # app/config/config.yml
    templating:    { engines: ['twig', 'mustache'] }
    
    <?php
    // src/Acme/HelloBundle/Controller/HelloController.php
    
    public function indexAction($name)
    {
        return $this->render('AcmeHelloBundle:Hello:index.html.mustache', array('name' => $name));
    }