我在那里我试图注入路由器服务一根树枝延伸,所以...... services.yml不可能路由器服务传递给树枝延伸symfony的2.6
app.twig_extension:
class: SeoReportBundle\Twig\SeoReportExtension
arguments: [@router]
tags:
- { name: twig.extension }
扩展:
使用Symfony \ Bundle \ FrameworkBundle \ Routing \ Router;
class SeoReportExtension extends \Twig_Extension
{
private $router;
public function __construct(Router $router)
{
$this->router = $router;
}
当我执行的代码,我得到这个错误:
Catchable Fatal Error: Argument 1 passed to SeoReportBundle\Twig\SeoReportExtension::__construct() must be an instance of Symfony\Bundle\FrameworkBundle\Routing\Router, none given
尝试调试这一点,我没有这种变化中的代码,试图了解发生了什么事情:
public function __construct($router) {
var_dump($router);die();
$this->router = $router; }
所以我删除了类型提示,然后我做了一个对象转储,以查看构造方法中获得的内容。令我惊讶的是,这是输出:
Object(Symfony\Bundle\FrameworkBundle\Routing\Router)[198]
private 'container' =>
object(appDevDebugProjectContainer)[219]
private 'parameters' => ...
所以......它实际上传递了一个路由器对象。那么...为什么我会得到这个错误?我在这一点上完全丧失
--- UPDATE --- 这是我迄今发现: - 在/app/cache/dev/appDevDebugProjectContainer.php有在其中创建扩展两个地方:
protected function getApp_TwigExtensionService()
{
return $this->services['app.twig_extension'] = new \SeoReportBundle\Twig\SeoReportExtension($this->get('router'));
}
哪个是正确的,它通过路由器构建 而且......
protected function getTwigService()
{
$this->services['twig'] = $instance = new \Twig_Environment($this->get('twig.loader'), array('debug' => true, 'strict_variables' => true, 'exception_controller' => 'twig.controller.exception:showAction', 'form_themes' => array(0 => 'form_div_layout.html.twig'), 'autoescape' => array(0 => 'Symfony\\Bundle\\TwigBundle\\TwigDefaultEscapingStrategy', 1 => 'guess'), 'cache' => (__DIR__.'/twig'), 'charset' => 'UTF-8', 'paths' => array()));
$instance->addExtension($this->get('app.twig_extension'));
...
$instance->addExtension(new \Symfony\Bundle\AsseticBundle\Twig\AsseticExtension($this->get('assetic.asset_factory'), $this->get('templating.name_parser'), true, array(), array(0 => 'SeoReportBundle'), new \Symfony\Bundle\AsseticBundle\DefaultValueSupplier($this)));
$instance->addExtension(new \Doctrine\Bundle\DoctrineBundle\Twig\DoctrineExtension());
$instance->addExtension(new \SeoReportBundle\Twig\SeoReportExtension());
现在,这一个不通过路由器。但它确实将某些依赖关系传递给其他扩展。因此,必须有可供\Twig_SimpleFunction
实例,以及以同样的方式\Twig_SimpleFilter
一个原因,矿井延伸工作不
只是咧嘴笑,拿出大众:虚假的属性。您可以使用public:false来忽略此文档。 – Cerad 2015-02-23 15:10:17
完成!问题依然存在:) – petekaner 2015-02-23 15:17:30
删除die();也许构建被称为第二次没有路由器。 – gries 2015-02-23 15:27:10