Поиск…
Вступление
Вместо того, чтобы определять всю логику обработки запросов как Closures в файлах маршрутов, вы можете организовать это поведение с помощью классов Controller. Контроллеры могут группировать связанную логику обработки запросов в один класс. По умолчанию контроллеры хранятся в каталоге app/Http/Controllers
.
Основные контроллеры
<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/
public function show($id)
{
return view('user.profile', ['user' => User::findOrFail($id)]);
}
}
Вы можете определить маршрут для этого действия контроллера следующим образом:
Route::get('user/{id}', 'UserController@show');
Теперь, когда запрос соответствует указанному URI маршрута, будет запущен метод show
в классе UserController
. Конечно, параметры маршрута также будут переданы методу.
Контроллер Middleware
Средство промежуточного уровня может быть назначено маршрутам контроллера в файлах маршрутов:
Route::get('profile', 'UserController@show')->middleware('auth');
Однако удобнее указывать промежуточное ПО в конструкторе вашего контроллера. Используя метод промежуточного программного обеспечения из конструктора вашего контроллера, вы можете легко назначить промежуточное программное обеспечение для действия контроллера.
class UserController extends Controller
{
/**
* Instantiate a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('log')->only('index');
$this->middleware('subscribed')->except('store');
}
}
Контроллер ресурсов
Маршрутизация ресурсов Laravel назначает типичные маршруты «CRUD» контроллеру с одной строкой кода. Например, вы можете создать контроллер, который обрабатывает все HTTP-запросы для «фотографий», хранящихся в вашем приложении. Используя команду make:controller
Artisan, мы можем быстро создать такой контроллер:
php artisan make:controller PhotoController --resource
Эта команда будет генерировать контроллер в app/Http/Controllers/PhotoController.php
. Контроллер будет содержать метод для каждой из доступных операций с ресурсами.
Пример того, как выглядит диспетчер ресурсов
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PhotoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
Пример контроллера ресурсов разделяет имя метода, приведенное в таблице ниже.
Затем вы можете зарегистрировать находчивый маршрут к контроллеру:
Route::resource('photos', 'PhotoController');
Это одно объявление маршрута создает несколько маршрутов для обработки различных действий на ресурсе. Сгенерированный контроллер уже будет иметь методы, заглушенные для каждого из этих действий, включая заметки, информирующие вас о HTTP-глаголах и URI, которые они обрабатывают.
Действия, управляемые контроллером ресурсов
глагол | URI | действие | Название маршрута |
---|---|---|---|
ПОЛУЧИТЬ | /photos | индекс | photos.index |
ПОЛУЧИТЬ | /photos/create | Создайте | photos.create |
СООБЩЕНИЕ | /photos | хранить | photos.store |
ПОЛУЧИТЬ | /photos/{photo} | шоу | photos.show |
ПОЛУЧИТЬ | /photos/{photo}/edit | редактировать | photos.edit |
PUT / PATCH | /photos/{photo} | Обновить | photos.update |
УДАЛЯТЬ | /photos/{photo} | уничтожить | photos.destroy |