Tôi có một vấn đề trong một thời gian và tôi đã đọc rất nhiều về chủ đề này với vấn đề tương tự nhưng không thể thực hiện các câu trả lời trong trường hợp của tôi.Cho phép tất cả giá trị vào loại lĩnh vực lựa chọn trong Symfony2 hình thức xây dựng
Tôi có một trường chọn mà tôi điền với Ajax. như vậy trong xây dựng hình thức của tôi, tôi có mã này:
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';
}
}
Nhưng hình thức của tôi không bao giờ xác nhận vì họ không có giá trị trong lĩnh vực lựa chọn này. Nhưng tôi không thể thêm giá trị bên trong vì tôi không biết trước những gì người dùng sẽ nhập dưới dạng giá trị.
Vì vậy, câu hỏi của tôi là cách vô hiệu xác minh trên trường này từ Symfony. Hoặc cho phép nó chấp nhận tất cả giá trị.
Cảm ơn
EDIT
Ở đây, tôi đã cố gắng một cách tiếp cận mới. Tôi sử dụng Trình xử lý sự kiện để sửa đổi trường của tôi bằng giá trị so với người dùng đã gửi.
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;
}
}
Nhưng nó vẫn không làm việc, tôi đã lỗi sau:
You cannot add children to a simple form. Maybe you should set the option "compound" to true?
Vì vậy, nếu có ai biết làm thế nào để sử dụng cách này với Event Listener nó sẽ là tuyệt vời.
Cảm ơn
xin vui lòng cho chúng tôi biết thêm chi tiết về lĩnh vực tổ chức nomComplet: kiểu trường/cài đặt ORM cho lĩnh vực đó trong tổ chức của bạn/giá trị của lĩnh vực đó (tổ chức, văn bản/số nguyên) – LPodolski
Xin lỗi vì thời gian trả lời, bạn có thể nhìn vào chỉnh sửa của tôi. Thx :) – LedZelkin