I'm trying to autowire the UrlGeneratorInterface
into a DTO to use the generate method in my DTO,
I have this in my 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;
}
and my service.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 }
But the error returned is:
"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"
You likely arent calling the service correctly.
In /data/www/api-dev.chartres.live/www/src/Representation/Actus.php
you are likely doing something like:
$newsDto = new NewsDTO();
But what you need to do instead is used the service injector:
// Assuming this is a controller or has access to the `get()` service loopup
$newsDto = $this->get('dto.news');
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.