路由模型绑定不适用于 POST

Route Model binding not working with POST

对于同一路由,我有两个 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 模型时出现问题。在一种情况下它 returns 模型但在另一种情况下它只是 returns 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 路由在传递的文件夹内创建一个子文件夹。

获取参数使用:

$this->route('parameterName');

$request->route('parameterName');

如果您将参数传递到路由中,则它不能是 POST 请求它获取其调用的 urlencoded 格式。

如果您不知道它,只需使用任何关键字而不是 post 并获取 laravel 设置为合适先查看手册route methods

像这样使用any方法,

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

希望对您有所帮助。