Menu Zamknij

Контроллер Laravel 8

В контроллерах мы будем строить логику проекта, говорить что нужно делать с приходящими данными, куда записывать данные и какие действия будут выполняться при взаимодействии с данным классом. Контроллеры по умолчанию хранятся в  app/Http/Controllers.

Для создания контроллера нам понадобиться следующая команда: php artisan make:controller.

Создадим контроллер TaskController, далее — пропишем команду в терминале php artisan make:controller TaskController.

Сейчас мы поработаем с нашим контроллером.

Открываем файл и создаём public function, присвоим ей имя SaveTask, т.к. мы в данной функции будем принимать данные с формы, которую построили в task.blade.php шаблоне.  Нам понадобиться наша модель Task, для того чтобы сказать функции в какую таблицу базы данных мы хотим записать полученные данные. В нашем случаем мы будем писать эти данные в таблицу tasks

				
					<?php

namespace App\Http\Controllers;

use App\Models\Task;
use Illuminate\Http\Request;

class TaskController extends Controller
{
    public function SaveTask(Request $request)
    {
        $new_task = new Task();
        $new_task->name_task = $request->input('name_task');
        $new_task->desc = $request->input('desc');
        $new_task->status = 'Action'; // задаём в ручную статус
        $new_task->save();
        
        return redirect()->back();
    }
}

				
			

Класс Laravel Illuminate\Http\Request предоставляет объектно-ориентированный способ взаимодействия с текущим HTTP-запросом, обрабатываемым вашим приложением, а также для получения входных данных, файлов cookie и файлов, которые были отправлены с запросом.

Обратите внимание! 

 $new_task->name_task — название столбца в нашей таблице «tasks».

$request->input(‘name_task’) — навзание input тега из формы шаблона task.blade.php. 

Отлично, теперь у нас есть функция, которая  будет записывать приходящие данные. Нам осталось написать http маршрут к данной функции.

Сейчас мы скажем приложению, что форма в шаблоне task.blade.php будет запускать нашу функцию SaveTask

Для этого откроем routes/web.php и в нём создадим post запрос.

				
					<?php

use Illuminate\Support\Facades\Route;
use \App\Http\Controllers\TaskController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('task');
});
Route::post('/save_task', [TaskController::class,'SaveTask'])->name('save_task');
				
			

Теперь перейдём в шаблон task.blade.php и в form добавим action='{{route(‘save_task’)}}’.

Вот что должно получиться:

				
					@extends('layouts.app')
{{--Пишем папку и название файла, в который поместим контент из @section--}}

@section('content')
{{--Так как мы в файле app.blade.php использовали  @yield('content') - с названием content то и section дожна называться так же--}}
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Задание</div>
                <div class="card-body">
                    {{--Начало формы--}}
                    <form method="POST" action="/pl/{{route('save_task')}}/" data-trp-original-action="{{route('save_task')}}">
                        @csrf
                        {{--Токен - обязательно нужно использовать в формах отправки данных--}}
                        <div class="form-group row">
                            <label class="col-md-4 col-form-label text-md-right">Название задания</label>
                            <div class="col-md-6">
                                <input type="text" class="form-control" name="name_task" required>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label class="col-md-4 col-form-label text-md-right">Описание</label>
                            <div class="col-md-6">
                                <input type="text" class="form-control" name="desc" required>
                            </div>
                        </div>
                        <div class="form-group row mb-0">
                            <div class="col-md-8 offset-md-4">
                                {{--Кнопка--}}
                                <button type="submit" class="btn btn-primary">
                                    Сохранить
                                </button>
                            </div>
                        </div>
                    <input type="hidden" name="trp-form-language" value="pl"/></form>
                    {{--Конец формы--}}
                </div>
            </div>
        </div>
    </div>
</div>
{{--И в конце не забываем закрыть нашу секцию--}}
@endsection
				
			

Хорошо, теперь открываем терминал, обновляем приложение php artisan optimize и запускаем сервер php artisan serve.

После запуска приложения открываем его в браузере.

Вводим любые данные в наши поля (Название задачи, Описание) и нажимаем кнопку Сохранить. 

После нажатия кнопки Сохранить, форма обнулилась и данные успешно были отправлены в нашу таблицу tasks.

Вот полученный результат нашего контроллера и роута (маршрута). 

В следующем посте мы научимся перезаписывать и удалять данные из базы данных.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

>