Класс Controller
Класс Controller является фундаментальным компонентом архитектуры Laravel, который служит базой для всех контроллеров приложения. Контроллеры организуют логику обработки HTTP-запросов и возвращают соответствующие ответы. Базовый класс предоставляет удобные методы для валидации данных, авторизации действий и управления промежуточным программным обеспечением.
Контроллеры располагаются в директории app/Http/Controllers. Каждый метод контроллера соответствует определенному маршруту и обрабатывает входящий запрос. Базовый класс Controller автоматически подгружается через сервис-провайдер и содержит трейты ValidatesRequests и AuthorizesRequests, которые добавляют функциональность валидации и авторизации.
Синтаксис
Создание контроллера выполняется через консольную команду или вручную. Базовый синтаксис определения контроллера:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ExampleController extends Controller
{
public function index()
{
return view('example.index');
}
public function store(Request $request)
{
// validation and data processing
}
}
?>
Пример
Давайте создадим контроллер для управления статьями с методами отображения списка и создания новой статьи:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
use IlluminateHttpRequest;
use IlluminateHttpResponse;
class ArticleController extends Controller
{
public function index()
{
$articles = Article::all();
return view('articles.index', ['articles' => $articles]);
}
public function create()
{
return view('articles.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required|string',
'status' => 'required|in:draft,published'
]);
$article = Article::create($validated);
return redirect()->route('articles.show', $article->id);
}
public function show(Article $article)
{
return view('articles.show', ['article' => $article]);
}
}
?>
Пример
Использование метода middleware для назначения промежуточного программного обеспечения в конструкторе контроллера:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class AdminController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->middleware('admin')->only(['edit', 'update', 'delete']);
$this->middleware('throttle:10,1')->only('store');
}
public function index()
{
$statistics = [
'users' => 1500,
'articles' => 250,
'comments' => 800
];
return view('admin.dashboard', ['stats' => $statistics]);
}
public function edit($id)
{
return view('admin.edit', ['id' => $id]);
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:100',
'description' => 'required|string'
]);
return response()->json(['message' => 'Created successfully'], 201);
}
}
?>
Пример
Реализация методов authorize и validate для управления доступом и проверки данных:
<?php
namespace AppHttpControllers;
use AppModelsPost;
use AppPoliciesPostPolicy;
use IlluminateHttpRequest;
use IlluminateAuthAccessAuthorizationException;
class PostController extends Controller
{
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
$validated = $this->validate($request, [
'title' => 'required|string|min:5|max:200',
'content' => 'required|string|min:10',
'category_id' => 'required|exists:categories,id'
]);
$post->update($validated);
return redirect()->route('posts.show', $post->id);
}
public function destroy(Post $post)
{
$this->authorize('delete', $post);
$post->delete();
return redirect()->route('posts.index');
}
}
?>
Смотрите также
-
класс
Route,
который определяет маршруты и связывает их с контроллерами -
метод
middleware,
который назначает промежуточное программное обеспечение контроллеру -
метод
authorize,
который проверяет права пользователя на выполнение действия -
метод
validate,
который выполняет валидацию входящих данных запроса