簡體   English   中英

僅顯示在FormFields奏鳴曲中具有特定角色的用戶

[英]Show only user with a specific role in FormFields sonata

在這里,我正在進行一個研究項目,並使用symfony fosUser和奏鳴曲,我有一個與奏鳴曲一起管理的Book實體。

問題是我想給用戶看書,但是當我只想在現場用戶中找到角色ROLE_MyRole的用戶時,情況變得很復雜,我在論壇上搜索了幾個小時卻找不到。

對不起,我最近學過symfony,但經驗不足,對此感到抱歉。

這是我的BookAdmin


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
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255)
     */
    protected $title;

    /**
     * @var string
     *
     * @ORM\Column(name="summary", type="text")
     */
    protected $summary;

    /**
     * @Assert\File(
     *      mimeTypes={"application/pdf", "application/x-pdf"},
     *      mimeTypesMessage="Only PDF"
     * )
     */
    protected $file;

    /**
     * @var string
     *
     * @ORM\Column(name="file_path", type="string", length=255)
     */
    protected $fileName;

    /**
     * @var \DateTime
     *
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(name="created_at", type="datetime")
     */
    protected $createdAt;

    /**
     * @var \DateTime
     *
     * @Gedmo\Timestampable(on="update")
     * @ORM\Column(name="updated_at", type="datetime")
     */
    protected $updatedAt;

    /**
     * @var bool
     *
     * @ORM\Column(name="enabled", type="boolean", nullable=true)
     */
    protected $enabled;

    /**
     * @var bool
     *
     * @ORM\Column(name="received_by_reader", type="boolean", nullable=true)
     */
    protected $receivedByReader;

    /**
     * @var bool
     *
     * @ORM\Column(name="download_by_reader", type="boolean", nullable=true)
     */
    protected $downloadByReader;

    /**
     * @var bool
     *
     * @ORM\Column(name="send_by_reader", type="boolean", nullable=true)
     */
    protected $sendByReader;

    /**
     * @var bool
     *
     * @ORM\Column(name="reader_validation", type="boolean", nullable=true)
     */
    protected $readerValidation;

    /**
     * @var bool
     *
     * @ORM\Column(name="edited", type="boolean", nullable=true)
     */
    protected $edited;

    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User")
     */
    protected $author;

    /**
     * @var ArrayCollection
     *
     * @ORM\ManyToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", 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;
}))

如果可以幫助某人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM