我正在尝试为用户创建一个编辑表单,并希望在表单中列出当前用户角色
还想从枚举 Roles 中的所有角色中进行选择。
有一个我的代码示例。 当前错误是“App\Entity\Roles 类的对象无法转换为字符串”,但我尝试了这里的许多示例,但无法运行我的代码。 有人可以向我解释一下正确的方法是怎样做的吗?确实我在某个地方犯了错误,但我无法弄清楚具体在哪里。 我正在使用 PHP 8.1、Symfony 7.1 预先感谢
<?php
use App\Form\UserFormType;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
namespace Entity;
enum Roles: string
{
case ADMIN = 'ADMIN';
case EMPLOYEE = 'EMPLOYEE';
case CLIENT = 'CLIENT';
public static function getRole($name)
{
return self::tryFrom($name)->value;
}
}
class User implements UserInterface
{
/**
* @var list<string> The user roles
*/
#[ORM\Column]
private array $roles = [];
/**
* @see UserInterface
*
* @return list<string>
*/
public function getRoles(): array
{
return $this->roles;
}
}
namespace Form;
class UserFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('roles', ChoiceType::class, [
'label' => 'role: ',
'choices' => Roles::cases(),
'choice_value' => function ($choice) {
return Roles::getRole($choice);
},
]
);
}
}
class AdminController extends AbstractController
{
private UserRepository $userRepository;
public function __construct(EntityManagerInterface $em, UserRepository $userRepository)
{
$this->em = $em;
$this->userRepository = $userRepository;
}
#[Route('admin/user_edit/{id}', name: 'admin_user_edit')]
public function editUser(Request $request, $id): Response
{
$user = $this->userRepository->findOneById($id);
/*
* record for roles in DB is {'1': 'ADMIN', '2': 'EMPLOYEE'}
*/
$form = $this->createForm(UserFormType::class, $user);
try {
$form->handleRequest($request);
} catch (Exception $e) {
echo 'failed : '.$e->getMessage();
}
if ($form->isSubmitted() && $form->isValid()) {
// TODO process data
}
return $this->render('admin/user_edit.html.twig', [
'user' => $user,
'form' => $form->createView(),
]);
}
}
您可以尝试 symfony 形式的枚举类型。 https://symfony.com/doc/current/reference/forms/types/enum.html
否则,回答你的问题 Roles::cases() 返回一个枚举数组,而 php 不知道应该如何打印它。 你可以尝试使用
array_column(Roles::cases(), 'name');