仅向用户显示在Formfields Sonata中具有特定角色的用户



在这里,我正在进行一个学习项目,并且使用了Symfony Fosuser和Sonata,我有一个与Sonata一起管理的书籍实体。

问题是我想给用户写一本书,但是当我只想在我的现场用户中找到roole_myrole的用户,我在论坛上搜索了几个小时而没有发现时,这变得很复杂。

我为自己的无能感到抱歉,我最近学习的象征性,还没有足够的经验。

这是我的书籍


class BookAdmin extends Admin
{
    // Fields to be shown on create/edit forms
    protected function configureFormFields(FormMapper $formMapper)
    {
        static $options = array();
        $currentBook = $this->getSubject();
        if (null !== $currentBook->getFileName())
            $options = array(
                'required' => false,
                'help' => 'getWebPath().'">Download File : '.$currentBook->getFileName().'',
            );
        $formMapper
            ->add('title', null, array('label' => 'Titre : '))
            ->add('summary', null, array('label' => 'Résumé : '))
            ->add('category', null, array('label' => 'Catégorie : '))
            ->add('readers', null, array('label' => 'Lecteur(s) : '))
            ->add('file', 'file', $options)
            ;
    }

这是我与读者领域的书籍实体

class Book
{
    /**
     * @var integer
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @var string
     *
     * @ORMColumn(name="title", type="string", length=255)
     */
    protected $title;
    /**
     * @var string
     *
     * @ORMColumn(name="summary", type="text")
     */
    protected $summary;
    /**
     * @AssertFile(
     *      mimeTypes={"application/pdf", "application/x-pdf"},
     *      mimeTypesMessage="Only PDF"
     * )
     */
    protected $file;
    /**
     * @var string
     *
     * @ORMColumn(name="file_path", type="string", length=255)
     */
    protected $fileName;
    /**
     * @var DateTime
     *
     * @GedmoTimestampable(on="create")
     * @ORMColumn(name="created_at", type="datetime")
     */
    protected $createdAt;
    /**
     * @var DateTime
     *
     * @GedmoTimestampable(on="update")
     * @ORMColumn(name="updated_at", type="datetime")
     */
    protected $updatedAt;
    /**
     * @var bool
     *
     * @ORMColumn(name="enabled", type="boolean", nullable=true)
     */
    protected $enabled;
    /**
     * @var bool
     *
     * @ORMColumn(name="received_by_reader", type="boolean", nullable=true)
     */
    protected $receivedByReader;
    /**
     * @var bool
     *
     * @ORMColumn(name="download_by_reader", type="boolean", nullable=true)
     */
    protected $downloadByReader;
    /**
     * @var bool
     *
     * @ORMColumn(name="send_by_reader", type="boolean", nullable=true)
     */
    protected $sendByReader;
    /**
     * @var bool
     *
     * @ORMColumn(name="reader_validation", type="boolean", nullable=true)
     */
    protected $readerValidation;
    /**
     * @var bool
     *
     * @ORMColumn(name="edited", type="boolean", nullable=true)
     */
    protected $edited;
    /**
     * @var User
     *
     * @ORMManyToOne(targetEntity="ApplicationSonataUserBundleEntityUser")
     */
    protected $author;
    /**
     * @var ArrayCollection
     *
     * @ORMManyToMany(targetEntity="ApplicationSonataUserBundleEntityUser", cascade={"persist"})
     */
    protected $readers;

谢谢

您可以在管理类中执行类似的事情:

$formMapper
    ->add('readers', null, array(
        'label' => 'Lecteur(s) : ',
        'code'  => 'getReadersWithMyRole'
))

并在您的用户实体中定义以下方法:

/**
 * Returns readers with "ROLE_MyRole" role
 *
 * @return array
 */
public function getReadersWithMyRole()
{
    $result = array();
    foreach ($this->getReaders() as $reader) {
        if ($reader->hasRole('ROLE_MyRole')) {
            $result[] = $reader;
        }
    }
    return $result;
}

希望它有帮助。

它也行不通,但是我们找到了解决方案,我们可以这样做:

->add('reader', null, array(
'class' => 'ApplicationSonataUserBundle:User',
'label' => 'Lecteur : ',
'query_builder' => function (EntityRepository $er) {
    $qb = $er->createQueryBuilder('u');
    $qb->where($qb->expr()->like('u.roles', $qb->expr()->literal('%ROLE_READER%')));
    return $qb;
}))

如果它可以帮助某人

相关内容

  • 没有找到相关文章

最新更新