📅  最后修改于: 2023-12-03 14:57:47.223000             🧑  作者: Mango
Laravel 是一个流行的 PHP 框架,提供了许多方便的工具和功能来加速 WEB 应用程序开发。其中,资源控制器是 Laravel 中一个非常常用的工具,用于管理我们的应用程序中的资源。
本文将着重介绍如何在 Laravel 中使用资源控制器,并构建 CRUD 操作。同时,我们还将讨论使用资源控制器的一些最佳实践。
在一个 WEB 应用程序中,我们通常需要对资源进行 CRUD 操作(即创建、读取、更新、删除)。例如,我们需要为许多不同的模型创建管理器,这些模型的管理器将使用相同的 CRUD 操作。这时,资源控制器就可以发挥作用了。
资源控制器是 Laravel 框架中一种专门用于管理 CRUD 操作的控制器。咱们可以使用资源控制器来简化应用程序开发,减少重复代码的编写。它可以非常方便地为 Web 应用程序中的任何资源(如用户、文章、评论等)提供常见的 CRUD 操作。
将控制器转换为 Laravel 资源控制器很简单。下面是一份常见的控制器代码:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Article;
class ArticlesController extends Controller
{
public function index(){
$articles = Article::all();
return view('articles.index', compact('articles'))
}
public function show($id){
$article = Article::find($id);
return view('articles.show', compact('article'));
}
public function create(){
return view('articles.create');
}
public function store(Request $request){
$input = $request->all();
Article::create($input);
return redirect('/articles');
}
public function edit($id){
$article = Article::find($id);
return view('articles.edit', compact('article'));
}
public function update($id, Request $request){
$article = Article::find($id);
$input = $request->all();
$article->update($input);
return redirect('/articles');
}
public function destroy($id){
$article = Article::find($id);
$article->delete();
return redirect('/articles');
}
}
使用资源控制器,可以简化上面的控制器代码。资源控制器默认情况下实现了常见的 CRUD 操作。下面是如何将上面的控制器代码转换为资源控制器代码:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Article;
class ArticlesController extends Controller
{
public function index(){
$articles = Article::all();
return view('articles.index', compact('articles'))
}
public function show(Article $article){
return view('articles.show', compact('article'));
}
public function create(){
return view('articles.create');
}
public function store(Request $request){
$input = $request->all();
Article::create($input);
return redirect('/articles');
}
public function edit(Article $article){
return view('articles.edit', compact('article'));
}
public function update(Article $article, Request $request){
$input = $request->all();
$article->update($input);
return redirect('/articles');
}
public function destroy(Article $article){
$article->delete();
return redirect('/articles');
}
}
如上所示,控制器代码已大大简化。现在,当我们在应用程序中访问 articles
资源时,Laravel 默认会执行相应的操作:
| METHOD | URL | ACTION | | ------ | ---------------| -------------------| | GET | /articles | index() | | GET | /articles/{id} | show($id) | | GET | /articles/create | create() | | POST | /articles | store(Request $req)| | GET | /articles/{id}/edit | edit($id) | | PUT | /articles/{id} | update($id, Request $req)| | DELETE | /articles/{id} | destroy($id) |
Laravel 支持资源控制器的显式绑定。通过显式绑定,咱们可以解决上面讨论的 Model 查找问题。例如,如果你的模型的主键为 slug
而不是 id
,那么可以定义一个显式绑定以在查找时使用 slug
。在资源控制器中定义显式绑定的方法与普通控制器中定义方法相同,但需要使用 RouteServiceProvider
类。
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use App\Article;
class RouteServiceProvider extends ServiceProvider
{
public function boot()
{
parent::boot();
Route::bind('article', function($slug){
return Article::findOrFail($slug);
});
}
public function map()
{
$this->mapWebRoutes();
}
protected function mapWebRoutes()
{
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
}
}
使用资源控制器时,我们通常遵循 RESTful 原则。资源控制器通常用于管理某种数据资源(如文章、用户、评论等)的 CRUD 操作。RESTful 资源控制器在 Laravel 中非常有用,可以大大减少控制器代码的数量。在 Laravel 中,您可以对多个资源使用同一个控制器来完成 CRUD 操作。下面是一些常见的 RESTful 路由操作:
|装订节 | URI | 操作 | 路由名称 | |----- |----- |---- |-------------| |GET | /photos | index | photos.index | |GET | /photos/create | create | photos.create | |POST | /photos | store | photos.store | |GET | /photos/{photo} | show | photos.show | |GET | /photos/{photo}/edit | edit | photos.edit | |PUT/PATCH | /photos/{photo} | update | photos.update | |DELETE | /photos/{photo} | destroy | photos.destroy |
简而言之,Laravel 资源控制器是一个非常方便的工具,可大大简化 Web 应用程序的开发。在本文中,我们介绍了资源控制器的概念、如何在 Laravel 将控制器转换为资源控制器以及一些最佳实践。希望本文对你学习 Laravel 有所帮助!