2015-01-19 11 views
4

Я пытаюсь использовать laravel required в моем коде, к сожалению, он не работает даже для пустой строки. Я не хочу, чтобы это произошло из-за пустой строки.Laravel validator `required` не работает для пустой строки также

$validator = \Validator::make(array("name"=>""), array("name"=>"required")); 
if ($validator->fails()){ 
    var_dump($validator->messages()); 
} else { 
    die("no errors :)"); 
} 

Это дает мне следующий вывод

object(Illuminate\Support\MessageBag)[602] 
    protected 'messages' => 
    array (size=1) 
     'name' => 
     array (size=1) 
      0 => string 'The name field is required.' (length=27) 
    protected 'format' => string ':message' (length=8) 

он должен пройти, так как я даю пустую строку в качестве name поля.

Вышеупомянутое поведение происходит в среде OSX (версия PHP 5.5.18), но отлично работает в среде linux (версия PHP 5.5.9-1ubuntu4.5).

+0

Правило 'required' фактически возвращает false, если вы передаете пустую строку. – lukasgeiter

+0

Я помню, как я отвечал на аналогичный вопрос, когда человек хотел проверить, только если поле присутствовало в форме, вы можете проверить его и, возможно, повторно использовать код: http://stackoverflow.com/questions/23595528/laravel-only -Validate-элементы, что-являются отправленными-и-игнорируемых покоем из-проверки массива/23595964 # 23595964 –

ответ

10

Правило required фактически возвращает false, если вы передаете пустую строку.

Если мы посмотрим на код (Illuminate\Validation\Validator)

protected function validateRequired($attribute, $value) 
{ 
    if (is_null($value)) 
    { 
     return false; 
    } 
    elseif (is_string($value) && trim($value) === '') 
    { 
     return false; 
    } 

    // [...] 

    return true; 
} 

Я думаю, единственный вариант здесь, чтобы написать own validation rule, который проверяет, если значение не равно нулю:

Validator::extendImplicit('attribute_exists', function($attribute, $value, $parameters){ 
    return ! is_null($value); 
}); 

(extendImplicit необходимо, потому что с extend пользовательские правила будут выполняться только тогда, когда значение не является пустой строкой)

И затем используйте его вот так:

\Validator::make(array("name"=>""), array("name"=>"attribute_exists")); 

 Смежные вопросы

  • Нет связанных вопросов^_^