我有两种HTTP方法用于相同的路由,如下所示:
Route::group(['middleware' => ['user.ownership']], function () {
Route::get('users/{user}/folders/{folder}', 'FileController@listUserFolder');
Route::post('users/{user}/folders/{folder}/folders', 'FileController@createFolder');
});
问题在于,当请求到达中间件user.ownership
时,路由模型绑定适用于GET请求,但不适用于POST。这对我没用。
中间件检查用户是否拥有资源(在本例中为文件夹)。当我尝试获取Folder
模型时,问题就出现了。在一种情况下,它返回模型,但在另一种情况下,它只返回id。这是中间件代码:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckIfUserOwnsResource
{
/**
* Comprueba si el recurso solicitado pertenece
* al usuario que lo solicita.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$user = $request->user();
$file = $request->folder;
$fileOwner = $file->account;
$fileApplicant = $user->account;
if($fileOwner != $fileApplicant) {
return response()->json([
'success' => false,
'message' => 'El recurso no le pertenece',
], 403);
}
return $next($request);
}
}
修改
POST路径在传递的文件夹中创建一个子文件夹。
答案 0 :(得分:2)
使用以下方式获取参数:
$this->route('parameterName');
或
$request->route('parameterName');
答案 1 :(得分:-1)
如果您将参数传递到路由中,那么它就不能成为POST请求,而是获取其称为urlencoded的格式。
如果你不知道它只是使用任何关键字而不是发布和获取 laravel将其设置为适当检查手册route methods
使用any
这样的方法,
Route::any('users/{user}/folders/{folder}', 'FileController@listUserFolder');
我希望它有所帮助。