Как внедрить сервис в другой сервис и получить пользователя в Symfony 4? - PullRequest
0 голосов
/ 05 февраля 2019

Я новичок в Symfony, я пытаюсь использовать инъекцию зависимостей, чтобы получить пользователя в сервисе (я думаю)

services.yaml:

App\Service\Test\RESTAuthenticatedService:
         calls:
             - method: getTrigramme
               arguments:
                   - '@security.token_storage'

В моем RESTAuthenticatedService.php:

namespace App\Service\Test;
....
class RESTAuthenticatedService extends AbstractController {
protected $session;
private $user;
....
public function getTrigramme(){
     $user = $this->token_storage->getToken()->getUser();
ERROR : 
Notice: Undefined property: App\Service\Test\PrestataireService::$token_storage

Можете ли вы мне помочь, пожалуйста?


Хорошо, сначала спасибо всем, я пробую то, что высказал, и у меня есть эта ошибка:

Too few arguments to function App\Service\Test\ClientService::__construct(), 0 passed in D:\www\Interface_SAT\src\Controller\RecherchePrestataires.php on line 60 and exactly 2 expected

В моем контроллере RecherchePrestataires.php у меня есть:

.....
public function rechercher(Request $request) {
....
    $recherchePresta = new PrestataireService();

В классе файлов PrestataireService у меня просто:

class PrestataireService extends ClientService { 

В ClientService:

    use Symfony\Component\HttpFoundation\Session\SessionInterface;
    use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;

class ClientService extends RESTAuthenticatedService
{
    public $user;

    public function __construct(SessionInterface $session, TokenStorageInterface $tokenStorage)
    {
        parent::__construct($session, $tokenStorage);
        $this->setSession($session);
    }

И в RESTAuthenticatedService: Я сделал:

public function __construct(SessionInterface $session, TokenStorageInterface $tokenStorage)
    {
        $this->token_storage = $tokenStorage;

Извините, но я пробую много вещей.

1 Ответ

0 голосов
/ 05 февраля 2019

Похоже, вы не создали конструктор в классе.

Вы определили в своем services.yaml, что у вашего класса есть зависимость, но вы ничего не сделали с этой зависимостью.Вам нужно создать конструктор, добавить зависимость в качестве параметра и назначить локальную переменную.

use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;

class RESTAuthenticatedService extends AbstractController

    /**
     * @var TokenStorageInterface
     */
    private $token_storage;

    public function __construct(TokenStorageInterface $tokenStorage)
    {
        $this->token_storage = $tokenStorage;
    }
}

Тогда вы сможете получить доступ к $ this-> token_storage.

Редактировать: Измените ваш services.yaml, чтобы добавить зависимость в конструктор.

App\Service\Test\RESTAuthenticatedService:
     class: App\Service\Test\RESTAuthenticatedService
     arguments:
        - '@security.token_storage'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...