symfony easyadmin новые статьи отправляются и сохраняются, но не с author_id

Я уже несколько дней пытаюсь выяснить, как попросить 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, если у пользователя есть роль низкого уровня (например, участник) ИЛИ полный список пользователей, если текущий зарегистрированный пользователь является главным администратором веб-сайта.


person ultime    schedule 06.08.2018    source источник
comment
Можете ли вы отправить нам свой класс статей? Кажется, что-то вроде $article->setUser($this->getUser()); перед вашим сохранением и сбросом   -  person v-gael    schedule 06.08.2018
comment
Спасибо, Фелипе, за редактирование моего поста, сделав его более понятным.   -  person ultime    schedule 06.08.2018