如何在表单提交上发送参数到路由

时间:2017-02-02 13:26:02

标签: javascript php forms laravel routes

我有以下路线:

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 facade(或者它只是类)来回显HTML元素,所以如果可能的话我不想这样做。

4 个答案:

答案 0 :(得分:3)

您无法提交表单并让它以您期望的格式生成网址。将要发生的是您将获得格式为/changeLang/lang?lang=cro

的网址

所以你有两个选择。您提交表单,它会根据查询值重定向。

或者您在表单中添加JavaScript,以便生成您所追求的网址。

<select onchange="window.location.href='/changeLang/' + this.value;" name="lang">

答案 1 :(得分:0)

使用此

<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>

答案 2 :(得分:0)

更好地使用laravel表单构建器:

{{ Form::open([
      'method' => 'GET',
      'action' => ['some@action', $param]
]) }}

...

{{ Form::close() }}

或者:

 <form action="{{ url('/changeLang/lang' . $param) }}" method="GET">

答案 3 :(得分:0)

如果您的路线是这样的话。

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

希望这会有所帮助!