У меня есть два метода 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
модель. В одном случае он возвращает модель, но в другом он просто возвращает идентификатор. Вот код промежуточного программного обеспечения:
<?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 установите его, чтобы сначала проверить руководство методы маршрута
использование any
такой метод,
Route::any('users/{user}/folders/{folder}', 'FileController@listUserFolder');
Я надеюсь, что это помогает.