📜  Laravel资源控制器(1)

📅  最后修改于: 2023-12-03 15:02:39.419000             🧑  作者: Mango

Laravel资源控制器

在Laravel中,资源控制器是一种常见的处理HTTP请求的方式。它们提供了一种结构化的方式来处理常见的RESTful路由和操作。本文将讲解如何使用Laravel资源控制器。

创建一个资源控制器

要创建一个资源控制器,请在Laravel应用程序中运行以下Artisan命令:

php artisan make:controller UserController --resource

这将创建一个名为UserController的控制器,该控制器包含处理资源路由所需的基础方法。

定义资源路由

要定义资源路由,请在Laravel应用程序中的routes/web.php文件中添加以下代码:

Route::resource('users', 'UserController');

此代码将定义以下资源路由:

| 方法 | URI | 动作 | | --------- | ---------------- | -------------| | GET | /users | index | | GET | /users/create | create | | POST | /users | store | | GET | /users/{id} | show | | GET | /users/{id}/edit | edit | | PUT/PATCH | /users/{id} | update | | DELETE | /users/{id} | destroy |

我们可以通过以下方式手动定义每一个路由:

Route::get('users', 'UserController@index');
Route::get('users/create', 'UserController@create');
Route::post('users', 'UserController@store');
Route::get('users/{id}', 'UserController@show');
Route::get('users/{id}/edit', 'UserController@edit');
Route::put('users/{id}', 'UserController@update');
Route::delete('users/{id}', 'UserController@destroy');
实现资源方法

每个资源方法都对应于RESTful操作,如下所示:

class UserController extends Controller
{
    public function index()
    {
        // 显示所有用户
    }

    public function create()
    {
        // 显示创建用户视图
    }

    public function store(Request $request)
    {
        // 存储新的用户
    }

    public function show($id)
    {
        // 显示指定用户
    }

    public function edit($id)
    {
        // 显示编辑指定用户视图
    }

    public function update(Request $request, $id)
    {
        // 更新指定用户
    }

    public function destroy($id)
    {
        // 删除指定用户
    }
}
使用不同的资源名称

如果要使用不同的资源名称,可以将以下代码添加到控制器中:

protected $resource = 'myusers';

这将在路由中对应于以下方式:

Route::resource('myusers', 'UserController');
视图文件

默认情况下,资源控制器使用与方法名称相同的视图文件名,例如index方法将使用views/users/index.blade.php视图文件。如果要使用不同的视图,请在方法中返回要使用的视图名称,例如:

public function index()
{
    return view('admin.users.index');
}
结论

Laravel资源控制器为处理RESTful路由提供了一种非常简单和结构化的方法。使用上述方法可以轻松创建和管理资源控制器,使您的代码更加简洁易读。