我有两种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路由在传递的文件夹中创建一个子文件夹。
获取参数使用:
$this->route('parameterName');
要么
$request->route('parameterName');
如果您将参数传递到路由中,则它不能是POST请求,它将获得其称为urlencoded的格式。
如果您不知道它只是使用任何关键字而不是发布并获得laravel设置它适当检查手册首先route methods
使用像这样的any
方法,
Route::any('users/{user}/folders/{folder}', 'FileController@listUserFolder');
我希望它有所帮助。