Nic*_*tos 2 php symfony-forms symfony easyadmin
我想在创建新用户时使用 EasyAdmin 3.x 的验证组来验证每个字段。
\n我有一个包含name、phone和email字段的 User 实体,并在“创建”组中使用 @UniqueEntity ,因此我可以在 EasyAdmin 外部创建的表单中更新用户。这工作得很好,但当我使用新的组时,我无法找到如何告诉 EasyAdmin 使用默认组和我的创建组我的创建组。
\n这是带有我所具有的约束的简化用户实体
\nuse Doctrine\\ORM\\Mapping as ORM;\nuse Symfony\\Bridge\\Doctrine\\Validator\\Constraints\\UniqueEntity;\nuse Symfony\\Component\\Validator\\Constraints as Assert;\n\n/**\n * @ORM\\Entity(repositoryClass=LeadRepository::class)\n * @ORM\\HasLifecycleCallbacks()\n * @UniqueEntity(\n * fields="cellphone",\n * message="Ya existe un usuario con este n\xc3\xbamero telef\xc3\xb3nico",\n * groups={"creation"}\n * )\n * @UniqueEntity(\n * fields="email",\n * message="Ya existe un usuario con este email",\n * groups={"creation"}\n * )\n */\nclass Lead\n{\n /**\n * @ORM\\Id()\n * @ORM\\GeneratedValue()\n * @ORM\\Column(type="integer")\n */\n private $id;\n\n /**\n * @ORM\\Column(type="string", length=255)\n * @Assert\\NotBlank\n */\n private $name;\n\n /**\n * @ORM\\Column(type="bigint", unique=true, options={"unsigned"=true})\n * @Assert\\NotBlank\n * @Assert\\Length(\n * min = 10,\n * max = 10\n * )\n */\n private $phone;\n\n /**\n * @ORM\\Column(type="string", length=255, nullable=true)\n * @Assert\\Email\n */\n private $email;\n
Run Code Online (Sandbox Code Playgroud)\n以及与 EasyAdmin 一起使用的完整 LeadCrudController
\n<?php\n\nnamespace App\\Controller\\Admin;\n\nuse App\\Entity\\Lead;\nuse EasyCorp\\Bundle\\EasyAdminBundle\\Config\\Action;\nuse EasyCorp\\Bundle\\EasyAdminBundle\\Config\\Actions;\nuse EasyCorp\\Bundle\\EasyAdminBundle\\Config\\Crud;\nuse EasyCorp\\Bundle\\EasyAdminBundle\\Controller\\AbstractCrudController;\nuse EasyCorp\\Bundle\\EasyAdminBundle\\Field\\AssociationField;\nuse EasyCorp\\Bundle\\EasyAdminBundle\\Field\\DateTimeField;\nuse EasyCorp\\Bundle\\EasyAdminBundle\\Field\\EmailField;\nuse EasyCorp\\Bundle\\EasyAdminBundle\\Field\\IntegerField;\nuse EasyCorp\\Bundle\\EasyAdminBundle\\Field\\TelephoneField;\nuse EasyCorp\\Bundle\\EasyAdminBundle\\Field\\TextField;\n\nclass LeadCrudController extends AbstractCrudController\n{\n public static function getEntityFqcn(): string\n {\n return Lead::class;\n }\n\n public function configureCrud(Crud $crud): Crud\n {\n return $crud\n ->setEntityLabelInSingular('Lead')\n ->setEntityLabelInPlural('Lead')\n ->setSearchFields(['id', 'name', 'cellphone', 'email'])\n ->setDefaultSort(['createdAt' => 'DESC'])\n ;\n }\n\n public function configureActions(Actions $actions): Actions\n {\n return $actions\n ->disable('delete')\n ->add(Crud::PAGE_INDEX, Action::DETAIL)\n ->setPermission(Action::DETAIL, 'ROLE_ADMIN')\n ->setPermission(Action::INDEX, 'ROLE_ADMIN')\n ->setPermission(Action::EDIT, 'ROLE_ADMIN')\n ->setPermission(Action::SAVE_AND_RETURN, 'ROLE_ADMIN')\n ->setPermission(Action::SAVE_AND_CONTINUE, 'ROLE_ADMIN')\n ;\n }\n\n public function configureFields(string $pageName): iterable\n {\n $name = TextField::new('name');\n $cellphone = TelephoneField::new('cellphone');\n $email = EmailField::new('email')\n ->formatValue(\n function ($value) {\n return is_null($value) ? '' : $value;\n }\n )\n ;\n $createdAt = DateTimeField::new('createdAt');\n $pincheck = AssociationField::new('pincheck')\n ->formatValue(\n function ($value) {\n return is_null($value) ? '' : $value;\n }\n )\n ;\n $stamps = AssociationField::new('stamps');\n $id = IntegerField::new('id', 'ID');\n\n if (Crud::PAGE_INDEX === $pageName) {\n return [$name, $cellphone, $email, $createdAt];\n }\n if (Crud::PAGE_DETAIL === $pageName) {\n return [$id, $name, $cellphone, $email, $createdAt, $pincheck, $stamps];\n }\n if (Crud::PAGE_NEW === $pageName || Crud::PAGE_EDIT === $pageName) {\n $name->setLabel('Nombre y apellido');\n $cellphone->setLabel('Tel\xc3\xa9fono (solo n\xc3\xbameros)');\n $email->setLabel('Email (opcional)');\n }\n if (Crud::PAGE_NEW === $pageName) {\n return [$name, $cellphone, $email];\n }\n if (Crud::PAGE_EDIT === $pageName) {\n return [$name, $cellphone, $email];\n }\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n
我在 EasyAdmin git issues 中找到了解决方案:[EA3] 添加验证组 #3690
我必须将setFormOptions方法添加到 crud 配置中
// LeadCrudController
public function configureCrud(Crud $crud): Crud
{
return $crud
...
->setFormOptions(['validation_groups' => ['Default', 'creation']], ['validation_groups' => ['Default', 'creation']])
;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6103 次 |
最近记录: |