【问题标题】:How can I get id from url with Request $request? (Laravel 5.3)如何使用 Request $request 从 url 获取 id? (Laravel 5.3)
【发布时间】:2017-08-08 11:19:01
【问题描述】:

我在视图上的链接href是这样的:

<a href="{{ route('message.inbox.detail.id', ['id' => $message->id]) }}" class="btn btn-default">
    <span class="fa fa-eye"></span> {{ trans('button.view') }}
</a>

我的路线是这样的:

Route::get('message/inbox/detail/id/{id}', ['as'=>'message.inbox.detail.id','uses'=>'MessageController@detail']);

点击后,url显示如下:

http://myshop.dev/message/inbox/detail/id/58cadfba607a1d2ac4000254

我想通过Request $request 获取 id

在控制器上,我尝试这样:

public function detail(Request $request)
{
    dd($request->input('id'));
}

结果:空

我该如何解决?

【问题讨论】:

    标签: php laravel routes request laravel-5.3


    【解决方案1】:

    你可以这样得到它

    $request->route('id')
    

    在请求类中你可以这样访问它

    $this->route('id')
    

    我通常在验证字段时使用它以确保它是唯一的,并且在进行更新时我需要按 ID 排除模型

    【讨论】:

    • 这是正确答案,值得注意的可能不是id。您传递的参数应与路由定义中的参数名称相同。
    • @rosscooper 没错。如果您这样定义路由:Route::apiresource('car', 'Api\CarController'),则必须使用$request-&gt;route('car')$request-&gt;route()-&gt;parameters['car']。您可以使用来自控制器方法参数的request()$request 或请求对象内的$this 获取请求对象。
    【解决方案2】:

    这是因为你通过 url 传递 id 参数,你应该使用这样的形式发送它

    {!! Form::open(['route'=>' route('message.inbox.detail.id', 'method'=> 'POST']) !!}
     <input type="hidden" name="id" value="{{ $message->id }}" />
    {!! Form::submit({{ trans('button.view') }}, ['class'=>'btn btn-default']) !!}
    {!! Form::close() !!}
    

    现在您可以通过控制器中的请求访问

    public function detail(Request $request)
    {
    
    
     dd($request->input('id'));
    }
    

    【讨论】:

      【解决方案3】:

      通过这个获取id:

      public function detail($id)
      {
         dd($id);
      }
      

      【讨论】:

      • 不能使用参数Request $request吗?
      • 对于get,这是你必须将它传递给你的控制器的方式,Request $request 可以用于其他http方法。
      【解决方案4】:

      对于使用较新版本的 laravel 寻找答案的人,您可以使用以下方式获取路由 ID:

      带有模型绑定的示例路由

      Route::put('/post/{post}, [PostController::class, 'update]);
      

      $this-&gt;route('id') 在这种情况下由于模型绑定将不起作用。

      您可以这样做:

      // using in controller
      request()->route('post.id);
      

      // using in form request
      $this->route('post.id');
      

      【讨论】:

        猜你喜欢
        • 2017-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-15
        • 1970-01-01
        • 2020-09-03
        • 1970-01-01
        • 2016-10-07
        相关资源
        最近更新 更多