Контроллер Symfony с параметрами URL и внедренными сервисами - PullRequest
0 голосов
/ 18 июня 2019

В Symfony 3.4 у меня есть контроллер, в котором некоторые параметры заполнены из URL, а также мне нужен сервис для внедрения. Я получаю следующее сообщение об ошибке:

Контроллер "Acs \ EventNodeBundle \ Controller \ MainController :: calendarAction ()" требует, чтобы вы указали значение для аргумента "$ router". Или аргумент обнуляем, и нулевое значение не было предоставлено, нет предоставлено значение по умолчанию или потому что есть необязательный аргумент после этого.

Почему Symfony не вводит маршрутизатор? Это мой код:

Контроллер:

...

use Symfony\Bundle\FrameworkBundle\Routing\Router;

/**
 * Class MainController
 */
class MainController extends Controller
{
    /**
     * @param Router   $router
     * @param null|int $year
     * @param null|int $month
     * @return RedirectResponse|Response
     */
    public function calendarAction(Router $router, $year = null, $month = null)
    {
...

. Services.yml:

...
services:
    # default configuration for services in *this* file
    _defaults:
        # automatically injects dependencies in services
        autowire: true
        # automatically registers services as commands, event subscribers, etc.
        autoconfigure: true
        # services cannot be fetched directly from the container via $container->get()
        # need to override this setting individually
        public: false

        bind:
            $entityManager: '@Doctrine\ORM\EntityManagerInterface'

   # enable autowiring for controllers
   Acs\EventNodeBundle\Controller\:
       resource: '../../Controller'
       public: true
       tags: ['controller.service_arguments']
...

И пойдут:

...
    eventnode_main:
        path: /{year}/{month}
        methods: [GET]
        defaults: { _controller: AcsEventNodeBundle:Main:calendar, year: null, month: null}
        requirements:
            year: '\d+'
            month: '\d+'
...

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Конструктор в вашем контроллере должен выполнять работу:

/**
 * MainController constructor.
 *
 * @param Router $router
 */
public function __construct(
    Router $router
) {
    $this->router = $router;
}
0 голосов
/ 18 июня 2019

Попробуйте добавить это в ваши services.yml:

Acs\EventNodeBundle\:
    resource: '../../src/EventNodeBundle/*'

Это сделает классы в src / EventNodeBundle доступными для использования в качестве сервисов.

См. Эту документацию: https://symfony.com/doc/3.4/service_container/3.3-di-changes.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...