Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使管理员窗体侦听子管理员的验证_Php_Symfony_Validation_Sonata - Fatal编程技术网

Php 使管理员窗体侦听子管理员的验证

Php 使管理员窗体侦听子管理员的验证,php,symfony,validation,sonata,Php,Symfony,Validation,Sonata,我正在为基于Symfony 2.8和Sonata的应用程序添加功能 应用程序已经有一个页面实体和一个PageAdmin类。我想在每个页面上添加一组嵌套的同义词实体,因此我使PageAdmin的configureFormFields方法如下所示: protected function configureFormFields(FormMapper $formMapper) { $formMapper ->add('title') ->add('sy

我正在为基于Symfony 2.8和Sonata的应用程序添加功能

应用程序已经有一个页面实体和一个PageAdmin类。我想在每个页面上添加一组嵌套的同义词实体,因此我使PageAdmin的configureFormFields方法如下所示:

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('title')
        ->add('synonym', 'sonata_type_collection', array(
            'label' => "Synonyme",
            'cascade_validation' => true,
            'required' => false,
            'error_bubbling' => true,
        ), array(
            'edit' => 'inline',
            'inline' => 'table'
        ))
        ->add('contentBlock', 'sonata_type_collection', array(
            'label' => "Inhalt",
            'cascade_validation' => true,
            'required' => false
        ), array(
            'edit' => 'inline',
            'inline' => 'table'
        ))
    ;
}
。。。这通常效果很好。唯一的问题是,当我将同义词实体中的一个必填字段留空时,应用程序不会给我一条漂亮的红色闪光消息,责备我的遗漏。相反,它抛出一个异常并返回500状态,这不是我想要看到的:

更新对象失败:Application\Sonata\PageBundle\Entity\Page 500 内部服务器错误-ModelManagerException 3链接异常: NotNullConstraintViolationException»PDOException»PDOException»

SQLSTATE[23000]:完整性约束冲突:1048列“名称” 不能为空

有没有一种方法可以让同义词字段中的遗漏被用户很好地标记,而不是抛出和异常并返回500状态

=====

更新1:以下是my SynonymAdmin类中configureFormFields方法的内容:

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('name', null, ['label' => 'Name *', 'required' => true, 'error_bubbling' => true,])
        ->add('title', null, ['label' => 'Titel', 'required' => false, 'error_bubbling' => true,])
        ->add('visible', null, ['label'=>'Sichtbarkeit', 'required' => false, 'error_bubbling' => true,])
    ;
}
更新2:这是我的实体类中的同义词定义

/**
 * @var ArrayCollection
 *
 * @Assert\NotBlank
 *
 */
private $synonyms;
。。。从Synonym.php:

/**
 * @var string
 *
 * @Assert\NotBlank
 *
 * @ORM\Column(name="name", type="string", length=255)
 */
private $name;

对于初学者,我认为可以在同义词admin中的字段中添加'required'=>true来触发html5验证

除此之外,您可以将验证规则添加到实体中,Sonata应该会注意这一点

class Page
{
    /**
     * @Assert\Valid
     */
     protected $synonyms;
}

class Synonym
{
    /**
     * @Assert\NotBlank
     */
     private $name;
}

谢谢你的回答。我尝试了这个,但在保存时仍然得到ModelManagerException。我不知道在哪里可以捕捉到这个异常,或者我会这样做。你能分享你实体的相关部分吗?可能尝试清除缓存并重试。请确保将@Assert\Valid添加到页面类的同义词属性中,而不是像我的示例中那样将@Assert\NotBlank添加到同义词属性中。