php字段选项,php-EntityType字段的默认选择选项

我有两个类User.php和Group.php,从fosuserbundle中定义的类扩展而来.

除此之外,我之间还有一个ManyToMany关系.

该应用程序的想法是,当我添加新用户时,我将一个或多个组分配给该用户(我正在使用材料设计多选选项).当用户未分配任何组时(例如,当组选项为空时),就会出现问题.我在控制台中收到此javascript错误:

An invalid form control with name=’user[groups][]’ is not focusable.

因此,要解决此问题,我需要为组字段提供默认值.如果未选择组,如何设置默认用户组?我的课程定义如下.

UserType.php

public function buildForm(FormBuilderInterface $builder, array $options)

{

$builder

->add(

'username',

null,

array(

'attr' => array(

'placeholder' => 'username'

),

))

->add(

'email',

null,

array(

'attr' => array(

'placeholder' => 'email'

),

))

/*->add('groups', EntityType::class, array(

'class' => 'AppBundle\Entity\Group',

'choice_label' => 'name',

'expanded' => false,

'multiple' => false

)) */

->add('groups', EntityType::class, array(

'class' => 'AppBundle\Entity\Group',

'choice_label' => 'name',

'attr'=>array(

'class' => 'mdb-select'

),

'multiple' => true,

))

->add('plainPassword', RepeatedType::class, array(

'invalid_message' => 'Les mots de passe doivent être identiques.',

'first_options' => array('label' => 'Mot de passe'),

'second_options' => array('label' => 'Répétez le mot de passe'),

))

//

->add('enabled', null, array(

'required' => false,

))

->add('imageFile',VichFileType::class, [

'required' => false,

'download_link' => true,

'attr'=>array(

'type' => 'file',

'onchange' => 'loadFile(event)'), // not mandatory, default is true

])

;

}

GroupEntity.php

public function buildForm(FormBuilderInterface $builder, array $options)

{

$builder

->add('name')

->add('roles', CollectionType::class, array(

'entry_type' => ChoiceType::class,

'entry_options' => array(

'attr' => array(

'class'=>'mdb-select colorful-select dropdown-default'

),

'choices' => array(

'Admin' => 'ROLE_ADMIN',

'USER' => 'ROLE_USER',

),

)

))

;

}

User.php

namespace AppBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;

use Doctrine\ORM\Mapping as ORM;

use Doctrine\Common\Collections\ArrayCollection;

use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

use Symfony\Component\HttpFoundation\File\File;

use Vich\UploaderBundle\Mapping\Annotation as Vich;

/**

* @Vich\Uploadable

* @ORM\Entity

* @ORM\Table(name="fos_user")

* @UniqueEntity(fields="usernameCanonical", errorPath="username", message="fos_user.username.already_used", groups={"Default", "Registration", "Profile"})

* @UniqueEntity(fields="emailCanonical", errorPath="email", message="fos_user.email.already_used", groups={"Default", "Registration", "Profile"})

*/

class User extends BaseUser {

/**

* @ORM\Id

* @ORM\Column(type="integer")

* @ORM\GeneratedValue(strategy="AUTO")

*

*/

protected $id;

/**

*

* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Group", inversedBy="users", cascade={"remove"})

* @ORM\JoinTable(name="fos_user_user_group",

* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},

* inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}

* )

*/

protected $groups;

/**

* @ORM\Column(type="integer", length=6, options={"default":0})

*/

protected $loginCount = 0;

/**

* @var \DateTime

*

* @ORM\Column(type="datetime", nullable=true)

*/

protected $firstLogin;

/**

* NOTE: This is not a mapped field of entity metadata, just a simple property.

*

* @Vich\UploadableField(mapping="user_image", fileNameProperty="imageName")

*

* @var File

*/

private $imageFile;

/**

* @ORM\Column(type="string", length=255,nullable=true)

*

* @var string

*/

private $imageName;

/**

* @ORM\Column(type="datetime",nullable=true)

*

* @var \DateTime

*/

private $updatedAt;

public function __construct() {

parent::__construct();

$this->enabled = true;

$this->groups = new ArrayCollection();

}

}

Group.php

namespace AppBundle\Entity;

use FOS\UserBundle\Model\Group as BaseGroup;

use Doctrine\ORM\Mapping as ORM;

/**

* @ORM\Entity

* @ORM\Table(name="fos_group")

*/

class Group extends BaseGroup

{

/**

* @ORM\Id

* @ORM\Column(type="integer")

* @ORM\GeneratedValue(strategy="AUTO")

*/

protected $id;

/**

* @ORM\ManyToMany(targetEntity="AppBundle\Entity\User", mappedBy="groups")

*

*

*/

protected $users;

/**

* @var string

*/

protected $name;

/**

* @var array

*/

protected $roles;

/**

* Group constructor.

*

* @param string $name

* @param array $roles

*/

public function __construct($name, $roles = array())

{

$this->name = $name;

$this->roles = $roles;

}

}

解决方法:

创建表单时,您需要传递默认数据.例如,在您的控制器中,您将具有:

$user = new User();

// Add default groups to the $user

// ...

$form = $this->createForm(UserType::class, $user);

$form->handleRequest($request);

if ($form->isValid()) {

$data = $form->getData();

// ...

}

标签:doctrine-orm,symfony,symfony-forms,php

来源: https://codeday.me/bug/20191111/2021667.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值