如何在Laravel 5表单请求中使用请求路由参数?
How to use the request route parameter in Laravel 5 form request?
我是 Laravel 5 的新手,我正在尝试使用新的表单请求来验证我的应用程序中的所有表单。
现在我陷入了需要删除资源的地步,我创建了一个 DeleteResourceRequest 只是为了使用授权方法。
问题是我需要在路由参数中找到请求的 ID,但我看不到如何将其输入授权方法。
我可以像这样在控制器方法中使用 id:
public function destroy($id, DeletePivotRequest $request)
{
Resource::findOrFail($id);
}
但是如何让它在表单请求的授权方法中工作?
这个很简单,用route()
的方法就可以了。假设您的路由参数称为 id
:
public function authorize(){
$id = $this->route('id');
}
您可以通过 Illuminate\Http\Request 实例访问路由参数值
public function destroy($id, DeletePivotRequest $request)
{
if ($request->route('id'))
{
//
}
Resource::findOrFail($id);
}
Laravel 5.2,来自控制器:
use Route;
...
Route::current()->getParameter('id');
如果您想对具有多个 URL 参数的多个路由使用相同的控制器方法,我发现这很有用,也许所有参数并不总是存在或可能出现在一个不同的顺序...
即getParameter('id')
会给你正确的答案,不管 {id}
在 URL 中的位置如何。
我来这里是为了寻找答案,并在评论中找到了它,所以想向其他使用资源路由的人澄清,试图在表单请求中使用它
正如卢卡斯在他的评论中提到的那样:
给定资源控制器 Route::resource('post', ...)
您可以使用的参数将被命名为 post
这对我很有用,但还不够完整。看来该参数将是资源存根最后一部分的单数版本。
在我的例子中,路线被定义为$router->resource('inventory/manufacturers', 'API\Inventory\ManufacturersController');
可用的参数是manufacturer
(存根最后一部分的单数版本inventory/manufacturers
)
取决于您在路由中定义参数的方式。
对于我下面的情况,它将是:'user'
不是 'id'
$id = $this->route('user');
测试其他解决方案后,似乎不适用于 laravel 8,但下面的方法有效
Route::getCurrentRoute()->id
假设你的路线是
Route::post('something/{id}', ...)
调用后会得到参数id
request()->route('id')
或
$this->route('id')
如果你使用资源路由,你需要用资源名称调用
// eg: resource
Route::resource('users', App\Http\Controllers\UserController::class);
$this->route('user')
在终端写入
php artisan route:list
看看你的参数名称是什么
然后使用
$this->route('sphere') to get param
我是 Laravel 5 的新手,我正在尝试使用新的表单请求来验证我的应用程序中的所有表单。
现在我陷入了需要删除资源的地步,我创建了一个 DeleteResourceRequest 只是为了使用授权方法。
问题是我需要在路由参数中找到请求的 ID,但我看不到如何将其输入授权方法。
我可以像这样在控制器方法中使用 id:
public function destroy($id, DeletePivotRequest $request)
{
Resource::findOrFail($id);
}
但是如何让它在表单请求的授权方法中工作?
这个很简单,用route()
的方法就可以了。假设您的路由参数称为 id
:
public function authorize(){
$id = $this->route('id');
}
您可以通过 Illuminate\Http\Request 实例访问路由参数值
public function destroy($id, DeletePivotRequest $request)
{
if ($request->route('id'))
{
//
}
Resource::findOrFail($id);
}
Laravel 5.2,来自控制器:
use Route;
...
Route::current()->getParameter('id');
如果您想对具有多个 URL 参数的多个路由使用相同的控制器方法,我发现这很有用,也许所有参数并不总是存在或可能出现在一个不同的顺序...
即getParameter('id')
会给你正确的答案,不管 {id}
在 URL 中的位置如何。
我来这里是为了寻找答案,并在评论中找到了它,所以想向其他使用资源路由的人澄清,试图在表单请求中使用它
正如卢卡斯在他的评论中提到的那样:
给定资源控制器 Route::resource('post', ...)
您可以使用的参数将被命名为 post
这对我很有用,但还不够完整。看来该参数将是资源存根最后一部分的单数版本。
在我的例子中,路线被定义为$router->resource('inventory/manufacturers', 'API\Inventory\ManufacturersController');
可用的参数是manufacturer
(存根最后一部分的单数版本inventory/manufacturers
)
取决于您在路由中定义参数的方式。
对于我下面的情况,它将是:'user'
不是 'id'
$id = $this->route('user');
测试其他解决方案后,似乎不适用于 laravel 8,但下面的方法有效
Route::getCurrentRoute()->id
假设你的路线是
Route::post('something/{id}', ...)
调用后会得到参数id
request()->route('id')
或
$this->route('id')
如果你使用资源路由,你需要用资源名称调用
// eg: resource
Route::resource('users', App\Http\Controllers\UserController::class);
$this->route('user')
在终端写入
php artisan route:list
看看你的参数名称是什么
然后使用
$this->route('sphere') to get param