几天以来,我一直在尝试找出如何要求easyadmin存储author_id
(或user_id
具体而言),但我自己找不到。
基本上,通过使用createListQueryBuilder
特定控制器中的函数来覆盖easyadmin控制器,我找到了为每个登录用户显示他们创建的文章的方法。
现在我被锁定了好几天,因为我不知道如何告诉 easyadmin 存储当前记录的author_id
(或 user_id),解决方案是获取 author_id没关系,但是在坚持之前$this->getUser()->getId()
我可以在哪里或如何将它与我的链接author_id
它到数据库
现在,如果我在作者下方使用此代码,则可以手动添加其 author_id 但这不安全:
{ property: 'user', type: 'entity', type_options: { class: 'AppBundle\Entity\User' ,multiple: false,expanded: true} }
我想使用隐藏的输入或任何其他可能更安全的方式
谢谢任何人都可以帮助我
编辑:找到解决方案真是太麻烦了,但我终于找到了仅显示当前登录用户(如果您愿意,可以是基本管理员或贡献者)或数据库中注册用户的完整列表(如果当前登录用户)的方法作为特定角色(在本例中为网站主管理员)
这是解决方案:
<?php
namespace AppBundle\Controller;
use AppBundle\Entity\User;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\HttpFoundation\Request;
use FOS\RestBundle\Controller\Annotations\Route;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use AlterPHP\EasyAdminExtensionBundle\EasyAdminExtensionBundle;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AdminController as BaseAdminController;
/**
* Article controller.
*
* @Route("articles")
*/
class ArticlesController extends BaseAdminController
{
/**
* @Route("/", name="easyadmin")
*/
public function indexAction(Request $request)
{
return parent::indexAction($request);
}
public function createListQueryBuilder($entityClass, $sortDirection, $sortField = null, $dqlFilter = null)
{
if(!$this->getUser()->hasRole('ROLE_DIRECTION_ADMIN'))
{
$response = parent::createListQueryBuilder('Articles', $sortDirection, $sortField, $dqlFilter); // TODO: Change the autogenerated stub
$response->where('entity.userId = :userId')->setParameter('userId', $this->getUser()->getId());
return $response;
}
$response = parent::createListQueryBuilder('Articles', $sortDirection, $sortField, $dqlFilter); // TODO: Change the autogenerated stub
return $response;
}
public function createEntityFormBuilder($entity, $view)
{
$formBuilder = parent::createEntityFormBuilder($entity, $view);
// Here I overwrite field to be disabled
if(!$this->getUser()->hasRole('ROLE_DIRECTION_ADMIN'))
{
$formBuilder->add('user', EntityType::class, array(
'class' => 'AppBundle:User',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->where('u.id = :id')->setParameter('id',$this->getUser()->getId());
},
));
return $formBuilder;
}
$formBuilder->add('user', EntityType::class, array(
'class' => 'AppBundle:User',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.username', 'asc');
},
));
return $formBuilder;
}
}
1/我创建了一个自定义的 ArticlesController 并添加了 1 个方法来显示登录的用户文章列表,如果他们有低级别的角色,如果用户角色是高的,则显示所有网站文章
2/ 我创建了第二种方法,如果用户具有低级别角色(例如贡献者),则将当前登录的 user_id 字段添加到 easyadmin 表单构建器,或者如果当前登录的用户是网站主管理员,则提供完整的用户列表