التحقق من الحقل اعتمادًا على symfony url الخاص بالقيمة

0

أود أن أعرف ما إذا كان بإمكانك التحقق من حقل اعتمادًا على قيمته من نموذج في Symfony؟ على سبيل المثال ، لدي عنوان URL واسم داخل نموذج مرتبط به. إذا كانت قيمة الاسم هي 'instagram' ، فلنقل ، أريد أن يتم التحقق من صحة عنوان url بواسطة فئة Instagram Validator وما إلى ذلك. لقد كتبت مفتاحًا ولكني أتلقى الخطأ:

استدعاء دالة العضو buildViolation () على قيمة خالية

ما حاولت:

public function validateURL($url, $name)
{
    $message = '';
    switch ($name) {
        case "Instagram":
            $instagramValidator = new InstagramValidator();
            $instagramValidator->validate($url, new Url());

            break;
        default:
            return;
    }

    return $message;
}

InstagramValidator:

class InstagramValidator extends ConstraintValidator
{
/**
 * {@inheritdoc}
 */
public function validate($url, Constraint $constraint)
{
    if (!preg_match('/(?:http:\/\/)?(?:www\.)?instagram\.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-]*)/', $url)) {
        $this->context->buildViolation($constraint->message)
            ->setParameter('{{ value }}', $this->formatValue($url))
            ->addViolation();
    }
  }
}

لذا هناك طريقة للتعامل مع هذا؟

1 إجابة

0

لقد تلقيت هذا الخطأ لأنك لم تمر $context إلى مُنشئ المدقق. إنشاء القيد الخاص بك واستخدامه عبر Validation::createValidator()->validate() :

use Symfony\Component\Validator\Constraints\Regex;

class Instagram extends Regex
{
    public function __construct()
    {
        parent::__construct(['pattern' => '/your regex/']);
    }

    public function validatedBy(): string
    {
        return Regex::class . 'Validator';
    }
}

الآن يمكنك استخدامه:

$violations = Validation::createValidator()->validate($url, new Instagram());

أيضًا ، يمكنك استخدام أداة التحقق من الصحة الخاصة بك ، ما عليك سوى تعيينها validatedBy وظيفة القيد الخاص بك.

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام