如何使用 a2lix 翻译扩展在服务器端验证时管理字段的多维数组名称?

How to manage multidimensional array name of fields at server side validation with a2lix translation extension?

我有两个表 content_pagecontent_page_translations

当我构建表单时,生成的表单字段名称是这样的: content_page[translations][en][pageTitle]

现在,让我知道如何使用此扩展管理多维数组服务器端验证?

请查看我使用 symfony 3 的解决方案。

在包含以下代码行的配置目录中创建 validation.yml 文件:

AppBundle\Entity\ContentPages:
properties:
    status:
        - NotBlank: 
            message: cms.status.not_blank
    cmsTranslations:
        - Valid: ~

AppBundle\Entity\ContentPagesTranslation:
properties:
    pageTitle:
        - NotBlank: 
            message: cms.page_title.not_blank
        - Length:
            max: 100
    description:
        - NotBlank: ~
        - Length:
            min: 50        
    metaKeywords:
        - NotBlank: ~        
    metaDescription:
        - NotBlank: ~

在控制器文件的方法中,您可以使用以下代码进行验证:

$entity = new ContentPages();

    $validator = $this->get('validator');
    $errors = $validator->validate($entity);
    if (count($errors) > 0) {
        $errorsString = (string) $errors;
        return new Response($errorsString);
    }

实体文件更改: ContentPages.php

/**
 * @ORM\OneToMany(
 *   targetEntity="ContentPagesTranslation",
 *   mappedBy="object",
 *   cascade={"persist", "remove"}
 * )
 */
private $cmsTranslations;
public function __construct() {
    $this->cmsTranslations = new ArrayCollection();
}
public function getTranslations() {
    return $this->cmsTranslations;
}
/**
* @Assert\Valid
*/
protected $translations;

不适合你?只是好奇。因为据我了解,这应该是官方答案。但是,当我将所有可翻译字段提交为空时,这对我不起作用。它仅在提交任何字段时起作用。