обновить symfony с 2.3 до 2.7 проблем с формой, которые не получают сущность - PullRequest
0 голосов
/ 08 января 2019

Я получаю код старого приложения, которое не обновлялось уже несколько лет. Наш системный администратор поместил код на сервер php7 (ранее он работал корректно на php5). Код работал довольно хорошо. Я хотел сделать некоторые обновления, и первым, что я сделал, было обновить Symfony с 2.3 до 2.7. * И конечно, сейчас проблемы возникают. У меня есть форма, которая правильно отображается (все поля в порядке, даже те из базы данных). Вот мой буйлер:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('object','text',array(
            "required"=>false,
            "attr"=>array(
                "placeholder"=>"Object"
                )
            ))
        ->add('date','date',array(
            'widget'=>'single_text',
            ))
        ->add('contact', 'entity', array(
            'label'=>'Contact',
            'class'=>'MyApp\AppliBundle\Entity\Contact',
            'choice_translation_domain' => true,
            'placeholder'=>'initials',
            'choice_label' => 'initials',
            'multiple'=>true
            ))
        ->add('text','redactor',array(
            "required"=>false,
            "redactor"=>"default"
            ))
    ;
}

Вот мой контроллер:

public function editMeetingAction($id,Request $request)
{
    $em = $this->getDoctrine()->getManager();
    $meeting = $em->getRepository('MyAPPAppliBundle:Meeting')- 
      >findOneById($id);
    $form   = $this->createForm(new MeetingType, $meeting);
    $form->handleRequest($request);
    if ($form->isValid()) {
        $em->persist($meeting);
        $em->flush();
        $this->get('session')->getFlashBag()->add('success', 'Meeting 
    edited successfully');
        return $this->redirect($this- 
   >generateUrl('myapp_appli_manage_editmeeting', array("id" => $id)));
    }
    return array(
        "form" => $form->createView(),
        "id" => $id,
    );
}

Теперь, когда я пытаюсь сохранить форму, у меня появляется следующая ошибка:

[Синтаксическая ошибка] строка 0, столбец -1: ошибка: ожидаемый литерал, получен конец строки.

[1/2] QueryException: ВЫБРАТЬ e ИЗ MyApp \ AppliBundle \ Entity \ Contact e ГДЕ

Похоже, что приложение не может получить контакт, выбранный в форме. Я понятия не имею, что здесь не так, так как он работал правильно в предыдущей версии. Я следовал инструкциям на этом сайте, чтобы помочь мне с миграцией, и уже изменил некоторые поля в форме (заполнитель, choices_as_values ​​и т. Д.) https://gist.github.com/mickaelandrieu/5211d0047e7a6fbff925

Было бы очень признательно, если бы вы могли мне помочь.

[EDIT1]: форма работала правильно, прежде чем я обновил Symfony с 2.3 до 2.7

[EDIT2]: контакт юридического лица:

<?php

namespace MyApp\AppliBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\EntityRepository;

/**
 * Contact
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="MyApp\AppliBundle\Entity\ContactRepository")
 */
class Contact
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

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

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

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

    /**
     * @var integer
     *
     * @ORM\Column(name="id_binome", type="integer")
     */
    private $id_binome;

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

    /**
     * Tostring method
     *
     */
    public function __toString()
    {
        return $this->name;
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     * @return Contact
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string 
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Set email
     *
     * @param string $email
     * @return Contact
     */
    public function setEmail($email)
    {
        $this->email = $email;

        return $this;
    }

    /**
     * Get email
     *
     * @return string 
     */
    public function getEmail()
    {
        return $this->email;
    }

    /**
     * Set initials
     *
     * @param string $initials
     * @return Contact
     */
    public function setInitials($initials)
    {
        $this->initials = $initials;

        return $this;
    }

    /**
     * Get initials
     *
     * @return string 
     */
    public function getInitials()
    {
        return $this->initials;
    }

    /**
     * Get id_binome
     *
     * @return integer
     */
    public function getIdBinome()
    {
        return $this->id_binome;
    }

    /**
     * Set id_binome
     *
     * @param integer $id
     * @return Contact
     */
    public function setIdBinome($id)
    {
        $this->id_binome = $id;

        return $this;
    }

    /**
     * Get jobtitle
     *
     * @return string
     */
    public function getjobtitle()
    {
        return $this->jobtitle;
    }

    /**
     * Set jobtitle
     *
     * @param string $jobtitle
     * @return Contact
     */
    public function setjobtitle($jobtitle)
    {
        $this->jobtitle = $jobtitle;

        return $this;
    }

}


class ContactRepository extends EntityRepository
{
    public function findEmailBinome($id_binome)
    {
        $querybuilder = $this->createQueryBuilder("Contact")
            ->select("Contact.email")
            ->where("Contact.id = :idbinome")
            ->setParameter('idbinome',$id_binome)
            ;

        return $querybuilder
            ->getQuery()
            ->getSingleResult()
            ;
    }
}

[РЕДАКТИРОВАТЬ установщик получения]

/**
 * Add contacts
 *
 * @param \MyApp\AppliBundle\Entity\Contact $contacts
 * @return Meeting
 */
public function addContact(\MyApp\AppliBundle\Entity\Contact $contacts)
{
    $this->contacts[] = $contacts;

    return $this;
}

/**
 * Remove contacts
 *
 * @param \MyApp\AppliBundle\Entity\Contact $contacts
 */
public function removeContact(\MyApp\AppliBundle\Entity\Contact $contacts)
{
    $this->contacts->removeElement($contacts);
}

/**
 * Get contacts
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getContacts()
{
    return $this->contacts;
}

1 Ответ

0 голосов
/ 09 января 2019

Я думаю, что нашел решение. Поскольку это была проблема, связанная с подключением к БД, я подозревал, что dotrine / orm виновен! Я обновляю composer.json, изменяя:

"doctrine/orm": "=2.2.*"

до

"doctrine/orm": ">=2.2.3"

Когда я попробовал обновить doctrine / orm для композитора, это не решило проблему. Однако когда я просто попытался обновить композитор, мое приложение снова заработало. Большое спасибо за вашу помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...