Symfony - 类型 '' 的预期值改为“字符串”
Symfony - Expected value of type '' got “string” instead
我正在尝试将 id 从一个 formation table 传递到 ticket table 但我无法传递此错误..
Expected value of type "App\Entity\Formation" for association field "App\Entity\Ticket#$formation", got "string" instead.
编队实体 :
/**
* @ORM\Entity(repositoryClass="App\Repository\FormationRepository")
*/
class Formation
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="array", nullable=true)
*/
private $formations = [];
/**
* @ORM\Column(type="string", length=180, unique=true)
*/
private $customerName;
...
工单实体:
/**
* @ORM\MappedSuperclass()
*/
class Ticket implements TicketInterface
{
use Timestampable;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Symfony\Component\Security\Core\User\UserInterface")
* @ORM\JoinColumn(name="author", referencedColumnName="id", nullable=true)
*/
private $author;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Formation")
* @ORM\JoinColumn(nullable=false)
*/
private $formation;
...
我的 ticketController addTicket()
:
public function addTicket(Request $request, TicketManager $ticketManager): Response
{
$ticket = $ticketManager->newClass();
$user = $this->getUser();
$formationId = $user->getFormationId()->getId();
$ticketForm = $this->createForm(TicketForm::class, $ticket);
$ticketForm->handleRequest($request);
if ($ticketForm->isSubmitted() && $ticketForm->isValid()) {
$ticketManager->createTicket($user, $ticket, $formationId);
$this->addFlash('success', 'Le ticket est en ligne !');
return $this->redirectToRoute('ticketing_list');
}
return $this->render($this->ticketingTemplates['new'], [
'form' => $ticketForm->createView(),
]);
}
我的票务管理器 createTicket()
:
/**
* @param UserInterface $user
* @param TicketInterface $ticket
* @param string $formationId
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function createTicket(UserInterface $user, TicketInterface $ticket, string $formationId)
{
$status = $this->ticketStatusManager->getOpenStatus();
$ticket->setStatus($status)->setFormationId($formationId)->setAuthor($user)->setPublic(false);
if (!$this->isTicketRestrictionEnabled()) {
$ticket->setPublicAt(new \DateTime())->setPublic(true);
}
$this->persistAndFlush($ticket);
}
我希望在添加工单时,将 "formationId" 保存在工单 table 中。
其他都很好,只有formationId的注册不行
编辑:
票证实体中setFormationId()
的定义:
public function setFormation($formation): self
{
$this->formation = $formation;
return $this;
}
我的 ticketController addTicket()
:
public function addTicket(Request $request, TicketManager $ticketManager): Response
{
$ticket = $ticketManager->newClass();
$user = $this->getUser();
$formationId = $user->getFormationId();
$ticketForm = $this->createForm(TicketForm::class, $ticket);
$ticketForm->handleRequest($request);
if ($ticketForm->isSubmitted() && $ticketForm->isValid()) {
$ticketManager->createTicket($user, $ticket, $formationId);
$this->addFlash('success', 'Le ticket est en ligne !');
return $this->redirectToRoute('ticketing_list');
}
return $this->render($this->ticketingTemplates['new'], [
'form' => $ticketForm->createView(),
]);
}
同样的错误
/**
* @param UserInterface $user
* @param TicketInterface $ticket
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function createTicket(UserInterface $user, TicketInterface $ticket, Formation $formation)
{
$status = $this->ticketStatusManager->getOpenStatus();
$ticket->setStatus($status)->setFormation($formation)->setAuthor($user)->setPublic(false);
if (!$this->isTicketRestrictionEnabled()) {
$ticket->setPublicAt(new \DateTime())->setPublic(true);
}
$this->persistAndFlush($ticket);
}
我正在尝试将 id 从一个 formation table 传递到 ticket table 但我无法传递此错误..
Expected value of type "App\Entity\Formation" for association field "App\Entity\Ticket#$formation", got "string" instead.
编队实体 :
/**
* @ORM\Entity(repositoryClass="App\Repository\FormationRepository")
*/
class Formation
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="array", nullable=true)
*/
private $formations = [];
/**
* @ORM\Column(type="string", length=180, unique=true)
*/
private $customerName;
...
工单实体:
/**
* @ORM\MappedSuperclass()
*/
class Ticket implements TicketInterface
{
use Timestampable;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Symfony\Component\Security\Core\User\UserInterface")
* @ORM\JoinColumn(name="author", referencedColumnName="id", nullable=true)
*/
private $author;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Formation")
* @ORM\JoinColumn(nullable=false)
*/
private $formation;
...
我的 ticketController addTicket()
:
public function addTicket(Request $request, TicketManager $ticketManager): Response
{
$ticket = $ticketManager->newClass();
$user = $this->getUser();
$formationId = $user->getFormationId()->getId();
$ticketForm = $this->createForm(TicketForm::class, $ticket);
$ticketForm->handleRequest($request);
if ($ticketForm->isSubmitted() && $ticketForm->isValid()) {
$ticketManager->createTicket($user, $ticket, $formationId);
$this->addFlash('success', 'Le ticket est en ligne !');
return $this->redirectToRoute('ticketing_list');
}
return $this->render($this->ticketingTemplates['new'], [
'form' => $ticketForm->createView(),
]);
}
我的票务管理器 createTicket()
:
/**
* @param UserInterface $user
* @param TicketInterface $ticket
* @param string $formationId
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function createTicket(UserInterface $user, TicketInterface $ticket, string $formationId)
{
$status = $this->ticketStatusManager->getOpenStatus();
$ticket->setStatus($status)->setFormationId($formationId)->setAuthor($user)->setPublic(false);
if (!$this->isTicketRestrictionEnabled()) {
$ticket->setPublicAt(new \DateTime())->setPublic(true);
}
$this->persistAndFlush($ticket);
}
我希望在添加工单时,将 "formationId" 保存在工单 table 中。 其他都很好,只有formationId的注册不行
编辑:
票证实体中setFormationId()
的定义:
public function setFormation($formation): self
{
$this->formation = $formation;
return $this;
}
我的 ticketController addTicket()
:
public function addTicket(Request $request, TicketManager $ticketManager): Response
{
$ticket = $ticketManager->newClass();
$user = $this->getUser();
$formationId = $user->getFormationId();
$ticketForm = $this->createForm(TicketForm::class, $ticket);
$ticketForm->handleRequest($request);
if ($ticketForm->isSubmitted() && $ticketForm->isValid()) {
$ticketManager->createTicket($user, $ticket, $formationId);
$this->addFlash('success', 'Le ticket est en ligne !');
return $this->redirectToRoute('ticketing_list');
}
return $this->render($this->ticketingTemplates['new'], [
'form' => $ticketForm->createView(),
]);
}
同样的错误
/**
* @param UserInterface $user
* @param TicketInterface $ticket
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function createTicket(UserInterface $user, TicketInterface $ticket, Formation $formation)
{
$status = $this->ticketStatusManager->getOpenStatus();
$ticket->setStatus($status)->setFormation($formation)->setAuthor($user)->setPublic(false);
if (!$this->isTicketRestrictionEnabled()) {
$ticket->setPublicAt(new \DateTime())->setPublic(true);
}
$this->persistAndFlush($ticket);
}