在控制器的__construct中添加服务

时间:2016-02-09 15:25:42

标签: symfony service constructor

我想在__construct控制器中使用服务。 所以,我按照食谱:http://symfony.com/doc/current/cookbook/controller/service.html

但我不行,这是我的代码:

 class CheckoutController extends Controller
 {
private $checkoutService;

public function __construct(Panier $checkoutService){
    $this->session = new Session();


    if (!$this->session->has('panier')){
        $this->checkoutService = $checkoutService;
        $this->session->set('panier',$this->checkoutService);
    }
    if (!$this->session->has('etape')) $this->session->set('etape',0);

}`

我在service.xml中声明了这个控制器:

acme.checkout_controller: class: acme\EcommerceBundle\Controller\CheckoutController arguments: [@kiyoi.getCheckout]

所以我得到这个错误, Catchable Fatal Error: Argument 1 passed to acme\EcommerceBundle\Controller\CheckoutController::__construct() must be an instance of acme\EcommerceBundle\Checkout\Panier, none given, called in /var/www/v2-acme-site/app/cache/dev/classes.php on line 2176 and defined

我不明白为什么我会收到这个错误!!

您知道在控制器的构造函数中使用服务的另一种解决方案吗?感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您还需要更改路由以使用服务名称来实现此功能。

来自这个

checkout : path: /checkout defaults: { _controller: TestBundle:Cart:checkout}

到这个

checkout: path: /checkout defaults: { _controller: acme.checkout_controller:checkout}