无法在Symfony2细枝扩展中重新声明类
我正在创建一个细枝扩展,并通过服务激活它。除了我试图简单地使用我的Twig扩展中的另一个类之外,其他一切都很好 其思想是实例化新类,然后根据需要使用它。实例化是一个问题,因为它会导致以下错误:无法在Symfony2细枝扩展中重新声明类,symfony,twig,Symfony,Twig,我正在创建一个细枝扩展,并通过服务激活它。除了我试图简单地使用我的Twig扩展中的另一个类之外,其他一切都很好 其思想是实例化新类,然后根据需要使用它。实例化是一个问题,因为它会导致以下错误: Error: Cannot redeclare class NewClass in .../Bundle/NewClass.php line 13 当然,它只实例化了一次。为什么会这样 namespace Bundle\Twig; use Bundle\NewClass; class NewExte
Error: Cannot redeclare class NewClass in .../Bundle/NewClass.php line 13
当然,它只实例化了一次。为什么会这样
namespace Bundle\Twig;
use Bundle\NewClass;
class NewExtension extends \Twig_Extension
{
private $request;
private $new_class;
public function __construct($container) {
//get the Request object
$this->request = $container->get('request');
//instantiate new class
$this->new_class = new NewClass(); // this part triggers the error
}
///etc.
您应该将您的
NewClass
放入一个服务中,然后将该服务和@request
服务注入到您的分支扩展中,而不是容器中。直接注射容器显然是个坏主意
例如在您的服务中
services:
# create new class as a instantiated service
acme_demo.new_class:
class: Acme\DemoBundle\NewClass
arguments: [ '@request' ]
acme_demo.twig.acme_extension:
class: Acme\DemoBundle\Twig\AcmeExtension
arguments: [ '@request', '@acme_demo.new_class' ]
# inject the Request service and your class from above
tags:
- { name: twig.extension }
然后在你的小树枝上
namespace Bundle\Twig;
use Bundle\NewClass;
class NewExtension extends \Twig_Extension
{
private $new_class;
public function __construct(NewClass $newClass) {
$this->new_class = $newClass;
}
///etc.
在你的新班级:
namespace Bundle;
class NewClass
{
private $param1;
private $param2;
public function __construct(Request $request)
{
$this->param1 = $request->get('param1');
$this->param2 = $request->get('param2');
// You could also add some check in here to make sure they are valid.
}
您好,谢谢,唯一的问题是我如何像在PHP中通常使用的那样将参数传递到新类:newnewclass($param1,$param2)等等-所有参数都来自请求类。您可以将请求发送到NewClass以获取参数。我已经更新了我的答案。但似乎并不理想。为什么你需要在你的小枝扩展请求?那可能更有意义。