Form 和 Validator,是Symfony中最大的组件之一。在Symfony 2.7中,我们改进了它们,通过功能添加和功能移除。
为URL验证添加了checksDNS选项 ¶
Url约束用来验证给定的值是一个有效的链接字符串。在Symfony 2.7中,新增了checkDNS
选项,可以检查URL中的host是否有效:
1 2 3 4 5 6 7 8 9 10 11 | namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class Website
{
/**
* @Assert\Url(checkDNS = true)
*/
protected $url;
} |
这个选项在内部执行了下述代码:
1 2 3 4 | $host = parse_url($value, PHP_URL_HOST);
if (!checkdnsrr($host, 'ANY')) {
// ... error
} |
重命名precision选项为scale ¶
Number字段类型的precision
选项是一个区域限定的设置,指定提交过来的值应保留多少个小数位。在Symfony 2.7中,这个选项被重命名为scale
:
弱化setDefaultOptions()并以configureOptions() ¶
在Symfony 2.7中,abstractType()
的setDefaultOptions()
方法,以及abstractExtensionType()
将不建议使用。改以全新的configureOptions()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | // Symfony 2.6
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class TaskType extends AbstractType
{
// ...
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Task',
));
}
}
// Symfony 2.7
use Symfony\Component\OptionsResolver\OptionsResolver;
class TaskType extends AbstractType
{
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Task',
));
}
} |
添加对从子目录中导入验证约束的支持 ¶
如果你的bundles中包含了大量entities或documents,而你只想用YAML或XML格式来定义它们的验证,而不是用annotations,这可能导致验证文件过大而难以管理。
Symfony 2.7添加了对从你bundles中的Resource/config/validation
子目录中加载任意数量的validation验证文件的支持。
your-bundle/
├── ...
└── Resources/
└── config/
└── validation
├── Author.yml
├── Category.yml
├── Comment.yml
└── Post.yml
添加choice_translation_domain以避免翻译选项 ¶
在Symfony 2.7中,translator组件默认对Doctrine类型entity的翻译功能进行了关闭,这将导致显著的性能提升。显式地开启这个功能,可通过设置全新的choice_translation_domain
选项为true
来实现:
choice_translation_domain
选项的值可为true
(复用当前translation domain)、false
(关闭翻译功能)、null
(使用父级translation domain或默认domain)或指定使用一个明确的translation domain的字符串。