如果我理解正确,您仅在输入值时才需要服务器端验证。我完全处于同样的情况。我只想在提供 URL 的情况下验证 URL。我遇到的最好方法是编写我自己的自定义验证类。您可以编写一个通用的自定义验证类。
我关注了这个链接https://symfony-docs-chs.readthedocs.org/en/2.0/cookbook/validation/custom_constraint.html,除了因为 symfony 的最新版本而做了一些更改。
这是实现
Acme\BundleNameBundle\Validator\Constraints\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\Validator\Constraints\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: ~
在 Controller 中只绑定你通常会做的约束
'constraints'=> new CstmUrl(array("message"=>"Invalid url provided"))
我相信还有其他更好的方法可以做到这一点,但现在我觉得这做得很好。