在使用EasyAdminBundle创建的管理面板中,我的表单验证仅适用于没有CKEditorType
的字段。一些字段需要编辑,因此我使用FOSCKEditorBundle实现了所见即所得。
相关字段的摘录:
- { property: 'content', type: 'FOS\CKEditorBundle\Form\Type\CKEditorType'}
当我提交带有空白“内容”字段的表单时,我得到一个InvalidArgumentException
,错误为:Expected argument of type "string", "NULL" given.
,而不是诸如的验证错误。请填写此字段。
没有CKEditor的相关字段的摘录:
- { property: 'content' }
=>验证效果很好。
我的实体字段:
/**
* @ORM\Column(type="text")
* @Assert\NotBlank
* @Assert\NotNull
*/
private $content;
Symfony探查器显示此字段确实具有required
属性。
如何使用CKEditor
字段类型启用验证?
答案 0 :(得分:4)
这与ckeditor无关。您所需要做的就是修复您的内容设置器,以通过参数接受 NULL 。然后,验证过程应正确触发:
public function setContent(?string $content) {
$this->content = $content;
retrun $this;
}
在将请求值设置为表单数据(在您的情况下为实体)字段后执行验证。您可以在此处找到表单提交流程:https://symfony.com/doc/current/form/events.html#submitting-a-form-formevents-pre-submit-formevents-submit-and-formevents-post-submit
答案 1 :(得分:0)
要依靠Symfony的“表单”构建器克服此问题,我在“ CKEditorField”中添加了约束“ NotBlank”。
在控制器上看起来像这样:
...
use App\Admin\Field\CKEditorField;
use Symfony\Component\Validator\Constraints\NotBlank;
...
public function configureFields(string $pageName): iterable
{
return [
IdField::new('id')->hideOnForm(),
TextField::new('title')->setFormTypeOption('required',true),
CKEditorField::new('description')->setFormTypeOption('required',true)
->setFormTypeOption('constraints',[
new NotBlank(),
])
];
}
...
以及控制器中使用的EasyAdmin字段类文件(添加此文件以遵循EasyAdmin的方法):
<?php
namespace App\Admin\Field;
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface;
use EasyCorp\Bundle\EasyAdminBundle\Field\FieldTrait;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
final class CKEditorField implements FieldInterface
{
use FieldTrait;
public static function new(string $propertyName, ?string $label = null):self
{
return (new self())
->setProperty($propertyName)
->setLabel($label)
->setFormType(CKEditorType::class)
->onlyOnForms()
;
}
}