【问题标题】: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

标签: javascript php forms laravel routes


【解决方案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">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 2016-01-11
      • 2011-02-18
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多