[英]Show only user with a specific role in FormFields sonata
Here I am on a project for my studies and I use symfony fosUser and sonata, I have a Book entity that I administer with sonata. 在这里,我正在进行一个研究项目,并使用symfony fosUser和奏鸣曲,我有一个与奏鸣曲一起管理的Book实体。
The problem is that I want to give an user to a book, but it becomes complicated when I want to find in my field user only the user whose role ROLE_MyRole, I search on forums for several hours without finding. 问题是我想给用户看书,但是当我只想在现场用户中找到角色ROLE_MyRole的用户时,情况变得很复杂,我在论坛上搜索了几个小时却找不到。
I'm sorry for my incompetence I learn symfony recently and does not yet have enough experience. 对不起,我最近学过symfony,但经验不足,对此感到抱歉。
This is my BookAdmin 这是我的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)
;
}
And this is my Book entity with readers field 这是我与读者字段相关的图书实体
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;
Thanks You 谢谢
You can do something like this in your admin class: 您可以在管理类中执行以下操作:
$formMapper
->add('readers', null, array(
'label' => 'Lecteur(s) : ',
'code' => 'getReadersWithMyRole'
))
and define in your User entity the following method: 并在您的用户实体中定义以下方法:
/**
* 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;
}
Hope it helps. 希望能帮助到你。
it doesn't work too but we have find a solution, we can do that like this : 它也不起作用,但是我们找到了一个解决方案,我们可以这样做:
->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;
}))
if it can help someone 如果可以帮助某人
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.