Итак, таблица в базе данных создана, теперь приступим к ее наполнению.
Для начала создадим в папке resources/views новое представление под названием tasks.blade.php
И добавим туда простой код:
@extends('layouts.app')
@section('content')
<div style="text-align: center; margin-top: 3rem !important;" >
<h1 style="" class=""> Добавление новой записи в базу </h1>
<form action="{{ url('tasks')}}" method="POST" >
{{ csrf_field() }}
<input type="text" name="name" id="task-name" value="{{ old('task') }}">
<button type="submit" >Добавить новую запись</button>
</form>
</div>
@endsection
Объяснение:
form action="{{ url('tasks')}}" method="POST" - это запрос методом к нашему маршруту
{{ csrf_field() }} - это токен CSRF-защиты. При определении каждой HTML-формы вы должны включать в неё скрытое поле CSRF-токена, чтобы посредник CSRF-защиты мог проверить запрос. Вы можете использовать хелпер csrf_field для генерирования поля токена.
@extends('layouts.app') - подключение шаблона, файл которого расположен в папке layouts под названием app.blade.php
Код этого шаблона может быть таким:
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
</head>
<body>
<div id="app">
@yield('content')
</div>
</body>
</html>
Страница с формой теперь должна выглядеть так:
Теперь в файле web.php необходимо прописать необходимые маршруты.
Маршрут для метода GET (для открытия страницы www.адрес_сайта/tasks)
Route::get('/tasks', function () {
return view('tasks');
});
Маршрут для метода POST (для добавления записи в базу данных)
Route::post('/tasks', function (Request $request) {
$task = new App\Models\Task;
$task->name = $request->name;
$task->save();
return redirect('/tasks');
});
В этой части кода происходит обращение методом post к маршурут /tasks, к модели базы данных Task, которую мы создавали в предыдущей статье и которая физически находится в папке App\Models
$task = new App\Models\Task;
Потом мы назначаем свойству name модели $task значение переменной name из нашего запроса $request
$task->name = $request->name;
И после этого вызываем команду Сохранить запрос в базу данных:
$task->save();
После этого снова возвращаемся на исходную страницу
return redirect('/tasks');
Теперь если заполнить поле ввода и нажать кнопку сохранить, в нашей базе данных добавится новая запись.
В следующей статье мы прочитаем информацию из базы данных и выведем ее на страницу.
Удаления записи из базы данных.
Для удаления записи из базы данных добавляем в файл web.php код
Route::delete('/tasks/{id}', function ($id) {
App\Models\Task::findOrFail($id)->delete();
return redirect('/tasks');
});
А в файле представления добавляем кнопку для удаления возле каждой записи.
@foreach ($tasks as $task)
<div>{{ $task->id }} - {{ $task->name }}
<form action="{{ url('tasks/'.$task->id) }}" method="POST">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button type="submit" class="btn btn-danger">Удалить</button>
</form></div>
@endforeach
Здесь следует отметить, что форма не может содержать метод DELETE, поэтому мы добавляем его через {{ method_field('DELETE') }}
Редактирование записи в базе данных
Для редактрирования записи в базы данных добавляем в файл web.php код
Route::post('/tasks_edit/{id}', function (Request $request) {
$task = new App\Models\Task;
$task = App\Models\Task::find($request->id);
$task->name = $request->name;
$task->save();
return redirect('/tasks');
});
Здесь мы отправляем запрос методом POST по адресу /tasks_edit/{id}
Создаем новую модель
$task = new App\Models\Task;
Находим в таблице запись с id
$task = App\Models\Task::find($request->id);
Устанавливаем значение для ключа name и сохраняем запись
В файле представления нужно добавить такой код:
<form action="{{ url('tasks_edit/'.$task->id) }}" method="POST">
{{ csrf_field() }}
<input type="text" name="name" value="{{ $task->name }}">
<button type="submit" class="btn btn-danger">Сохранить</button>
</form>