Laravel 5 表单请求中如何使用请求路由参数?

问题描述 投票:0回答:9

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

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

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

我可以在控制器方法中使用 id,如下所示:

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

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

php laravel laravel-5 laravel-routing laravel-validation
9个回答
96
投票

很简单,用

route()
方法就可以了。假设您的路线参数名为
id
:

public function authorize(){
    $id = $this->route('id');
}

13
投票

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

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

    Resource::findOrFail($id);
}

9
投票

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

对于我下面的情况,它将是:

'user'
不是
'id'

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


5
投票

Laravel 5.2,从控制器内:

use Route;

...

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

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

即无论

getParameter('id')
在 URL 中的位置如何,
{id}
都会为您提供正确答案。

参见 Laravel 文档:访问当前路由


1
投票

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

Route::getCurrentRoute()->id

假设你的路线是

Route::post('something/{id}', ...)

0
投票

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

正如卢卡斯在评论中提到的: 给定资源控制器

Route::resource('post', ...)
,您可以使用的参数将被命名为
post

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

在我的例子中,路线被定义为

$router->resource('inventory/manufacturers', 'API\Inventory\ManufacturersController');

可用的参数是

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


0
投票

调用会得到参数id

request()->route('id')

$this->route('id')

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

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

$this->route('user')

0
投票

在终端中写入

php artisan 路线:列表

查看您的参数名称是什么

然后使用

$this->route('sphere') 获取参数


0
投票

如果您的路线是资源路线,则按以下方式编码

// for example your route is
Route::resource('posts', 'PostsController');

// then

public function authorize(){
    $id = request()->post;
}
© www.soinside.com 2019 - 2024. All rights reserved.