背景: 我想改变一个自编的Twig扩展。 该类定义如下:
class pagination extends \Twig_Extension {
protected $generator;
public function __construct($generator){
$this->generator = $generator;
}
....
}
在其中一种方法中我想生成这样的URL:
$this->generator->generate($route, array('routeParam' => $value);
但问题是,有些路由没有param'routeParam',在以这种方式生成路由时会导致异常。
我的问题是:如何确定某条路线在该方法中是否具有某些参数?
答案 0 :(得分:6)
要检查您的路线是否包含编辑路线所需的所有参数,要编译路线,您需要路由器服务,以便通过添加服务定义将@service_container
服务传递到您的树枝延伸
somename.twig.pagination_extension:
class: Yournamesapce\YourBundle\Twig\Pagination
arguments: [ '@your_generator_service','@service_container' ]
tags:
- { name: twig.extension } ...
然后在你的类中获取容器,然后从容器中获取路由器服务,并在getRouteCollection()
获得所需路由后,通过$routes->get($route)
获取所有路由,然后编译该路由,一旦有了一个编译的路由定义,您可以通过调用getVariables()
来获取路由所需的所有参数,这将返回参数数组,并且在routeParam
存在的情况下生成检入数组
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
class Pagination extends \Twig_Extension {
protected $generator;
private $container;
public function __construct($generator,Container $container){
$this->generator = $generator;
$this->container = $container;
}
public function somefunction(){
$routes = $this->container->get('router')->getRouteCollection();
$routeDefinition = $routes->get($route);
$compiledRoute = $routeDefinition->compile();
$all_params = $compiledRoute->getVariables();
if(in_array('routeParam',$all_params)){
$this->generator->generate($route, array('routeParam' => $value);
}
}
....
}