В настоящее время я работаю над Symfony 2.8 с FOSUserBundle и PUGXmultiUserBundle.
Я пытаюсь объединить регистрационную форму с другой формой, имеющей двусторонние отношения.
При создании учетная запись пользователя должна быть создана вдоль линии отношения сущности.
Ошибка:
Возникла исключительная ситуация при выполнении салона INSERT INTO (ном.,
описание, телефон, электронная почта, адрес, ville, CP, siret, date, user_id)
ЦЕННОСТИ (?,?,?,?,?,?,?,?,?,?) ‘С параметрами [«Le salon de la
rue «,» desc «,» 0223254578 «,» [email protected] «,» 2 rue de la
motte «,» Saint-Grüggoire «,» 35000 «,» 456987887456 «,» 2016-02-17
17:55:52 «, null]:SQLSTATE [23000]: нарушение ограничения целостности: 1048 столбец ‘user_id’
не может быть нулевым
PUGXMultiUserBundle => Объект UserOne:
<?php
namespace UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use PUGX\MultiUserBundle\Validator\Constraints\UniqueEntity;/**
* @ORM\Entity
* @ORM\Table(name="user_one")
* @UniqueEntity(fields = "username", targetClass = "UserBundle\Entity\User", message="fos_user.username.already_used")
* @UniqueEntity(fields = "email", targetClass = "UserBundle\Entity\User", message="fos_user.email.already_used")
*/
class UserOne extends User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="CoreBundle\Entity\Salon", mappedBy="user", cascade={"persist","remove"})
*/
private $salons;public function __construct()
{
parent::__construct();
// your own logic
$this->roles = array('ROLE_SALON');
$this->salons = new ArrayCollection();
}
/**
* Add salons
*
* @param \CoreBundle\Entity\Salon $salons
* @return UserOne
*/
public function addSalon(\CoreBundle\Entity\Salon $salons)
{
$this->salons[] = $salons;
$salons->setUser($this);
return $this;
}
/**
* Remove salons
*
* @param \CoreBundle\Entity\Salon $salons
*/
public function removeSalon(\CoreBundle\Entity\Salon $salons)
{
$this->salons->removeElement($salons);
}
/**
* Get salons
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getSalons()
{
return $this->salons;
}
}
CoreBundle Салон лица:
<?php
namespace CoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use UserBundle\Entity\UserOne;
/**
* Salon
*
* @ORM\Table(name="salon")
* @ORM\Entity(repositoryClass="CoreBundle\Repository\SalonRepository")
*/
class Salon
{
/**
* @ORM\ManyToOne(targetEntity="UserBundle\Entity\UserOne", inversedBy="salons", cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
*/
private $user;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255)
*/
private $nom;
/**
* @var string
*
* @ORM\Column(name="description", type="text")
*/
private $description;
/**
* @var integer
*
* @ORM\Column(name="phone", type="string", length=20)
*/
private $phone;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=255)
*/
private $email;
/**
* @var string
*
* @ORM\Column(name="adresse", type="string", length=255)
*/
private $adresse;
/**
* @var string
*
* @ORM\Column(name="ville", type="string", length=255)
*/
private $ville;
/**
* @var string
*
* @ORM\Column(name="CP", type="string", length=10)
*/
private $CP;
/**
* @var string
*
* @ORM\Column(name="siret", type="string", length=20)
*/
private $siret;
/**
* @var \DateTime
*
* @ORM\Column(name="date", type="datetime")
*/
private $date;
public function __construct()
{
$this->date = new \Datetime();
}/**
* Set user
*
* @param \UserBundle\Entity\UserOne $user
* @return Salon
*/
public function setUser(\UserBundle\Entity\UserOne $user)
{
$this->user = $user;
return $this;
}
//Others Getters/Setters
/**
* Get user
*
* @return \UserBundle\Entity\UserOne
*/
public function getUser()
{
return $this->user;
}
}
И регистрация UserOneFormType:
<?php
namespace UserBundle\Form\Type;
use CoreBundle\Form\SalonType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
class RegistrationUserOneFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder
//->add('salons', new SalonType(), array('mapped' => false));
/*->addEventListener(FormEvents::POST_SET_DATA, function(FormEvent $event) {
$user = $event->getData();
})*/
->add('salons', 'collection', [
'type' => new SalonType,
'allow_add' => true,
'allow_delete' => false
])
;
}
public function getParent()
{
return 'fos_user_registration';
}
public function getName()
{
return 'user_one_registration_form';
}
}
Может быть, кто-то здесь уже столкнулся с проблемой, небольшая помощь будет приветствоваться.
Задача ещё не решена.
Других решений пока нет …