如何在表单提交时将参数发送到路由
Posted
技术标签:
【中文标题】如何在表单提交时将参数发送到路由【英文标题】:How to send parameter to route on form submit 【发布时间】:2017-06-19 14:18:06 【问题描述】:我有以下路线:
Route::get("/changeLang/lang", 'SiteController@changeLang');
我有以下表格:
<form action=" url('/changeLang/???') " method="GET">
csrf_field()
<select onchange="this.form.submit()" name="lang">
<option value="eng">English</option>
<option value="cro">Hrvatski</option>
</select>
</form>
所以我想将该表单提交到该路由,以便该路由接收用户选择的语言。我不知道表单方法应该是GET还是POST。
那么如何在表单操作中指定指向该路由的链接,以便发送所选语言?用什么来代替 URL 末尾的问号?
而且我不喜欢使用 Laravel 的 Form 外观(或者它只是类)来回显 html 元素,所以如果可能的话,我想不这样做。
【问题讨论】:
很好的表单提交是行不通的,因为它会是/changeLang/lang?lang=cro
【参考方案1】:
您不能提交表单并让它以您期望的格式生成 URL。你会得到一个/changeLang/lang?lang=cro
格式的URL
所以你有两个选择。您提交表单,它会根据查询字符串值重定向。
或者您将 javascript 添加到表单中,以便生成您所追求的 url。
<select onchange="window.location.href='/changeLang/' + this.value;" name="lang">
【讨论】:
谢谢,但在我看来,路线名称不能在 camelCase 中,而是在 snake_case 中。如果我尝试使用骆驼案例,它实际上会转到 /change_lang/lang=cro 并且找不到该路线。【参考方案2】:如果你的路线是这样的。
Route::get("/changeLang", 'SiteController@changeLang');
您的表单将是这样的。
<form action=" url('/changeLang') " method="GET">
csrf_field()
<select onchange="this.form.submit()" name="lang">
<option value="eng">English</option>
<option value="cro">Hrvatski</option>
</select>
要从GET
[POST
可选地更改路线后] 获取价值,请在您的controller
中执行类似操作。
public function changeLang(Request $request)
$data = $request->all();
//echo $request->lang;
// or you can access data like this.
echo $data['lang'];
如果你想要这条路线
Route::get("/changeLang/lang", 'SiteController@changeLang');
那么你需要将它附加到路由中,请求 url 将是这样的。
https://host/changeLang/eng
在你的控制器中。
public function changeLang($lang)
echo $lang;
url(route)
url 函数为给定路径生成一个完全限定的 URL
更多关于url
。
希望这会有所帮助!
【讨论】:
我明白了,但我不知道如何在 HTML 代码中指定指向路由的链接【参考方案3】:使用这个
<form action=" url('/changeLang', [$lang]) " method="GET">
csrf_field()
<select onchange="this.form.submit()" name="lang">
<option value="eng">English</option>
<option value="cro">Hrvatski</option>
</select>
</form>
或者这个
<form action=" url('/changeLang/' . $lang,) " method="GET">
csrf_field()
<select onchange="this.form.submit()" name="lang">
<option value="eng">English</option>
<option value="cro">Hrvatski</option>
</select>
</form>
【讨论】:
【参考方案4】:更好地使用 laravel 表单生成器:
Form::open([
'method' => 'GET',
'action' => ['some@action', $param]
])
...
Form::close()
或者:
<form action=" url('/changeLang/lang' . $param) " method="GET">
【讨论】:
以上是关于如何在表单提交时将参数发送到路由的主要内容,如果未能解决你的问题,请参考以下文章