Symfony - ожидаемое значение типа '' вместо этого получило строку - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь передать идентификатор из одной таблицы формирования в таблицу заявок, но не могу передать эту ошибку.

Ожидаемое значение типа "App \ Entity \ Formation" для поля ассоциации"App \ Entity \ Ticket # $ creation", вместо этого получено "string".

Formation Entity :

/**
 * @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;
...

Ticket Entity :

/**
 * @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;
...

Мой билетКонтроллер с 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);
}

Я хочу, чтобы при добавлении заявки я сохранял «регистрационный идентификатор» в таблице заявок.Остальное работает хорошо, есть только регистрация регистрационного идентификатора, который не работает

РЕДАКТИРОВАТЬ:

Определение setFormationId() в Ticket Entity :

public function setFormation($formation): self
{
    $this->formation = $formation;
    return $this;
}

Мой билетКонтроллер с 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(),
    ]);
}

Та же ошибка

1 Ответ

0 голосов
/ 28 июня 2019
/**
 * @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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...