首页 文章

路由模型绑定不适用于POST

提问于
浏览
0

我有两种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);
    }
}

EDIT

POST路由在传递的文件夹中创建一个子文件夹 .

2 回答

  • 2

    获取参数使用:

    $this->route('parameterName');
    

    要么

    $request->route('parameterName');
    
  • -1

    如果您将参数传递给路由,则它不能是POST请求,它将获得其称为urlencoded的格式 .

    如果您不知道它只是使用任何关键字而不是发布并获得laravel设置它适当检查手册首先route methods

    像这样使用 any 方法,

    Route::any('users/{user}/folders/{folder}', 'FileController@listUserFolder');
    

    我希望它有所帮助 .

相关问题