Forms 如何显示具有表中可用记录确切数量的集合表单

Forms 如何显示具有表中可用记录确切数量的集合表单,forms,symfony,doctrine,Forms,Symfony,Doctrine,我使用的是symfony2和学说。 我有一份联系人名单,他们被分为若干组。 这些组存储在一个表中。 然后,我的应用程序中有用户,我想为每个用户指定他们的权限:no/read/write。 为了实现这一点,我创建了userspermission表: <?php namespace Curuba\contactsBundle\Entity; use Doctrine\ORM\Mapping as ORM; use APY\DataGridBundle\Grid\Mapping as GRI

我使用的是symfony2和学说。 我有一份联系人名单,他们被分为若干组。 这些组存储在一个表中。 然后,我的应用程序中有用户,我想为每个用户指定他们的权限:no/read/write。 为了实现这一点,我创建了userspermission表:

<?php

namespace Curuba\contactsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use APY\DataGridBundle\Grid\Mapping as GRID;

/**
 * userspermissions
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Curuba\contactsBundle\Entity\userspermissionsRepository")
 */
class userspermissions
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="permission", type="string", length=10)
 *
 * @GRID\Column(title="Permission")
 *
 */
private $permission;

/**
 * @ORM\ManyToOne(targetEntity="groupes", inversedBy="permissions")
 * @ORM\JoinColumn(nullable=false)
 *
 * @GRID\Column(title="Groupes")
 */
private $groupe;

/**
 * @ORM\ManyToOne(targetEntity="users", inversedBy="permissions")
 * @ORM\JoinColumn(nullable=false)
 *
 * @GRID\Column(title="Permission")
 */
private $user;

您可以使用多通关系。
例如,用户和组

<?php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="groups")
*/
class Group
{
const CLASS_NAME = __CLASS__;
/**
* @var integer
*
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(name="id",type="integer")
*/
private $id;
/**
* @var string
*

* @ORM\Column(name="label",type="string",length=255)
*/
private $label;
/**
* @param int $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @param string $label
*/
public function setLabel($label)
{
$this->label = $label;
}
/**
* @return string
*/
public function getLabel()
{
return $this->label;
}
/**
* @return string
*/
public function __toString()
{
return $this->getLabel();
}
}

我已经找到了如何做到这一点。事实上,这很简单,我可能期待更复杂的事情

我在我的控制器中添加了一个函数(可能在我的实体中…),我在创建新的用户实体或编辑一个用户实体时(如果同时添加了一个组),会调用此函数

代码如下:

    private function autocompleteForm(users $user) {

    $em = $this->getDoctrine()->getManager();
    $groupes = $em->getRepository('contactsBundle:groupes')->findAll();
    if ($user) {

        foreach ($groupes as $groupe) {
            $permission = $em->getRepository('contactsBundle:userspermissions')->findOneBy(array('groupe' => $groupe, 'user' => $user));
            if(!$permission) {
                $permission = new userspermissions();
                $permission->setGroupe($groupe);
                $user->addPermission($permission);
            }
        }

    }

    return $user;
}

如果有人需要…

您好,谢谢您的帮助,我很高兴能解释更多。我不知道这是什么意思:“class'=>Group::class\u NAME?我没有找到关于这方面的文档。我同意您在上面的代码中看到的多对多。但我不知道如何自动生成与现有编号对应的字段数我的groupes实体中的记录。事实上,如果我尝试更好地检查我要查找的内容,我会将成员添加到服务器端的集合中。。。
class UserType extends AbstractType
{
const NAME = 'userType';
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('label', 'text');
$builder->add('groups', 'entity', array(
'class' => Group::CLASS_NAME,
'multiple' => true,
'expanded' => true,
));
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => User::CLASS_NAME,
));
}
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return self::NAME;
}
}
    private function autocompleteForm(users $user) {

    $em = $this->getDoctrine()->getManager();
    $groupes = $em->getRepository('contactsBundle:groupes')->findAll();
    if ($user) {

        foreach ($groupes as $groupe) {
            $permission = $em->getRepository('contactsBundle:userspermissions')->findOneBy(array('groupe' => $groupe, 'user' => $user));
            if(!$permission) {
                $permission = new userspermissions();
                $permission->setGroupe($groupe);
                $user->addPermission($permission);
            }
        }

    }

    return $user;
}