2015-04-13 2 views
2

У меня в настоящее время проблема с валидаторами Symfony. Необязательные ограничения.Symfony Необязательные ограничения не работают, как ожидалось

Мне нужно, чтобы правила parentId обрабатывались только в том случае, если это поле было передано (ключ находится в ParameterBag), к сожалению, Symfony всегда пытается проверить, даже если он не передан.

public function validateParameters(ParameterBag $request, Collection $validatorRules) 
{ 
    $validatorErrors = $this->validator->validateValue($request->all(), $validatorRules); 
    if (count($validatorErrors) !== 0) { 
     throw new \Exception($validatorErrors[0]->getPropertyPath() . ' - ' . $validatorErrors[0]->getMessage()); 
    } 
    echo 'yay!'; 
    exit; 
} 

public function create(Application $app, Request $request) 
{ 
    // check that the validation rules pass for this service 
    $this->validateParameters($request->request, new Collection([ 
     'parentId' => [new Assert\Optional(), new Assert\Regex(['pattern' => '/^[0-9]\d*$/'])], 
     'title'  => [new Assert\NotBlank(), new Assert\Length(['min' => 3])], 
     'description' => [new Assert\NotBlank()], 
    ])); 
    // ............... 
} 

Любая помощь или указатели больш были бы оценены как документы Symfony в основном говорить о проверке на предмет непосредственно, но я хочу, чтобы проверить против ParameterBag поступать.

ответ

1

Это должно работать

public function create(Application $app, Request $request) 
{ 
    // check that the validation rules pass for this service 
    $this->validateParameters($request->request, new Collection([ 
     'parentId' => new Assert\Optional([ 
      new Assert\Regex(['pattern' => '/^[0-9]\d*$/']) 
     ]), 
     'title'  => [ 
      new Assert\NotBlank(), 
      new Assert\Length(['min' => 3]) 
     ], 
     'description' => new Assert\NotBlank(), 
    ])); 
    // ............... 
} 
Смежные вопросы