繁体   English   中英

Symfony 4 自动装配参数不起作用

[英]Symfony 4 autowiring argument not working

我正在尝试将UrlGeneratorInterface自动连接到 DTO 以在我的 DTO 中使用 generate 方法,

我的 DTO 中有这个:

namespace App\DTO;

use JMS\Serializer\Annotation as Serializer;
use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Expose;
use App\Entity\News;
use App\Application\Sonata\MediaBundle\Entity\Media;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;


/**
 * @ExclusionPolicy("all")
 *
 */
class NewsDTO
{

    /**
     * @var integer|null
     * @Serializer\Groups({"news"})
     * @Expose
     */
    public $id;

    /**
     * @var string|null
     * @Serializer\Groups({"news"})
     * @Expose
     */
    public $title;


    /**
     * @var string|null
     * @Serializer\Groups({"news"})
     * @Expose
     */
    public $text;

    /**
     * @var string|null
     * @Serializer\Groups({"news"})
     * @Expose
     */
    public $cover_image;


    /**
     * @var string|null
     * @Serializer\Groups({"news"})
     * @Expose
     */
    public $description;

    /**
     * @var string|null
     * @Serializer\Groups({"news"})
     * @Expose
     */
    public $web_url;

    /**
     * @var string|null
     * @Serializer\Groups({"news"})
     * @Expose
     */
    public $link;

    /**
     * @var datetime|null
     * @Serializer\Groups({"news"})
     * @Expose
     */
    private $news_date;

    private $router;

    public function __construct(UrlGeneratorInterface $urlGenerator){
        $this->router = $router;
    }

和我的服务。yaml:

parameters:
    locale: 'fr'

services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.

    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Application,Kernel.php}'

    # controllers are imported separately to make sure services can be injected
    # as action arguments even if you don't extend any base controller class
    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

    dto.news :
        class: App\DTO\NewsDTO
        arguments: 
            $urlGenerator: ['@router.default']

    # add more service definitions when explicit configuration is needed
    # please note that last definitions always *replace* previous ones
    admin.videos:
        class: App\Admin\VideoAdmin
        arguments: [~, App\Entity\Video, ~]
        tags:
            - { name: sonata.admin, manager_type: orm, label: Video }
    admin.news:
        class: App\Admin\NewsAdmin
        arguments: [~, App\Entity\News, ~]
        tags:
            - { name: sonata.admin, manager_type: orm, label: Actualités }
    admin.prerolls:
        class: App\Admin\PrerollAdmin
        arguments: [~, App\Entity\Preroll, ~]
        tags:
            - { name: sonata.admin, manager_type: orm, label: Preroll }

但是返回的错误是:

 "message": "Too few arguments to function App\\DTO\\NewsDTO::__construct(), 0 passed in /data/www/api-dev.chartres.live/www/src/Representation/Actus.php on line 35 and exactly 1 expected"

您可能没有正确调用该服务。

/data/www/api-dev.chartres.live/www/src/Representation/Actus.php中,您可能会执行以下操作:

$newsDto = new NewsDTO();

但是您需要做的是使用服务注入器:

// Assuming this is a controller or has access to the `get()` service loopup
$newsDto = $this->get('dto.news');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM