我有这种形式与许多托马尼关系完美地工作:
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('manifestations', 'entity', array(
'class' => 'PrifProtocoleBundle:Manifestation',
'multiple' => true,
'expanded' => false,
'property' => 'libelle',
'empty_value' => 'Choississez',
'required' => false,));
}
但我想将''multi''参数设置为'false',这样,我只有一个带有Choississez选项的选择框,所以当我点击它时,它会显示所有其他值。不幸的是我收到一条错误消息:方法_ set()“或” _call()“也没有,并且在课堂上有公共访问权限。我一直在网上搜索一些解决方案并试过这一个:
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('manifestations', 'collection', array(
'type' => 'entity',
'options' => array(
'class' => 'AcmeProtoBundle:Manifestation',
'multiple' => false,
'expanded' => false,
'property' => 'libelle',
'empty_value' => 'Choisissez',
'required' => false,)));
}
我没有错误消息!但是即使我将'multiple'设置为'true',我也只显示选择表单,我只有提交按钮,点击时会显示结果,所以我想我会错过显示表格的参数!
任何人都可以帮忙吗?感谢
/**
* @ORM\Entity
* @ORM\Entity(repositoryClass="ManifestationRepository")
*/
班级表现{
public function __construct() {
$this->dateCreation = new \DateTime;
$this->dateModif = new \DateTime;
}
public function __toString() {
return $this->getLibelle();
}
/**
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Id
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="integer")
* @Assert\GreaterThan(
* value = 0,
* message = "La valeur doit être positive"
* )
*/
private $numOrdre;
/**
* @ORM\Column(type="string",length=50)
* @Assert\Length(
* min = "5",
* minMessage = "Le libellé doit faire au moins {{ limit }} caractères"
* )
*/
private $libelle;
/**
* @ORM\Column(type="datetime")
*/
private $dateCreation;
/**
* @ORM\Column(type="datetime")
*/
private $dateModif;
/**
* @ORM\Column(type="boolean")
* @Assert\NotBlank( message=" ")
*/
private $etat;
//getters and setters
/**
* @ORM\Entity
* @ORM\Entity(repositoryClass="InviteRepository")
*
*/
类邀请{
/**
* @var boolean
*
* @ORM\ManyToMany(targetEntity="Acme\ProtoBundle\Entity\Manifestation", cascade={"persist"})
* @Assert\NotBlank(message=" ")
*/
private $manifestations;
答案 0 :(得分:0)
你能展示你的manifestation.php文件(你的实体)吗?
多个没有您要查找的行为:多个用于允许用户检查多个复选框(true)或仅检查一个(false)给定的表格(symfony doc : multiple)。
在您的情况下,常见的解决方案是在父字段上使用javascript来禁用/启用子字段。如果你这样做,请务必在这些字段上添加服务器端验证。
答案 1 :(得分:0)
这是现在使用'multiple'=>为我工作的解决方案假“:
我已将此函数添加到与Manifestation相关的其他实体中,以将表现形式视为数组
public function setManifestations($manifestations){
if(!is_array($manifestations)){
$manifestations = array($manifestations);
}
$this->manifestations = $manifestations;
}