如何在Laravel中使用路由名称传递查询参数?

5
我知道这个。
{{route('editApplication', ['id' => $application->id])}} == /application/edit/{id}

但是我需要

?? == /application/edit?appId=id

请用您的答案替换"??",以帮助我解决问题。


你能否详细说明你想要实现什么,以及在哪里实现? - jogesh_pi
3个回答

20

这取决于您的路由看起来是什么样子:

如果您的路由是:

Route::get('/application/edit/{id}', 'SomeController')->name('editApplication');

当你使用时

route('editApplication', ['id' => 5])

网址将会是这样:

/application/edit/5

然而,所有不在路由参数中的其他参数将用作查询字符串,例如:

route('editApplication', ['id' => 5, 'first' => 'foo', 'second' => 'bar'])

将生成此类网址:

/application/edit/5?first=foo&second=bar

如果您想要实现类似这样的URL

/application/edit?appId=id

你应该像这样定义路由:

Route::get('/application/edit/', 'SomeController')->name('editApplication');

然后当您使用时

route('editApplication', ['appId' => 5])

你会得到

/application/edit?appId=5

网址。


非常出色和正确的答案,谢谢Marcin Nabialek :) - Kamlesh

2
你需要修改“editApplication”路由,去掉参数选项。如果你仍然需要参数,请在你的控制器中添加以下行,并通过使用来捕获数据;
$appId = $request->input('appId');

1

route 方法接受任何一组变量,并将它们作为查询字符串放置,除非变量名与定义的路由签名匹配。

因此,对于您的情况,您可以按照以下方式操作:

route('editApplication', ['appId' => <your id here>])

你可以使用数组提供任意数量的变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接