Einige zusätzliche Informationen erweitern @ m2mdas Antwort.
Wenn Sie mit Symfony Templating-Systeme noch nicht so vertraut sind und bündeln Konfiguration an diese einen Blick darauf werfen, bevor Sie Codierung starten:
Und jetzt ein schnelles Rezept, um loszulegen. Nehmen Sie das Folgende als lose Beispiele, keine Notwendigkeit, bei den gewählten Namen zu bleiben.
1. Erstellen Sie eine Resources/config/mustache.xml
, um Ihre Dienste zu definieren und Ihren Vorlagen-Engine-Dienst zu identifizieren (markieren Sie ihn als "templating.engine"
).
Sie könnten Yaml und PHP anstelle von XML verwenden, aber Letzteres wird für "öffentliche" Bundles bevorzugt.
<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>
Beispiele:
2. Extension
eine Klasse erzeugen, die semantische Konfiguration für y zu handhaben unser Bündel.
<?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
}
Das Vorhandensein der vorherigen Klasse bedeutet, dass Sie jetzt eine mustache
Konfiguration Namespace in jeder Konfigurationsdatei festlegen können.
Beispiele:
3. [Optional] erstellen Configuration
Klassen-Konfiguration
<?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
}
}
zu validieren und fusionieren
Beispiele:
4. Erstellen Sie eine MustacheEngine
die 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;
}
Beispiele implementiert:
5. Aktivieren Sie Ihre glänzende neue Template-Engine in der Anwendungskonfigurationsdatei:
# app/config/config.yml
templating: { engines: ['twig', 'mustache'] }
6. Versuchen Sie es
Sie können einen Link zu Ihrem Bundle-Repository freigeben, damit wir den Fortschritt verfolgen und bei Bedarf helfen können. Viel Glück.
Ich habe gemeint, dies für eine Weile zu beenden ... https://github.com/bobthecow/BobthecowMustacheBundle Fühlen Sie sich frei zu verzweigen und zu helfen. – bobthecow
@bobthecow Ich habe es gegabelt, ich bin ziemlich neu bei symfony2 und ich denke, ich werde etwas Zeit brauchen, um alles zu verstehen, besonders da dies in meiner Freizeit gemacht wird, auf jeden Fall danke! :) –
Ab dem letzten Commit funktioniert mein Bundle mit Symfony2 v2.1.0-DEV :) – bobthecow