42

我是 Laravel 5 的新手,我正在尝试使用新的表单请求来验证我的应用程序中的所有表单。

现在我被困在需要删除资源的地方,我创建了一个 DeleteResourceRequest 只是为了使用授权方法。

问题是我需要在路由参数中找到请求的 id,但我看不到如何将其输入到 authorize 方法中。

我可以像这样在控制器方法中使用 id:

public function destroy($id, DeletePivotRequest $request)
{
    Resource::findOrFail($id);
}

但是如何让它在表单请求的授权方法中工作呢?

4

7 回答 7

82

这很简单,使用route()方法即可。假设您的路由参数被调用id

public function authorize(){
    $id = $this->route('id');
}
于 2015-05-05T11:43:30.907 回答
11

您可以通过 Illuminate\Http\Request 实例访问 Route 参数值

public function destroy($id, DeletePivotRequest $request)
{
    if ($request->route('id'))
    {
        //
    }

    Resource::findOrFail($id);
}
于 2015-05-05T11:53:19.983 回答
9

取决于您在路由中定义参数的方式。

对于我下面的情况,它将是:'user' 不是 'id'

$id = $this->route('user');

在此处输入图像描述

于 2018-07-15T15:00:40.473 回答
5

Laravel 5.2,来自控制器:

use Route;

...

Route::current()->getParameter('id');

如果您想对具有多个 URL 参数的多个路由使用相同的控制器方法,我发现这很有用,并且可能并非所有参数都始终存在或可能以不同的顺序出现......

iegetParameter('id')会给你正确的答案,不管{id}' 在 URL 中的位置。

请参阅Laravel 文档:访问当前路由

于 2016-08-05T18:09:47.157 回答
1

在测试了其他解决方案后,似乎不适用于 laravel 8,但这在下面有效

Route::getCurrentRoute()->id

假设你的路线是

Route::post('something/{id}', ...)
于 2021-07-26T23:31:53.263 回答
0

我来这里是为了寻找答案,并在评论中找到了答案,因此想向其他使用资源路由尝试在表单请求中使用它的人澄清

正如 lukas 在他的评论中提到的:给定一个资源控制器Route::resource('post', ...),您可以使用的参数将被命名post

这对我很有用,但还不够完整。看来该参数将是资源存根最后一部分的单数版本。

在我的情况下,路线被定义为$router->resource('inventory/manufacturers', 'API\Inventory\ManufacturersController');

可用的参数是manufacturer(存根最后一部分的单数版本inventory/manufacturers

于 2018-03-04T01:36:24.523 回答
0

如果你打电话,你会得到参数 id

request()->route('id')

或者

$this->route('id')

如果您使用的是资源路由,则需要使用资源名称进行调用

// eg: resource
Route::resource('users', App\Http\Controllers\UserController::class);

$this->route('user')
于 2021-10-12T10:50:26.040 回答