2014-01-19 50 views
0

在這裏我在爲我的研究項目,我使用symfony fosUser和奏鳴曲,我有一個圖書實體,我與奏鳴曲管理。只顯示用戶在FormFields奏鳴曲中的特定角色

問題是我想給用戶一本書,但是當我想在我的字段用戶中找到只有角色爲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) 
      ; 
    } 
 

這是與讀者現場的My Book實體

 
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; 
 

感謝您

回答

0

不會太工作,但我們必須找到一個解決方案,我們可以做的是這樣的:

->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; 
})) 

,如果它可以幫助別人

0

你可以做這樣的事情在你的管理類:

$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; 
} 

希望它能幫助。

+0

它不工作,我有此錯誤信息: 選項「代碼」不存在。 – Ajirass

+0

噢,是的,對不起,你需要做: - > add('readers','choice',array( 'label'=>'Lecteur:', 'choices'=> $ currentBook-> getReadersWithMyRole ())) –