Symfony 3.4.3 - контейнер службы: ошибка требует, чтобы вы указали значение для

я потратил много времени но я не решил это я хотел бы передать LoggerInterface в действие моего контроллера

вот мой service.yml

# Learn more about services, parameters and containers at
# https://symfony.com/doc/current/service_container.html
parameters:
    #parameter_name: value

services:
    # default configuration for services in *this* file
    _defaults:
        # automatically injects dependencies in your services
        autowire: true
        # automatically registers your services as commands, event subscribers, etc.
        autoconfigure: true
        # this means you cannot fetch services directly from the container via $container->get()
        # if you need to do this, you can override this setting on individual services
        public: false

    # makes classes in src/AppBundle available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    AppBundle\:
        resource: '../../src/AppBundle/*'
        # you can exclude directories or files
        # but if a service is unused, it's removed anyway
        exclude: '../../src/AppBundle/{Entity,Repository,Tests}'

    # controllers are imported separately to make sure they're public
    # and have a tag that allows actions to type-hint services
    AppBundle\Controller\:
        resource: '../../src/AppBundle/Controller'
        public: true
        tags: ['controller.service_arguments']

    # AppBundle\Controller\ArticlesController:
    appbundle.form.type.articles:
        class: AppBundle\Controller\ArticlesController 
        autowire: false
        tags: ['controller.service_arguments']

вот мой контроллер

<?php
//AppBundle\Controller\ArticlesController.php
namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use AppBundle\Dto\ArticlesRequest; 
use AppBundle\Form\ArticlesType;
use Psr\Log\LoggerInterface; 



class ArticlesController extends Controller
{
    public function ListAction()
    {
        return $this->render("@App/Articles/list.html.twig");
    }

    public function CreateAction(Request $request, LoggerInterface $logger) 
    {
        $createArticleRequest = new ArticlesRequest();

        $form = $this->createForm(ArticlesType::class, $createArticleRequest); 
        return $this->render("@App/Articles/create.html.twig", array('form' => $form->createView()));
        //return $this->render("@App/Articles/create.html.twig");

    }

    public function EditAction()
    {
        return $this->render("@App/Articles/edit.html.twig");
    }

    public function DeleteAction()
    {
        return $this->render("@App/Articles/delete.html.twig");
    }

}

Это сообщение об ошибке:

Контроллер «AppBundle \ Controller \ ArticlesController :: CreateAction ()» требует, чтобы вы указали значение для аргумента «$ logger». Либо аргумент допускает значение NULL, и значение NULL не указано, значение по умолчанию не указано, либо после него стоит необязательный аргумент.


person BruceOverflow    schedule 02.02.2018    source источник


Ответы (2)


В вашем services.yml в appbundle.form.type.articles вам нужно передать autowire в true. В противном случае symfony не сможет внедрить зависимости в ваш сервис.
Если вы добавите значение по умолчанию null, как предложено выше, вы не сможете ничего регистрировать, так как вы не можете войти в систему с нулевым значением. И если вы не хотите ничего регистрировать, просто удалите LoggerInterface из ваших параметров.

person chrissienoodle    schedule 13.03.2019

Я разрешаю этот код

вместо

public function CreateAction(Request $request, EntityManagerInterface $logger) 

это

public function CreateAction(Request $request, EntityManagerInterface $logger = null) 

добавить только = ноль

person BruceOverflow    schedule 02.02.2018
comment
что, если $ logger равен нулю, вы все равно не можете использовать это в контроллере - person Mohammed Yassine CHABLI; 07.09.2018