Привязка модели маршрута не работает с 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 модель. В одном случае он возвращает модель, но в другом он просто возвращает идентификатор. Вот код промежуточного программного обеспечения:

<?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 создает подпапку внутри переданной папки.

0

Решение

Получить параметр с помощью:

$this->route('parameterName');

или же

$request->route('parameterName');
2

Другие решения

Если вы передаете параметры в маршрут, то это не может быть запрос POST, он получит свой формат urlencoded.

Если вы не знаете об этом, просто используйте любое ключевое слово вместо поста и получите
laravel установите его, чтобы сначала проверить руководство методы маршрута

использование any такой метод,

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

Я надеюсь, что это помогает.

-1

По вопросам рекламы [email protected]