几天以来,我一直在尝试找出如何要求easyadmin存储author_id
(或具体说来user_id
的方法,但是我一个人找不到。
基本上,通过在特定控制器中使用createListQueryBuilder
函数来覆盖easyadmin控制器,我找到了一种方法来为每个登录用户显示他们创建的文章。
现在我已经被锁了好几天了,因为我不知道如何告诉easyadmin存储当前记录的author_id
(或user_id),解决方案是用$this->getUser()->getId()
获取author_id ,但是在将其保存到数据库之前,我该在哪里或如何将其与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 / i创建了一个自定义的ArticlesController,并添加了1种方法来显示登录的用户文章列表(如果它们具有较低的角色),并且显示所有网站文章(如果用户角色为高>)
2 /我创建了第二种方法,如果用户具有低级角色(例如,参与者)或当前用户的完整列表,则将当前登录的user_id字段添加到easyadmin formbuilder中主要管理员