【发布时间】:2021-02-16 13:39:31
【问题描述】:
我尝试为我的 symfony API 制作控制器,但是使用 symfony 的自动装配功能总是返回 null,当我使用函数 $trustedUser->getName() 时代码返回 null
当我使用函数时,代码返回 null:$trustedUser->getName() 在控制器中 getTrustedUserByID()
$this->logger->info($trustedUser->getName()." ".$trustedUser->getId());
return new JsonResponse([
"name" => $trustedUser->getName(),
]);
我的控制器如下所示:
<?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()
;
}
*/
}
实体和存储库都是使用 make:entity 生成的
And the database looks like this The results looks like this
【问题讨论】:
-
请澄清“不断返回 null”的含义。 $trustedUser 是否设置为 null?似乎不太可能,因为这会产生不同的错误消息。
-
对不起!问题是我使用 $trustedUser 获得的所有函数都返回 null ,如此屏幕截图 i.gyazo.com/240b7ce2e516f764e2a54676ee235a05.png 所示,如 $trustedUser->getName() 我不知道是什么原因造成的
-
请通过编辑您的问题分享更多详细信息 - 代码在哪里确切返回 null,这与自动装配有何关系?
-
我编辑了问题以准确显示代码返回 null 的位置
-
这是您的代码还是您继承的遗留项目?我想不出在没有设置属性的情况下注入 $trustedUser 的方法。您是否仔细检查过数据库表中的 name 列是否具有实际值?
标签: symfony