📅  最后修改于: 2023-12-03 15:18:19.336000             🧑  作者: Mango
在 Laravel 框架中,控制器充当了将web路由与模型进行交互的中间层。
创建一个控制器的命令可以通过 php artisan make:controller
进行,其中 --resource
标志将为您创建支持资源路由的控制器。
php artisan make:controller UserController --resource
这将在 app/Http/Controllers
文件夹中创建一个名为 UserController
的控制器,它支持CRUD操作。
在控制器中,我们可以定义许多方法来处理各种HTTP请求,如GET、POST、PUT和DELETE。我们可以像这样定义一个index()
方法:
public function index()
{
// return the view
return view('user.index');
}
该方法将检索用户数据并将其放在视图中,最后通过 view()
返回视图。
在 routes/web.php 文件中定义路由:
Route::get('/user', 'UserController@index');
现在我们可以在浏览器中访问该路由,Laravel 将会调用 UserController 控制器的 index() 方法。
在支持资源路由的控制器中,有许多自动创建的方法,以处理常规的CRUD操作。以下是其中一些方法的名称和其处理的 HTTP method:
index()
: GET 请求,获取资源列表create()
: GET 请求,显示创建资源的表单store()
: POST 请求,将新资源保存到数据库show()
: GET 请求,显示特定资源edit()
: GET 请求,显示编辑资源的表单update()
: PUT/PATCH 请求,将资源更新到数据库destroy()
: DELETE 请求,从数据库中删除资源下面是展示如何使用控制器和使用资源路由的示例代码:
UserController.php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$users = User::all();
return view('user.index', compact('users'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('user.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$validatedData = $request->validate([
'name' => 'required|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|confirmed',
]);
User::create($validatedData);
return redirect('/user')->with('success', 'User created successfully!');
}
/**
* Display the specified resource.
*
* @param User $user
* @return \Illuminate\Http\Response
*/
public function show(User $user)
{
return view('user.show', compact('user'));
}
/**
* Show the form for editing the specified resource.
*
* @param User $user
* @return \Illuminate\Http\Response
*/
public function edit(User $user)
{
return view('user.edit', compact('user'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param User $user
* @return \Illuminate\Http\Response
*/
public function update(Request $request, User $user)
{
$validatedData = $request->validate([
'name' => 'required|max:255',
'email' => 'required|email|unique:users,email,' . $user->id,
'password' => 'required|confirmed',
]);
$user->update($validatedData);
return redirect('/user')->with('success', 'User updated successfully!');
}
/**
* Remove the specified resource from storage.
*
* @param User $user
* @return \Illuminate\Http\Response
*/
public function destroy(User $user)
{
$user->delete();
return redirect('/user')->with('success', 'User deleted successfully!');
}
}
routes/web.php
Route::resource('user', 'UserController');
这将自动生成以下路由:
| Verb | URI | Action | Route Name | | --------- | ------------------- | -------- | ----------------- | | GET | /user | index | user.index | | GET | /user/create | create | user.create | | POST | /user | store | user.store | | GET | /user/{user} | show | user.show | | GET | /user/{user}/edit | edit | user.edit | | PUT/PATCH | /user/{user} | update | user.update | | DELETE | /user/{user} | destroy | user.destroy |
控制器是 Laravel 中与外部世界交互的重要手段,您可以在其中定义许多方法并将其与 routes/web.php 文件中的路由相匹配来处理 HTTP 请求,以及在模型和数据库之间处理数据。资源控制器为我们提供了自动处理常规的 CRUD 操作的便捷方法,这也是 Laravel 便于使用的原因之一。