如何使用 a2lix 翻译扩展在服务器端验证时管理字段的多维数组名称?
How to manage multidimensional array name of fields at server side validation with a2lix translation extension?
我有两个表 content_page
和 content_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;
不适合你?只是好奇。因为据我了解,这应该是官方答案。但是,当我将所有可翻译字段提交为空时,这对我不起作用。它仅在提交任何字段时起作用。
我有两个表 content_page
和 content_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;
不适合你?只是好奇。因为据我了解,这应该是官方答案。但是,当我将所有可翻译字段提交为空时,这对我不起作用。它仅在提交任何字段时起作用。