[TwigBundle] split the route tag to 2 tags: path and url
This commit is contained in:
parent
c991b250ea
commit
1e13ecb5f3
@ -5,6 +5,8 @@ namespace Symfony\Bundle\TwigBundle\Extension;
|
||||
use Symfony\Bundle\TwigBundle\TokenParser\HelperTokenParser;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Symfony\Bundle\TwigBundle\TokenParser\IncludeTokenParser;
|
||||
use Symfony\Bundle\TwigBundle\TokenParser\UrlTokenParser;
|
||||
use Symfony\Bundle\TwigBundle\TokenParser\PathTokenParser;
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
@ -63,15 +65,18 @@ class TemplatingExtension extends \Twig_Extension
|
||||
// {% asset 'css/blog.css' %}
|
||||
new HelperTokenParser('asset', '<location>', 'templating.helper.assets', 'getUrl'),
|
||||
|
||||
// {% route 'blog_post' with ['id': post.id] %}
|
||||
new HelperTokenParser('route', '<route> [with <arguments:array>]', 'templating.helper.router', 'generate'),
|
||||
|
||||
// {% render 'BlogBundle:Post:list' with ['limit': 2], ['alt': 'BlogBundle:Post:error'] %}
|
||||
new HelperTokenParser('render', '<template> [with <attributes:array>[, <options:array>]]', 'templating.helper.actions', 'render'),
|
||||
|
||||
// {% flash 'notice' %}
|
||||
new HelperTokenParser('flash', '<name>', 'templating.helper.session', 'getFlash'),
|
||||
|
||||
// {% path 'blog_post' with ['id': post.id] %}
|
||||
new PathTokenParser(),
|
||||
|
||||
// {% url 'blog_post' with ['id': post.id] %}
|
||||
new UrlTokenParser(),
|
||||
|
||||
// {% include 'sometemplate.php' with ['something' : 'something2'] %}
|
||||
new IncludeTokenParser(),
|
||||
);
|
||||
|
44
src/Symfony/Bundle/TwigBundle/Node/RouteNode.php
Normal file
44
src/Symfony/Bundle/TwigBundle/Node/RouteNode.php
Normal file
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace Symfony\Bundle\TwigBundle\Node;
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*/
|
||||
class RouteNode extends \Twig_Node
|
||||
{
|
||||
public function __construct(\Twig_NodeInterface $route, \Twig_Node_Expression $attributes = null, $absolute, $lineno, $tag = null)
|
||||
{
|
||||
parent::__construct(array('route' => $route, 'route_attributes' => $attributes), array('absolute' => $absolute), $lineno, $tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compiles the node to PHP.
|
||||
*
|
||||
* @param \Twig_Compiler A Twig_Compiler instance
|
||||
*/
|
||||
public function compile($compiler)
|
||||
{
|
||||
$compiler
|
||||
->addDebugInfo($this)
|
||||
->write('echo $this->env->getExtension(\'templating\')->getContainer()->get(\'router\')->generate(')
|
||||
->subcompile($this->getNode('route'))
|
||||
->raw(', ')
|
||||
->subcompile($this->getNode('route_attributes'))
|
||||
->raw(', ')
|
||||
->raw($this->getAttribute('absolute') ? 'true' : 'false')
|
||||
->raw(");")
|
||||
;
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace Symfony\Bundle\TwigBundle\TokenParser;
|
||||
|
||||
use Symfony\Bundle\TwigBundle\Node\RouteNode;
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*/
|
||||
class PathTokenParser extends \Twig_TokenParser
|
||||
{
|
||||
/**
|
||||
* Parses a token and returns a node.
|
||||
*
|
||||
* @param \Twig_Token $token A Twig_Token instance
|
||||
*
|
||||
* @return \Twig_NodeInterface A Twig_NodeInterface instance
|
||||
*/
|
||||
public function parse(\Twig_Token $token)
|
||||
{
|
||||
$lineno = $token->getLine();
|
||||
$stream = $this->parser->getStream();
|
||||
|
||||
$route = $this->parser->getExpressionParser()->parseExpression();
|
||||
|
||||
$attributes = null;
|
||||
if ($stream->test('with')) {
|
||||
$stream->next();
|
||||
$attributes = $this->parser->getExpressionParser()->parseExpression();
|
||||
}
|
||||
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
|
||||
return new RouteNode($route, $attributes, $this->isAbsolute(), $lineno, $this->getTag());
|
||||
}
|
||||
|
||||
protected function isAbsolute()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the tag name associated with this token parser.
|
||||
*
|
||||
* @param string The tag name
|
||||
*/
|
||||
public function getTag()
|
||||
{
|
||||
return 'path';
|
||||
}
|
||||
}
|
37
src/Symfony/Bundle/TwigBundle/TokenParser/UrlTokenParser.php
Normal file
37
src/Symfony/Bundle/TwigBundle/TokenParser/UrlTokenParser.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace Symfony\Bundle\TwigBundle\TokenParser;
|
||||
|
||||
use Symfony\Bundle\TwigBundle\Node\RouteNode;
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*/
|
||||
class UrlTokenParser extends PathTokenParser
|
||||
{
|
||||
protected function isAbsolute()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the tag name associated with this token parser.
|
||||
*
|
||||
* @param string The tag name
|
||||
*/
|
||||
public function getTag()
|
||||
{
|
||||
return 'url';
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user