📅  最后修改于: 2023-12-03 15:38:19.304000             🧑  作者: Mango
在 Laravel 中,我们可以通过路由参数、请求参数、表单提交等方式将数据传递给控制器。下面我们将介绍其中的几种方式。
在路由定义中,我们可以使用 {}
符号将某个参数定义为路由参数。例如:
Route::get('/user/{id}', 'UserController@show');
上面的路由定义中,{id}
就是一个路由参数,可以在控制器的方法中使用 $id
变量获取它的值。例如:
class UserController extends Controller
{
public function show($id)
{
$user = User::find($id);
return view('user.show', ['user' => $user]);
}
}
上面的代码中,我们首先通过 $id
变量获取路由参数值,然后使用该值从数据库中查询出对应的用户数据,并将结果传递给视图文件。
另一种常见的方式是通过 URL 查询参数(GET 请求参数)传递数据。例如:
Route::get('/user', 'UserController@search');
上面的路由定义中,/user
路径没有定义路由参数,因此我们可以通过 URL 查询参数传递数据。例如:
class UserController extends Controller
{
public function search(Request $request)
{
$keyword = $request->input('q');
$users = User::where('name', 'like', "%$keyword%")->get();
return view('user.search', ['users' => $users]);
}
}
上面的代码中,我们首先从 $request
对象中获取名为 q
的请求参数,然后根据该参数从数据库中查询出满足条件的用户数据,并将结果传递给视图文件。
如果要使用 POST 或 PUT 请求方式提交数据,可以通过表单提交传递数据。例如:
Route::post('/user', 'UserController@store');
上面的路由定义中,/user
路径定义了 POST 请求方式,因此我们可以通过表单提交传递数据。例如:
<form method="POST" action="/user">
@csrf
<input type="text" name="name" placeholder="姓名">
<input type="email" name="email" placeholder="邮箱">
<button type="submit">提交</button>
</form>
上面的 HTML 代码中,我们使用 form
元素定义表单,指定了提交方式和请求路径,并使用 @csrf
指定了 CSRF 令牌,以防止跨站请求伪造攻击。通过 input
元素定义了两个表单字段(姓名和邮箱),通过 button
元素定义了提交按钮。当用户提交表单后,会将数据以 POST 请求方式发送到 /user
路径,由 UserController@store
方法接收。例如:
class UserController extends Controller
{
public function store(Request $request)
{
$user = new User();
$user->name = $request->input('name');
$user->email = $request->input('email');
$user->save();
return redirect()->route('user.show', ['id' => $user->id]);
}
}
上面的代码中,我们首先从 $request
对象中获取表单提交的数据,然后根据数据创建一个新的用户并保存到数据库中。最后,将用户 ID 作为路由参数重定向到另一个页面。