如何在php

时间:2015-07-29 13:50:27

标签: php symfony twig

背景: 我想改变一个自编的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',在以这种方式生成路由时会导致异常。

我的问题是:如何确定某条路线在该方法中是否具有某些参数?

1 个答案:

答案 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);
        }
    }
    ....
}