【问题标题】:Laravel: Adding a query parameter in the url of a form?Laravel:在表单的 url 中添加查询参数?
【发布时间】:2014-03-10 20:05:25
【问题描述】:

打开一个将提交到特定 url 的表单非常容易:

echo Form::model($model, array('route' => array('user', $user->id)))

这将呈现如下内容:

<form action="/user/1">

我想要:

<form action="/user/1?q=54">

换句话说,如何更改表单方法以支持添加查询参数,在这种情况下称为“q”?

问这个问题的一个更简单的方法是:有没有办法使用 Route 生成 URL 以包含查询参数?

【问题讨论】:

  • 您是否有理由不能只添加一个名为 q 的隐藏字段并将其值设置为 54?这样就可以像对待任何其他 GET 或 POST 变量一样对待它。
  • 只是不太整洁。我不想添加整个字段只是为了稍微改变行为。
  • 您使用的是 POST 还是 GET?
  • 这是一个 POST,但它真的重要吗?因为我只想让“动作”包含 Q=whatever
  • 表单是 GET 还是 POST 很重要 - GET 表单无法使用问号语法在操作中指定 GET 参数,因为当表单从其输入生成 URL 时它会被丢弃.至于你的具体问题,我不确定。我说检查 UrlGeneratorFormBuilder 代码,看看它们是否处理将查询字符串附加到 URL。

标签: php forms laravel


【解决方案1】:

不幸的是,我发现这个问题的唯一答案是将变量附加到 URL 上,如下所示:

echo Form::model($model, array('route' => array('user', $user->id.'?q=54')))

虽然你为什么不像平常一样使用对 SEO 友好的参数呢?所以它会像

<form action="/user/1/54">

您还可以使用带参数的路由来制作您的网址,但您希望它们看起来像这样(我假设您代码中的 Q 表示问题:

Route::post('user/{id}/q/{q_id}', 'UserController@postQuestion');

或者

Route::post('user/{id}/question/{q_id}', 'UserController@postQuestion');

【讨论】:

    【解决方案2】:

    有同样的问题,通过在表单中​​添加一个隐藏字段并从控制器调用它来解决。

    {{ Form::hidden('_test', 'tags') }}
    

    在控制器中一定要设置这个:

    public function update($id)
    {
        $test= Input::get('_test', 'default');
        $input = array_except(Input::all(), '_method', '_test');
        // prevent from updating an inexistent field
    ...
    

    无法评论@Steve 的限制原因,将在此处更新:

    它不会起作用,因为“Form::model”会处理“HTML::entities()”中的值,所以

    $id . "?test"
    

    将是

    1%3Ftest
    

    【讨论】:

      猜你喜欢
      • 2019-12-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 2015-04-02
      • 2020-03-08
      相关资源
      最近更新 更多