Ich habe ein Problem für eine Weile, und ich habe viel zu diesem Thema mit ähnlichen Problem gelesen, kann aber die Antworten in meinem Fall nicht implementieren.Erlauben Sie alle Wert auf Auswahl Feldtyp in Symfony2 Formularerstellung
Ich habe ein Auswahlfeld, das ich mit Ajax füllen. so in meinen Formular-Builder habe ich diesen Code:
VilleType.php
/**
* @ORM\Entity(repositoryClass="MDB\AnnonceBundle\Entity\RegisterRepository")
*/
class VilleType extends AbstractType {
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('nomComplet', 'choice'
);
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'MDB\AdresseBundle\Entity\Ville'
));
}
/**
* @return string
*/
public function getName() {
return 'mdb_adressebundle_ville';
}
}
Aber meine Form bestätigt nie, weil sie keinen Wert in diesem Auswahlfeld ist. Aber ich kann den Wert nicht hinzufügen, da ich vorher nicht weiß, was der Benutzer als Wert eingeben wird.
Also meine Frage ist, wie die Überprüfung für dieses Feld von Symfony zu deaktivieren. Oder erlauben Sie es, alle Werte zu akzeptieren.
Dank
EDIT
Hier habe ich versucht, einen neuen Ansatz. Ich verwende den Event Listener, um mein Feld mit dem Wert zu ändern, den der Benutzer gesendet hat.
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('nomComplet', 'choice');
$builder->get('nomComplet')->addEventListener(
FormEvents::PRE_SUBMIT, function(FormEvent $event) /* use ($formModifier) */ {
$ville = $event->getData();
$event->getForm()->add('nomComplet', 'choice', array('choices' => $ville));
// $formModifier($event->getForm()->getParent(), $ville);
}
);
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'MDB\AdresseBundle\Entity\Ville'
));
}
/**
* @return string
*/
public function getName() {
return 'mdb_adressebundle_ville';
}
}
MDB\AdresseBundle\Entity\Ville.php
<?php
namespace MDB\AdresseBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Ville
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="MDB\AdresseBundle\Entity\VilleRepository");
*/
class Ville
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nomComplet", type="string", length=255)
*/
private $nomComplet;
/**
* @var string
*
* @ORM\Column(name="nomClean", type="string", length=255)
*/
private $nomClean;
/**
* @var array
*
* @ORM\Column(name="cp", type="simple_array")
*/
private $cp;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set nomComplet
*
* @param string $nomComplet
* @return Ville
*/
public function setNomComplet($nomComplet)
{
$this->nomComplet = $nomComplet;
return $this;
}
/**
* Get nomComplet
*
* @return string
*/
public function getNomComplet()
{
return $this->nomComplet;
}
/**
* Set nomClean
*
* @param string $nomClean
* @return Ville
*/
public function setNomClean($nomClean)
{
$this->nomClean = $nomClean;
return $this;
}
/**
* Get nomClean
*
* @return string
*/
public function getNomClean()
{
return $this->nomClean;
}
/**
* Set cp
*
* @param array $cp
* @return Ville
*/
public function setCp($cp)
{
$this->cp = $cp;
return $this;
}
/**
* Get cp
*
* @return array
*/
public function getCp()
{
return $this->cp;
}
public function __toString()
{
return $this->nomComplet;
}
}
Aber es ist immer noch nicht funktioniert, habe ich Fehler folgende:
You cannot add children to a simple form. Maybe you should set the option "compound" to true?
Also, wenn jemand weiß, wie man auf diese Weise es wäre toll mit Event-Listener verwenden.
Dank
bitte geben Sie uns mehr Details über nomComplet Einheit Feld: Feldtyp/ORM-Einstellungen für dieses Feld in Ihrem Unternehmen/Werte dieses Feldes (Einheit, text/integer) – LPodolski
Sorry für die Antwort Zeit kann man sich meine Bearbeitung. Thx :) – LedZelkin