我制作了一个表单,以便在选择用户时,其角色从[“ROLE_USER”]更改为[“ROLE_ADMIN”]。提交表单时,出现以下错误:Can't get a way to read the property "user" in class "App\Entity\User".
我知道这肯定是因为User类中没有名为user的字段,但我不知道用哪个字段替换user。我已经尝试了name或roles,但它们都不起作用。
如何选择用户并简单地更改其角色?
管理类型.php
<?php
namespace App\Form\Admin;
use App\Entity\User;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class AdminType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('user', EntityType::class, [
'class' => User::class,
'choice_label' => 'name',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->andWhere('u.roles LIKE :role')
->setParameter('role', '["ROLE_USER"]')
->orderBy('u.firstname', 'ASC');
},
'placeholder' => 'J\'ajoute un administrateur',
])
->add('save', SubmitType::class, [
'attr' => ['class' => 'save'],
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => User::class,
'translation_domain' => 'forms'
]);
}
}
管理控制器.php
<?php
namespace App\Controller\Admin;
use App\Form\Admin\AdminType;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class AdminController extends AbstractController
{
#[Route('/admin/list', name: 'admin')]
public function admin(
Request $request,
UserRepository $userRepository,
EntityManagerInterface $entityManagerInterface
){
$admins = $userRepository->admin();
$form = $this->createForm(AdminType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $form->get('user')->getData();
$user->setRoles(["ROLE_ADMIN"]);
$entityManagerInterface->persist($user);
$entityManagerInterface->flush();
return $this->redirectToRoute('admin');
}
return $this->renderForm('admin/user/admin.html.twig', [
'admins' => $admins,
'form' => $form
]);
}
1条答案
按热度按时间vwoqyblh1#
简短回答
从
AdminType
表单中的configureOptions
中删除'data_type' => User::class
。说明
将表单的
data_type
设置为User
实体将导致Symfony尝试创建User
对象,并将其user
属性设置为表单的user
字段中的值(您可以通过$form->get('user')
获得)。这就是为什么错误消息会告诉您,它无法找到读取(然后覆盖)User
类上的user
属性的方法。删除
data_type
意味着表单的数据类型只是一个数组(默认值),您也可以显式设置null
。如果窗体的数据类型是数组,则只设置该数组中的
user
键。因为表单的
user
字段是EntityType
类型,它已经确保了表单的user
字段的值必须是那个类(User
实体)。因为您只想 * 选择 * 一个用户,然后添加一个角色,我假设表单不需要用户data_type
。