Я использую несколько компонентов из laravel 7, и illuminate/routing
- один из них.
Все работало так гладко, как можно было бы просить, пока я не хотел добавить маршрут get
внутрь группа, к которой прикреплено промежуточное ПО.
группа выглядит так:
$router->middleware([Api\Middleware\Auth::class])->namespace('Api\Controllers')->group(function() use ($router){
// returns a session token
$router->post('user/login', ['uses' => 'UsersController@login'])->withoutMiddleware([Api\Middleware\Auth::class]);
// should return a list with all categories
$router->get('category/list', ['uses' => '\App\Controllers\CategoriesController@list']);
});
Вот проблема:
У меня есть два пространства имен: App\\
которые имеет свои корни в папке src/
и Api\\
, который имеет как root api/src
папку.
Структура папок:
root -
- src
- controllers
- models
- middleware
- api
- src
- controllers
- models
- middleware
Проблема в том, что если я прикреплю * Промежуточное ПО 1021 * для этой группы routes
, маршрут, который указывает на CategoriesController@list
, вернет пустую страницу. НО, если я сделаю ТОЧНУЮ копию Api\Middleware\Auth
в App\Middleware
пространство имен, этот маршрут будет работать. Другими словами, приведенный выше код вернет что-то только для первого маршрута, но пустую страницу для второго маршрута. Вот код, который работает для обоих маршрутов:
$router->middleware([App\Middleware\Auth::class])->namespace('Api\Controllers')->group(function() use ($router){
// returns a session token
$router->post('user/login', ['uses' => 'UsersController@login'])->withoutMiddleware([Api\Middleware\Auth::class]);
// should return a list with all categories
$router->get('category/list', ['uses' => '\App\Controllers\CategoriesController@list']);
});
Но, конечно, мне нужно это Auth
промежуточное ПО только внутри api, а не для всего приложения.
Вот мой Auth
промежуточное ПО (очень базовое c):
// this namespace changes from Api\ to App\ when copied over from api/src to src/
namespace Api\Middleware;
use Closure;
use Illuminate\Http\Request;
class Auth{
public function handle(Request $request, Closure $next){
return $next($request);
}
}
А вот мой CategoriesController
метод:
namespace Api\Controllers;
use Illuminate\Routing\Controller;
use Illuminate\Http\Request;
use App\Models\Category;
class CategoriesController extends Controller{
public $categories;
public function list(Request $request){
return ['foo', 'bar', 'xyz'];
}
}
Почему он возвращает пустую страницу, когда пространство имен для Auth
промежуточное ПО начинается с Api\\
, но работает, когда создается копия того же самого промежуточного ПО с пространством имен App\\
?
Является ли Api\\
своего рода зарезервированным ключевым словом, которое laravel обрабатывает по-другому?
Что можно было сделать?
Спасибо! : D