<?php
declare(strict_types=1);
namespace App\Controller\User;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
#[Route('/users', name: 'user.')]
class UserController extends AbstractController
{
#[Route(name: 'list')]
public function list(#[CurrentUser] ?User $user, Request $request): Response {
dd($user->getFirstName());
}
說的
Call to a member function getFirstName() on null
但我是授權的。在 Symfony Profiler 上,它顯示我已登錄。
環境:PHP 8.0.11 Symfony 5.3.9
uj5u.com熱心網友回復:
https://stackoverflow.com/users/1144627/will-b Symfony #[CurrentUser] 屬性回傳 null提供了有關解決方案的正確詳細資訊
該問題是由啟用ParamConvertor( sensio/framework-extra-bundle)引起的。由于缺乏如何從資料庫獲取物體的定義,它無法決議用戶,因此它將 $user 變數設定為null因為 nullable #[CurrentUser] ?User $user。如果你想同時保持引數轉換器和#[CurrentUser] 屬性的功能,你應該禁用自動轉換#
config/packages/sensio_framework_extra.yaml
sensio_framework_extra:
request:
converters: true
auto_convert: false
并每次手動定義路由引數。來源: https: //symfony.com/bundles/SensioFrameworkExtraBundle/current/annotations/converters.html https://symfony.com/blog/new-in-symfony-5-2-controller-argument-attributes https:// symfony.com/doc/current/controller/argument_value_resolver.html
避免此類問題的解決方案:以 200% 瀏覽器比例閱讀檔案。
uj5u.com熱心網友回復:
如果您的控制器擴展了“AbstractController”,您可以使用它$this->getUser()來獲取當前用戶。
在您的串列功能中,您既沒有提供用戶 ID,也沒有提供 $user,因此 $user 合理地為 null
#[Route('/users', name: 'user.')]
class UserController extends AbstractController
{
#[Route(name: 'list')]
public function list( Request
$request): Response {
dd($this->getUser()->getFirstName());
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/350070.html
