如何使用 Request $request 从 url 获取 id? (Laravel 5.3)
Posted
技术标签:
【中文标题】如何使用 Request $request 从 url 获取 id? (Laravel 5.3)【英文标题】:How can I get id from url with Request $request? (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'));
结果:空
我该如何解决?
【问题讨论】:
【参考方案1】:你可以这样得到它
$request->route('id')
在请求类中你可以这样访问它
$this->route('id')
我通常在验证字段时使用它以确保它是唯一的,并且在进行更新时我需要按 ID 排除模型
【讨论】:
这是正确答案,值得注意的可能不是id
。您传递的参数应与路由定义中的参数名称相同。
@rosscooper 没错。如果您这样定义路由:Route::apiresource('car', 'Api\CarController')
,则必须使用$request->route('car')
或$request->route()->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->route('id')
在这种情况下由于模型绑定将不起作用。
您可以这样做:
// using in controller
request()->route('post.id);
或
// using in form request
$this->route('post.id');
【讨论】:
以上是关于如何使用 Request $request 从 url 获取 id? (Laravel 5.3)的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Laravel 正确模拟 Illuminate\Http\Request 类
如何使用 strpos($_SERVER['REQUEST_URI'] 从 url 段生成活动类