Проблема в том, что форма встроена, а свойство почтовый индекс находится в форме, которая встроена
Я создал 2 объекта в моем проекте Symfony сотношение OneToOne.
Сущность пользователя:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
// A voir !!!!
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
/**
* @ORM\Entity(repositoryClass="App \Repository\UserRepository")
* @UniqueEntity(
* fields= {"email"},
* message= "L'email est déjà utilisé"
* )
*/
class User implements AdvancedUserInterface, \Serializable
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
...
/**
* @ORM\OneToOne(targetEntity="App\Entity\Entreprise", mappedBy="user", cascade={"persist", "remove"})
*/
private $entreprise;
Сущность Entreprise
/**
* @ORM\Entity(repositoryClass="App\Repository\EntrepriseRepository")
*/
class Entreprise
{
/**
* @ORM\Id()
* @ORM\OneToOne(targetEntity="App\Entity\User", inversedBy="entreprise", cascade={"persist", "remove"})
* @ORM\JoinColumn(nullable=false)
*/
private $user;
/**
* @ORM\Column(name="postalcode", type="string", length=16, nullable=false)
*/
private $postalcode;
public function setPostalcode($postalcode)
{
$this->postalcode = $postalcode;
return $this;
}
public function getPostalcode()
{
return $this->postalcode;
}
А теперь я сделал 2 FormType One - это обычный UserType, который встраиваетEntrepriseType.Проблема в том, что у меня есть запрос ajax в моем запросе Entreprise.
Пример: тип пользователя:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$this->entityManager = $options['entity_manager'];
$builder
->add('email', EmailType::class)
->add('username', TextType::class)
->add('password', PasswordType::class)
->add('confirm_password', PasswordType::class)
->add('termsaccepted', CheckboxType::class, array(
'mapped' => false,
'constraints' => new IsTrue(),))
->add('entreprise', EntrepriseType::class, $options)
;
}
и тип EntrepriseType:
private $entityManager;
public function buildForm(FormBuilderInterface $builder, array $options)
{
$this->entityManager = $options['entity_manager'];
$builder
->add('postalcode', TextType::class, array(
'attr'=> array('class'=>'postalcode form-control',
'maxlength'=>4,
'value'=>'')))
->add('ville', ChoiceType::class, array(
'attr'=>array('class'=>'ville form-control')))
->add('adresse', TextType::class)
->add('complementadresse', TextType::class)
;
$city = function(FormInterface $form, $codepostal){
$repo = $this->entityManager->getRepository("App:Localite");
$localitestofind = $repo->findBy(array('codepostal'=>$codepostal));
$localites = array();
if($localitestofind)
{
foreach($localitestofind as $localitetofind)
{
$localites[$localitetofind->getNom()] = $localitetofind->getNom();
}
}
$form->add('ville', ChoiceType::class, array(
'attr'=>array('class'=>'ville form-control'),
'choices'=> $localites));
};
$builder->get('postalcode')->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $event) use ($city){
$city($event->getForm()->getParent(), $event->getForm()->getData());
});
}
MyФайл ветки:
{{form_start(form)}}
{{form_row(form.username, {'label':'Nom d\'utilisateur','attr':{'placeholder':'Nom d\'utilisateur'}})}}
{{form_row(form.email, {'label':'Adresse email','attr':{'placeholder':'rh@entreprise.ch'}})}}
{{form_row(form.password, {'label':'Mot de passe','attr':{'placeholder':'Mot de passe'}})}}
{{form_row(form.confirm_password, {'label':'Répéter le mot de passe','attr':{'placeholder':'Confirmer votre mot de passe '}})}}
{{form_row(form.entreprise.adresse, {'label':'Adresse','attr':{'placeholder':'Rue et n°'}})}}
{{form_row(form.entreprise.complementadresse, {'label':'Complément d\'adresse','attr':{'placeholder':'Espace business 2'}})}}
{{form_row(form.entreprise.postalcode, {'label':'Code postal','attr':{'placeholder':'Code postal', 'class':'postalcode form-control', 'maxlength':'4', 'value':''}})}}
{{form_row(form.entreprise.ville, {'label':'Ville','attr':{'placeholder':'Ville', 'class':'ville form-control'}})}}
{{form_row(form.termsaccepted, {'label':"En soumettant ce formulaire, vous acceptez nos conditions d'utilisation et notre politique de Protection des données."})}}
<button type="submit" class="btn btn-success" >Inscription</button>
{{ form_end(form)}}
Проблема в том, что мой "почтовый индекс" не распознается, поэтому ошибка:
Neither the property "postalcode" nor one of the methods "getPostalcode()", "postalcode()", "isPostalcode()", "hasPostalcode()", "__get()" exist and have public access in class "App\Entity\User".
У вас есть идея, как это сделать?Спасибо за помощь !!!