路由模型绑定不适用于POST

时间:2018-01-04 09:16:04

标签: php laravel post laravel-5.4 model-binding

我有两种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路径在传递的文件夹中创建一个子文件夹。

2 个答案:

答案 0 :(得分:2)

使用以下方式获取参数:

$this->route('parameterName');

$request->route('parameterName');

答案 1 :(得分:-1)

如果您将参数传递到路由中,那么它就不能成为POST请求,而是获取其称为urlencoded的格式。

如果你不知道它只是使用任何关键字而不是发布和获取 laravel将其设置为适当检查手册route methods

使用any这样的方法,

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

我希望它有所帮助。