Изменение файлов маршрутов на основе пути URI в Slim 3
Итак, у меня есть 4 папки, каждая из которых имеет свой собственный файл route.php. Поэтому я хотел бы указать путь к каждой папке на основе пути URI. Так, например, если мой путь к веб-сайту www.example.com/user, то для инфраструктуры Slim потребуется путь к контроллеру / пользователям / маршрутам. Я пытаюсь добиться этого с помощью промежуточного программного обеспечения, но когда я тестирую его, я получаю "Вызов функции-члена", как мне это исправить.
Вот мой код ниже:
//determine the uri path then add route path based upon uri
$app->add(function (Request $request, Response $response, $next) {
if (strpos($request->getAttribute('route'), "/user") === 0) {
require_once('controllers/users/routes.php');
} elseif (strpos($request->getUri()->getPath(), "/public") === 0) {
require_once('controllers/public/routes.php');
} elseif (strpos($request->getUri()->getPath(), "/brand") === 0) {
require_once('controllers/brands/routes.php');
}elseif (strpos($request->getUri()->getPath(), "/admin") === 0) {
require_once('controllers/admin/routes.php');
}elseif (strpos($request->getUri()->getPath(), "/") === 0) {
require_once('routes.php');
}
$response = $next($request, $response);
return $response;
});
Поэтому прежде чем фреймворк определит маршрут, затем добавит требуемый путь. Но что-то не работает правильно, есть идеи?
1 ответ
Ну, вы не должны этого делать, потому что регистрация всех маршрутов не займет много времени.
Но если вы хотите сделать это, вы должны внести некоторые изменения в свой код:
$request->getAttribute('route')
не возвращает путь, он возвращает объект маршрута SlimЕсли вы хотите использовать путь, используйте
$request->getUri()->getPath()
вместо этого (это не начинается с/
так что маршрут f.ex есть (/customRoute/test
это возвращаетсяcustomRoute/test
Вам нужно использовать
$app
как$this
в этом контексте являетсяContainerInterface
от прыщей, а не приложение тонкогоУбедитесь, что вы не установили
determineRouteBeforeAppMiddleware
в настройкахtrue
поскольку он проверяет, какой маршрут выполнить до выполнения промежуточного программного обеспечения.
Вот бегущий пример:
$app = new \Slim\App();
$app->add(function($req, $res, $next) use ($app) {
if(strpos($req->getUri()->getPath(), "customPath" ) === 0) {
$app->get('/customPath/test', function ($req, $res, $arg) {
return $res->write("WUII");
});
}
return $next($req, $res);
});
$app->run();