расширенный __construct не работает

У меня есть, например, CategoriesController.php, как это ниже

class CategoriesController
{
/**
* Translator object.
*
* @var Translator $translator
*/
private $translator;

/**
* Template engine.
*
* @var EngineInterface $templating
*/
private $templating;

/**
* Session object.
*
* @var Session $session
*/
private $session;

/**
* Routing object.
*
* @var RouterInterface $router
*/
private $router;

/**
* Model object.
*
* @var ObjectRepository $model
*/
private $model;

/**
* Form factory.
*
* @var FormFactory $formFactory
*/
private $formFactory;

/**
* CategoriesController constructor.
*
* @param Translator $translator Translator
* @param EngineInterface $templating Templating engine
* @param Session $session Session
* @param RouterInterface $router
* @param ObjectRepository $model Model object
* @param FormFactory $formFactory Form factory
*/
public function __construct(
Translator $translator,
EngineInterface $templating,
Session $session,
RouterInterface $router,
ObjectRepository $model,
FormFactory $formFactory
) {
$this->translator = $translator;
$this->templating = $templating;
$this->session = $session;
$this->router = $router;
$this->model = $model;
$this->formFactory = $formFactory;
}

/**
* Index action.
*
* @return Response A Response instance
*/
public function indexAction()
{
$categories = $this->model->findAll();
return $this->templating->renderResponse(
'AppBundle:Categories:index.html.twig',
array('categories' => $categories)
);
}

Классов вроде CategoriesControllel у меня много, поэтому я думаю, что часть этого должна быть в одном DefaultController, чтобы не дублировать код. И если я переместить свой код в DefaultController, как это:

<?php
/**
* Default controller class.
*/

namespace AppBundle\Controller;

/**
* Class DefaultController.
*/
class DefaultController
{
/**
* Translator object.
*
* @var Translator $translator
*/
private $translator;

/**
* Template engine.
*
* @var EngineInterface $templating
*/
private $templating;

/**
* Session object.
*
* @var Session $session
*/
private $session;

/**
* Routing object.
*
* @var RouterInterface $router
*/
private $router;

/**
* Model object.
*
* @var ObjectRepository $model
*/
private $model;

/**
* Form factory.
*
* @var FormFactory $formFactory
*/
private $formFactory;

/**
* CategoriesController constructor.
*
* @param Translator $translator Translator
* @param EngineInterface $templating Templating engine
* @param Session $session Session
* @param RouterInterface $router
* @param ObjectRepository $model Model object
* @param FormFactory $formFactory Form factory
*/
public function __construct(
Translator $translator,
EngineInterface $templating,
Session $session,
RouterInterface $router,
ObjectRepository $model,
FormFactory $formFactory
) {
$this->translator = $translator;
$this->templating = $templating;
$this->session = $session;
$this->router = $router;
$this->model = $model;
$this->formFactory = $formFactory;
}
}

А в КатегорияхКонтроллер:

<?php
/**
* Categories controller class.
*/

namespace AppBundle\Controller;

class CategoriesController extends DefaultController
{

/**
* Index action.
*
* @return Response A Response instance
*/
public function indexAction()
{
$categories = $this->model->findAllWithAds();
if (!$categories) {
throw new NotFoundHttpException(
$this->translator->trans('categories.messages.categories_not_found')
);
}
return $this->templating->renderResponse(
'AppBundle:Categories:index.html.twig',
array('categories' => $categories)
);
}

После этого мое приложение не работает.

( ! ) Catchable fatal error: Argument 1 passed to AppBundle\Controller\DefaultController::__construct() must be an instance of AppBundle\Controller\Translator, instance of...

Когда я оставляю пустой конструктор в CategoriesController, он не нашел никаких сервисов в виде частных переменных.
Как я могу это исправить?

0

Решение

Я думаю, что проблема в том, что вы не зарегистрировали свой контроллер в качестве службы в вашем services.yml, Если вы этого не сделаете, Symfony будет рассматривать его как обычный контроллер и попытается создать экземпляр с аргументами по умолчанию, что приведет к несоответствию, которое вы видели в сообщении об ошибке.

Проверьте документы о том, как определить ваш контроллер как сервис.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]