Laravel中如何读取控制器动作重定向传递的参数?
如何在Laravel控制器中读取redirect()->action传递的参数
官方文档展示了重定向到控制器方法的写法:
return redirect()->action( [HomeController::class, 'index'], ['id' => 1] );
要读取传递的id参数,有两种正确方式,你之前的尝试问题出在这些地方:
方式1:通过Request对象获取查询参数
当你用redirect()->action传递额外参数时,这些参数会被转为查询字符串(类似/home?id=1),所以需要从Request的查询数据中读取:
use Illuminate\Http\Request; class HomeController extends Controller { public function index(Request $request) { // 两种写法都可以 $id = $request->query('id'); // 或者直接 $id = $request->id; dd($id); } }
你之前用dd($request)时,参数其实在request->query属性里,只是没注意到。
方式2:路由参数绑定(需要对应路由定义)
如果希望直接通过方法参数接收id,你需要先在路由文件中给index方法定义对应的路由参数:
// routes/web.php Route::get('/home/{id}', [HomeController::class, 'index']);
此时再用redirect()->action传递id,参数会被解析为路由参数,就能直接在方法中接收:
class HomeController extends Controller { public function index($id) { dd($id); } }
你之前尝试的错误点
- 方式2失败是因为你的路由没有定义
{id}参数,参数被转为查询字符串,无法直接注入到方法参数中。 - 方式3完全错误,Laravel中不存在
Action这个类,这是无效写法。
内容的提问来源于stack exchange,提问作者Artur Müller Romanov
相关产品推荐
相关产品推荐

