如果我理解正确,只有在输入值时才需要服务器端验证。我完全一样。我只想在URL提供的情况下验证URL。我碰到的最好的方法是写我自己的自定义验证类。你可以编写一个通用的自定义验证类。
我跟着这个链接https://symfony-docs-chs.readthedocs.org/en/2.0/cookbook/validation/custom_constraint.html除了因为symfony的最新版本的一些变化。 这里是实现
的Acme \ BundleNameBundle \验证\约束\ cstmUrl
namespace Acme\BundleNameBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Constraints\Url;
/**
* @Annotation
*/
class CstmUrl extends Url
{
public $message = 'The URL "%string%" is not valid';
}
的Acme \ BundleNameBundle \验证\约束\ cstmUrlValidator
namespace Acme\BundleNameBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Constraints\Url;
use Symfony\Component\Validator\Constraints\UrlValidator;
class CstmUrlValidator extends UrlValidator
{
public function validate($value, Constraint $constraint)
{
if(!$value || empty($value))
return true;
parent::validate($value, $constraint);
}
}
Validtion.yml
Acme\BundleNameBundle\Entity\Student:
Url:
- Acme\BundleNameBundle\Validator\Constraints\CstmUrl: ~
内部控制只是绑定约束,你通常会做
'constraints'=> new CstmUrl(array("message"=>"Invalid url provided"))
我相信可以有其他更好的做这件事的方式,但现在我觉得这样做的工作做好。
这不是正确的答案。 'required'选项只强制执行客户端验证。 – TyrionLannister
@TyrionLannister你确实是对的。但是,除了具有NotNull()和NotEmpty()约束之外,没有一个默认验证器会导致空值被视为无效。看到提问者既没有这些约束,也隐含了问题出在客户端的HTML5'required'属性上。 – gilden
@gilden与所有应有的尊重,'required'属性与空值被批准没有任何共同之处。它只用于HTML5客户端验证,并且与验证(服务器端验证)无关。 –