nếu tôi hiểu chính xác bạn chỉ muốn xác thực phía máy chủ nếu giá trị được nhập. Tôi chính xác trong cùng một kịch bản. Tôi muốn xác thực URL chỉ khi URL được cung cấp. Cách tốt nhất tôi bắt gặp là viết lớp xác nhận tùy chỉnh của riêng tôi. Bạn có thể viết một lớp xác nhận tùy chỉnh chung chung.
Tôi đã nhấp vào liên kết này https://symfony-docs-chs.readthedocs.org/en/2.0/cookbook/validation/custom_constraint.html ngoại trừ một số thay đổi do phiên bản mới nhất của symfony. Đây là việc thực hiện
Acme \ BundleNameBundle \ Validator \ chế \ 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 \ chế \ 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: ~
bên trong điều khiển chỉ ràng buộc hạn chế bạn vẫn thường làm
'constraints'=> new CstmUrl(array("message"=>"Invalid url provided"))
tôi chắc chắn có thể có những cách khác tốt hơn để làm việc đó, nhưng bây giờ tôi cảm thấy điều này không được công việc tốt.
Nguồn
2015-03-16 02:54:22
Đây không phải là câu trả lời đúng. tùy chọn 'bắt buộc' chỉ thực thi xác thực phía máy khách. – TyrionLannister
@TyrionLannister Bạn thực sự là chính xác. Tuy nhiên, không có trình xác nhận hợp lệ mặc định nào dẫn đến một giá trị rỗng được xử lý không hợp lệ trừ khi có các ràng buộc 'NotNull()' và 'NotEmpty()'. Thấy như người hỏi không có những ràng buộc đó, nó ngầm định rằng vấn đề là với thuộc tính HTML5 'required' phía máy khách. – gilden
@gilden với tất cả sự tôn trọng, thuộc tính 'required' không có gì phổ biến với giá trị trống được phê duyệt. Nó chỉ được sử dụng bởi xác nhận hợp lệ phía máy khách HTML5 và nó không liên quan đến việc xác nhận hợp lệ (phía máy chủ). –