symfony:autowire具有空函数,但不为空
我曾尝试为我的symfony API制作控制器,但是使用symfony的autowire功能会不断返回null当我使用函数$trustedUser->getName()时,代码会返回null 当我使用函数:$trustedUser->getName()时,代码返回null 在getTrustedUserByID()处的控制器中 我的控制器如下所示: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
<?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()
;
}
*/
}