我制作了一個表格,以便在選擇用戶時,他的角色從 ["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
]);
}
uj5u.com熱心網友回復:
簡短的回答
'data_type' => User::class從configureOptions您的AdminType表格中洗掉。
解釋
將data_type表單的設定為User物體將導致 Symfony 嘗試創建一個User物件并將其user屬性設定為表單user欄位中的值(您可以通過 獲得$form->get('user'))。這就是為什么錯誤訊息告訴您,它找不到讀取(然后覆寫)類user上的屬性的方法User。
洗掉data_typewill 意味著表單的資料型別只是一個陣列(默認),您也可以顯式設定null.
如果表單的資料型別是陣列,它只會user在該陣列中設定鍵。
由于您的表單user欄位是 type EntityType,并且具有給定的類,因此它已經確保表單的user欄位的值必須屬于該類(User物體)。而且由于您只想選擇一個用戶,然后添加一個角色,我假設表單不需要 User data_type。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/529275.html
標籤:形式交响乐
