Я уже несколько дней пытаюсь выяснить, как попросить 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, если у пользователя есть роль низкого уровня (например, участник) ИЛИ полный список пользователей, если текущий зарегистрированный пользователь является главным администратором веб-сайта.
$article->setUser($this->getUser());
перед вашим сохранением и сбросом - person v-gael   schedule 06.08.2018