簡體   English   中英

將參數傳遞給用戶作為依賴注入-symfony4

[英]Pass user in argument as dependence injection - symfony4

錯誤:“無法解析“ App \\ Controller \\ StudyActivityController :: create()”的參數$ experienceCalculator:無法自動裝配服務“ App \\ Service \\ ExperienceCalculator”:方法“ __construct()”的參數“ $ user”引用接口“ Symfony \\ Component \\ Security \\ Core \\ User \\ UserInterface“,但不存在這樣的服務。您是否創建了實現此接口的類?”

我正在使用api,並且需要在我作為控制器中的依賴項注入傳遞的服務中訪問用戶。 如果我在控制器中訪問用戶,則可以正常運行,但在服務中則無法正常運行。

// src/Controller/StudyTimeController.php

public function create(
    Request $request,
    UserInterface $user,
    ExperienceCalculator $experienceCalculator
)
{
    $experienceCalculator->calculate();
}

傳入服務的構造函數時,似乎自動裝配找不到UserInterface。

// src/Service/ExperienceCalculator.php

public function __construct(
    StudyTimeRepository $studyTimeRepository,
    UserInterface $user
)
{
    $this->studyTimeRepository = $studyTimeRepository;
    $this->user = $user;
}

因此,我要做的是在配置中添加一個別名,以便服務知道已傳遞了哪個類,該類可以工作,但不會填充用戶。

# config/services.yaml

App\Entity\User: ~
Symfony\Component\Security\Core\User\UserInterface: '@App\Entity\User'

我不知道這是否相關,但是我正在使用此捆綁包LexikJWTAuthenticationBundle對用戶進行身份驗證。

自動裝配諸如用戶之類的實體不是一個好習慣,因為當前可能沒有登錄用戶,也可能根本沒有用戶。

相反,您應該使用一個始終存在的服務來檢查是否有登錄用戶,然后再接收它。 例如, Symfony\\Component\\Security\\Core\\Authentication\\Token\\Storage\\TokenStorageInterface

您可以使用令牌存儲的getToken 方法獲取當前令牌,然后使用令牌的getUser方法檢索當前用戶,如下所示:

$user = $tokenStorage->getToken() ? $tokenStorage->getToken()->getUser() : null;

但是,您仍然可以通過自動裝配將用戶吸引到控制器中的原因是, 如本博文所述,在Symfony 3.2中添加了用戶解析器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM