В PHP $_REQUEST - переменные запроса. Соответственно класс Request в Laravel предназначен для валидации запроса.
Создать Request-класс можно с помощью специальной artisan-команды:
php artisan make:request NewsRequest
Данная команда создаст файл с именем NewsRequest в папке app/http/requests. Файл содержит два метода authorize() и rules() в соотвествующем классе NewsRequest.
Метод authorize() должен возвращать либо false либо true. False - закрывает доступ к данным, true - разрешает. По умолчанию стоит false. Поэтому, первое, что необходимо сделать, это изменить значение на true. Метод rules() возвращает массив правил.
public function authorize(){ return true; } public function rules(){ return [ 'name'=> 'required' ] }
Все правила валидации, используемые в rules() прописаны в файле resources/lang/validation.php. Все элементы массива, которые есть в этом файле, можно использовать в качестве правил в request-файлах. Еще пример, с множественной валидацией:
public function rules() { return [ 'name'=>'required|max:100', 'body' => 'required|min:2', 'theme_id'=>'required|numeric' ]; }
В модели, к которой мы хотим привязать эти request-данные, должно быть определено свойство $fillable, в котором мы указываем, какие имена полей таблицы будут задействованы при множественной вставки данных.
class News extends Model { protected $table = 'news'; protected $fillable = [ 'name', 'body', 'user_id', 'theme_id', ]; }
Теперь рассмотрим контроллер, который будет перехватывать данные из request-запроса, и через модель, с помощью множественной вставки (метод create()) помещать их в таблицу news:
namespace App\Http\Controllers; use Auth; use App\Http\Requests; class CabinetController extends Controller { public function postIndex(Requests\NewsRequest $r){ $r['user_id'] = Auth::user()->id; News::create($r->all()); return redirect('cabinet'); } }
При этом важно помнить, что имена полей в таблице должны совпадать с именами элементов форм.
В шаблоне мы можем перехватывать ошибки валидации (волшебство laravel заключается в том, что специально эти ошибки в шаблон передавать не надо):
@if (count($errors) > 0) Whoops!Найденыследующиеошибки. @foreach ($errors->all() as $error) {{ $error }} @endforeach @endif
Перевести ошибки на русский язык просто. Для этого в конфигурационном файле app.php, в настройках локал и укажем ru.
'locale' => 'ru',
После чего создадим в папке resources/lang еще одну папку – ru. В ее можно вставить скопированный файл en/validation.php. И перевести на русский язык необходимые ошибки. При этомом слова, начинающиеся с : (двоеточия) не переводим, т.к. это атрибуты.
Элементы полей также нужно перевести на русский язык. Для этого в файле validation.php есть элемент массива attributes. Переведем элементы формы здесь:
'attributes' => ['name'=>'наименование', 'body'=>'содержимое', 'theme_id'=>'тема'],
Теперь ошибки валидации выглядят так: