Лабораторные - Обработка формы с валидацией, фрэймворк Laravel


Сперва создадим саму форму. Будем использовать уже готовый файл подшаблона из resourses/views, файл home.blade.php.

Верстка формы:

<form action='addroom' method='post' id="form-addroom">

{{csrf_field()}}

<input autofocus type="text" class="enter-room" name='name' id="addroom" onkeypress="Press(this.value, event)">

<input class="enter-button" type="submit" value="Ввод" id="enter">

</form>

Используется метод POST, который предназначн для принятия данных сервером.

Функция csrf_field() генерирует:

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

Эта функция проверяет совпадение токенов: входящих и хранящихся на сервере.

Модель

К форме создаются модели. Это делается создается командой “php artisan make:model Rooms в консоли сервера. Созданный файл модели хранится в каталоге app. В модели необходимо прописать значение $fillable, в программе это выглядит так:

protected $fillable=[

'user_id',

'name',

'showhile'

];

После чего командой php artisan migrate отправляем созданную модель в базу данных.

Безопасность формы

Для обеспечения безопасности формы и добавления правил её заполнения необходимо создать Request. Это делается командой

php artisan make:request RoomRequest

После прописи этой команды в app/Http/Requests будет создан новый Request RoomRequest.php.

В методе authorize значение false заменим на true,- включение проверки пользователя, далее добавляем метод правил, в котором сразу добавляется новое правило ввода имени, проверяющее длину имени новой комнаты (нельзя добавить комнату с пустым именем либо с именем из 1 символа). Этот метод выглядит так:

public function rules()

{

return [

'name' => 'required|min:2'

];

}

Контроллер

Чтобы обабатывать форму нужно также создать контроллер. Можно создать новый командой php artisan make:controller NameofController, но в проекте уже существует ранее созданный контроллер RoomController, отвечающий за перенаправление между комнатами, в который мы добавим метод postIndex, обрабатывающий форму.

public function postIndex(Requests\RoomRequest $r){

$r['user_id']=Auth::user()->id;

Room::create($r->all());

return redirect('/rooms');

}

В данном методе проводится проверка авторизации пользователя, а также производится запись в базу данных о новой комнате, после чего пользователь перенаправляется на страницу списка комнат. В методе присутствует параметр Requests\RoomRequest $r, тем самым обеспечивая связь созданного контроллера с Request’ом


Маршрутизация

Маршрутизация отвечает за связь между формой и контроллеров. А за маршрутизацию в свою очередь отвечает файл routes в каталоге app/Http. В нее добавляется новый Route:

Route::post('/addroom','RoomController@postIndex');

Данный Route связывает обработку формы с методом postIndex контроллера RoomController. В итоге форма становится полностью рабочей.

Вывод

Все проделанные этапы позволяют создавать форму, методы

обработки, правила заполнения и связать ее с базой данных