2014-01-27 2 views
2

Для добавления новой проверки на Laravel я это сделал:Пользовательские проверки в Laravel 4

сделал новый файл с именем customValidation.php в app/start/

, а затем включил его в app/start/global.php и протестировали его с echo() и этим работал. Теперь он загружается в приложение.

Тогда я написал следующий код для проверки флажков в Laravel:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
class customValidate extends Illuminate\Validation\Validator 
{ 
    public function validateCheckbox($attribute, $value, $parameters) 
    { 
     //if(isset($value)) { return true; } else { return true; } 
     echo "this is the: " . $value; 
    } 
} 

/** 
* Resolvers for Custom Validations 
*/ 
Validator::resolver(function($translator, $data, $rules, $message){ 
return new customValidate($translator, $data, $rules, $message); 
}); 

Однако в моих правилах валидации, я определяю:

`array('sex'=>'checkbox')` 

Но это не работает. Ничего не произошло. Ошибка не возникает. Приложение ведет себя так, как будто оно вообще не выполнило эту функцию. Кроме того, когда я повторяю что-то изнутри функции, ничего не получает эхо, еще одно доказательство того, что функция вообще не называется.

+0

Попробуйте 'дд («стоп»)' 'внутри validateCheckbox', отлаживать и посмотреть, если метод вызывается. Из того, что я вижу, он должен быть зарегистрирован и работать. – Andreyco

+0

Нет, он не назовешь –

+0

Отлично, теперь мы знаем, что он не вызван. – Andreyco

ответ

0

При подаче формы, радиоприемники не были установлены в исходном состоянии, и это сделало Laravel не искать валидатор из предмет. Таким образом, для этого нет обходного пути. Что я сделал, я просто добавил начальное состояние в радиоприемники, и они работали.

Много Как сказано Andreyco

+0

Да, я всегда добавляю «пустое» значение для радиостанций и флажков с помощью 'Form :: hidden ('checkbox-name', false)' – Andreyco

5

Я бы создал пользовательскую папку app/validators для этого.

1, Создать app/validators/CustomValidate.php

<?php 

class CustomValidate extends Illuminate\Validation\Validator 
{ 

    public function validateCheckbox($attribute, $value, $parameters) 
    { 
     echo "this is the: " . $value; 
    } 

} 

2, пробег php artisan optimize или composer dumpautoload

3, Где-то зарегистрировать свой собственный валидатор. Возможно добавить app/validators.php в start/global.php

Validator::resolver(function($translator, $data, $rules, $message){ 
    return new CustomValidate($translator, $data, $rules, $message); 
}); 

4, Validate

$rules = ['agreed' => 'checkbox']; 
$data = ['agreed' => 0]; 

$v = Validator::make($data, $rules); 

dd($v->passes()); 
+0

Что привело бы меня к ошибке 'CustomValidator :: setPresenceVerifier' undefined метода? – Metropolis

+0

Я не понимаю, когда вызывалась функция CustomValidate (или функция validateCheckbox). Не могли бы вы дать объяснение? – ZZZ

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