我对Symfony2 Forms + Entities + Validation过程有些怀疑。以此代码为例(/src/Common/CommonBundle/Resources/config/validation.yml
):
Common\CommonBundle\Entity\AddressExtraInfo:
properties:
town:
- NotBlank:
message: "This value should not be blank"
- Length:
min: 3
max: 50
minMessage: "This value should be {{ limit }} or more"
maxMessage: "This value should be {{ limit }} or less"
- Regex:
pattern: "/^[\w\sÑñÁÉÍÓÚáéíóú]+$/"
match: false
message: "This value should be of type {{ alfanumérico }}"
现在,
/vendor/symfony/symfony/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf
的翻译,那么" fr"消息将使用法语或将以英语显示?这就是实体(只是相关代码)的样子:
<?php
namespace Common\CommonBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Gedmo\Mapping\Annotation as Gedmo;
use Common\CommonBundle\Model\BaseEntityTrait;
use Common\CommonBundle\Model\IdentifiedAutogeneratedEntityTrait;
/**
* @ORM\Entity
* @ORM\Table(name="address_extra_info")
* @Gedmo\SoftDeleteable(fieldName="deletedAt")
*/
class AddressExtraInfo
{
use IdentifiedAutogeneratedEntityTrait;
use BaseEntityTrait;
/**
* Municipio
*
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank(message="Este valor no debería estar vacío.")
*/
protected $town;
....
public function setTown($town)
{
$this->town = strip_tags($town);
}
public function getTown()
{
return $this->town;
}
...
}
此实体中还有一个疑问:每个set方法中的strip_tags是否必要?或者Doctrine或Symfony会照顾这个?
AddressExtraInfoType.php
<?php
namespace Common\CommonBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Validator\Constraints as Assert;
class AddressExtraInfoType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'town', 'text', array(
'required' => true,
'attr' => array(
'class' => 'address-input wv-tooltip',
'style' => 'width:272px;',
'placeholder' => 'Municipio *',
'tt-placement' => 'right',
'validated' => 'validated',
'onkeypress' => 'return isAlphaNumeric(event)',
'ng-minlength' => '3',
'maxlength' => '50',
'ng-pattern' => '/^[\w\sÑñÁÉÍÓÚáéíóú]+$/',
'wv-err' => 'Este valor debería ser de tipo alfanumérico',
'wv-cur' => '',
'wv-req' => 'Este valor no debería estar vacío.',
'wv-min' => 'Este valor debería ser de 3 ó más'
)));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
array(
'data_class' => 'Common\CommonBundle\Entity\AddressExtraInfo'
)
);
}
public function getName()
{
return 'address_extra_info';
}
}
答案 0 :(得分:1)
1)在symfony 2验证文档的最顶层:
“验证是Web应用程序中非常常见的任务。需要验证在表单中输入的数据。在将数据写入数据库或传递给Web服务之前,还需要验证数据。 Symfony2附带一个Validator组件,使这项任务变得简单透明。“
http://symfony.com/doc/current/book/validation.html
2)取决于你是否正确设置了所有内容:http://symfony.com/doc/current/book/translation.html#translating-constraint-messages
3)带条标签没有坏处。 Symfony表单只会传回用户提供的信息,但是用户可以输入标签,所以如果这是一个问题,请将strip_tags保留。