если я правильно понимаю, вы хотите проверку на стороне сервера, только если введено значение. Я точно по тому же сценарию. Я хочу проверить URL, только если он указан. Лучший способ, с которым я столкнулся, - написать свой собственный класс валидации. Вы можете написать универсальный пользовательский класс проверки.
Я перешел по этой ссылке https://symfony -docs-chs.readthedocs.org / ru / 2.0 / cookbook / validation / custom_constraint.html за исключением нескольких изменений из-за последней версии Symfony.
Вот реализация
Acme \ BundleNameBundle \ Validator \ Ограничения \ 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 \ Ограничения \ 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"))
Я уверен, что могут быть и другие лучшие способы сделать это, но сейчас я чувствую, что это хорошо справляется с работой.