symfony:autowire具有空函数,但不为空

symfony:autowire具有空函数,但不为空,symfony,Symfony,我曾尝试为我的symfony API制作控制器,但是使用symfony的autowire功能会不断返回null当我使用函数$trustedUser->getName()时,代码会返回null 当我使用函数:$trustedUser->getName()时,代码返回null 在getTrustedUserByID()处的控制器中 我的控制器如下所示: <?php namespace App\Controller; use App\Entity\Status; use App\Entity

我曾尝试为我的symfony API制作控制器,但是使用symfony的autowire功能会不断返回null当我使用函数$trustedUser->getName()时,代码会返回null

当我使用函数:$trustedUser->getName()时,代码返回null 在getTrustedUserByID()处的控制器中

我的控制器如下所示:

<?php

namespace App\Controller;

use App\Entity\Status;
use App\Entity\TrustedUser;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Psr\Log\LoggerInterface;


class TrustedUserController extends AbstractController
{
    private $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }
    /**
     * @Route("/trustedUser/{id}", name="getTrustedUserByID", methods={"GET","HEAD"})
     */
    public function getTrustedUserByID(TrustedUser $trustedUser,$id)
    {
        if (!$trustedUser) {
            throw $this->createNotFoundException(
                'No trustedUsers found for id '.$id
            );
        }
        $this->logger->info($trustedUser->getName()." ".$trustedUser->getId());
        return new JsonResponse([
            "name" => $trustedUser->getName(),
        ]);
    }
}
<?php

namespace App\Entity;

use App\Repository\TrustedUserRepository;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass=TrustedUserRepository::class)
 */
class TrustedUser
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $civilite;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $lastname;

    /**
     * @ORM\Column(type="integer")
     */
    private $phone;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $mail;

    /**
     * @ORM\OneToOne(targetEntity=Status::class, inversedBy="trustedUser", cascade={"persist", "remove"})
     * @ORM\JoinColumn(nullable=true)
     */
    private $id_status;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getCivilite(): ?string
    {
        return $this->civilite;
    }

    public function setCivilite(string $civilite): self
    {
        $this->civilite = $civilite;

        return $this;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getLastname(): ?string
    {
        return $this->lastname;
    }

    public function setLastname(string $lastname): self
    {
        $this->lastname = $lastname;

        return $this;
    }

    public function getPhone(): ?int
    {
        return $this->phone;
    }

    public function setPhone(int $phone): self
    {
        $this->phone = $phone;

        return $this;
    }

    public function getMail(): ?string
    {
        return $this->mail;
    }

    public function setMail(string $mail): self
    {
        $this->mail = $mail;

        return $this;
    }

    public function getIdStatus(): ?Status
    {
        return $this->id_status;
    }

    public function setIdStatus(Status $id_status): self
    {
        $this->id_status = $id_status;

        return $this;
    }
}
<?php

namespace App\Repository;

use App\Entity\TrustedUser;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;

/**
 * @method TrustedUser|null find($id, $lockMode = null, $lockVersion = null)
 * @method TrustedUser|null findOneBy(array $criteria, array $orderBy = null)
 * @method TrustedUser[]    findAll()
 * @method TrustedUser[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class TrustedUserRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, TrustedUser::class);
    }

    // /**
    //  * @return TrustedUser[] Returns an array of TrustedUser objects
    //  */
    /*
    public function findByExampleField($value)
    {
        return $this->createQueryBuilder('t')
            ->andWhere('t.exampleField = :val')
            ->setParameter('val', $value)
            ->orderBy('t.id', 'ASC')
            ->setMaxResults(10)
            ->getQuery()
            ->getResult()
        ;
    }
    */

    /*
    public function findOneBySomeField($value): ?TrustedUser
    {
        return $this->createQueryBuilder('t')
            ->andWhere('t.exampleField = :val')
            ->setParameter('val', $value)
            ->getQuery()
            ->getOneOrNullResult()
        ;
    }
    */
}

对我来说,这看起来不像是自动连线问题-条令实体不是自动连线的,而是通过
参数转换器加载的。这允许通过提供实体的ID将实体注入控制器方法

要使其正常工作,您需要安装包
sensio/frameworkextra bundle
。此软件包包含转换器


此外,如果控制器中不需要原始ID,则无需注入它。如果找不到实体,包的转换器将自行引发异常

请澄清“保持返回null”的含义。$trustedUser是否设置为空?似乎不太可能,因为这将生成不同的错误消息。抱歉!问题是,我使用$trustedUser获得的所有函数都返回null,如此屏幕截图上显示的$trustedUser->getName(),我不知道这是什么原因请通过编辑您的问题分享更多详细信息-代码在何处返回null,这与自动布线有什么关系?我编辑了这个问题,以显示代码返回空值的确切位置。这是您的代码还是您继承的遗留项目?我想不出在不设置$trustedUser属性的情况下如何注入它。您是否仔细检查了数据库表中的name列是否具有实际值?我安装了该软件包,它正常工作了!我现在收到正确的数据!非常感谢你!至于我为什么使用$id,是因为在新版本中出于某种原因是的,但是如果无法加载实体,那么通过ParamConverter,控制器方法根本不会被调用。那么是否有办法修复该错误以直接使用$id?您指的是哪个错误?使用给定的代码,不存在
的情况$trustedUser
的计算结果可能为
true
,因为这始终是
trustedUser
的一个实例,我指的是未定义的变量“$id”。当我试图删除getTrustedUserByID(TrustedUser$TrustedUser,$id)中id的定义时
<?php

namespace App\Repository;

use App\Entity\TrustedUser;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;

/**
 * @method TrustedUser|null find($id, $lockMode = null, $lockVersion = null)
 * @method TrustedUser|null findOneBy(array $criteria, array $orderBy = null)
 * @method TrustedUser[]    findAll()
 * @method TrustedUser[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class TrustedUserRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, TrustedUser::class);
    }

    // /**
    //  * @return TrustedUser[] Returns an array of TrustedUser objects
    //  */
    /*
    public function findByExampleField($value)
    {
        return $this->createQueryBuilder('t')
            ->andWhere('t.exampleField = :val')
            ->setParameter('val', $value)
            ->orderBy('t.id', 'ASC')
            ->setMaxResults(10)
            ->getQuery()
            ->getResult()
        ;
    }
    */

    /*
    public function findOneBySomeField($value): ?TrustedUser
    {
        return $this->createQueryBuilder('t')
            ->andWhere('t.exampleField = :val')
            ->setParameter('val', $value)
            ->getQuery()
            ->getOneOrNullResult()
        ;
    }
    */
}