symfony easyadmin会提交并存储新文章,但不会提交author_id

时间:2018-08-06 15:41:32

标签: symfony easyadmin

几天以来,我一直在尝试找出如何要求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中主要管理员

0 个答案:

没有答案