在这里,我正在进行一个学习项目,并且使用了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;
}))
如果它可以帮助某人