Я новичок в Slim Framework. Как получить базовый URL-адрес, например, с помощью функции base_url()
?
благодаря
Вам необходимо установить базовый url вручную FIRST, прежде чем вы сможете его получить, как в этом:
$app->hook('slim.before', function () use ($app) { $app->view()->appendData(array('baseUrl' => '/base/url/here')); });
С Slim v3, когда он реализует PSR7, вы можете получить объект PSR7 Uri и вызвать метод getBasePath (), который Slim3 добавляет к нему. Просто напишите:
$basePath = $request->getUri()->getBasePath();
Из документации Slim v3 :
Базовый путь
Если фронт-контроллер вашего Slim-приложения находится в физической подкаталоге под корневым каталогом вашего документа, вы можете получить физический базовый путь HTTP-запроса (относительно корня документа) с помощью метода getBasePath () объекта Uri. Это будет пустая строка, если приложение Slim установлено в самый верхний каталог корневого каталога документа.
Имейте в виду, что метод getBasePath () добавляется каркасом и не является частью PSR7 UriInterface .
В недавнем приложении, где мы используем Twig, мы назначаем httpBasePath следующим образом:
$view = $app->view()->getEnvironment(); $view->addGlobal('httpBasePath', $app->request->getScriptName());
Метод addGlobal()
вероятно, эквивалентен $app->view()->appendData()
, я не уверен.
Преимущество использования $app->request->getScriptName()
заключается в том, что нам не нужно вручную устанавливать имя папки или заботиться о том, что это такое: у одного разработчика может быть репо, расположенное по адресу http://example.localhost
а другое может иметь его в http://localhost/projects/slim
и не требуется настройка.
Попробуйте в index.php установить базовый url для представления
$app->hook('slim.before', function () use ($app) { $posIndex = strpos( $_SERVER['PHP_SELF'], '/index.php'); $baseUrl = substr( $_SERVER['PHP_SELF'], 0, $posIndex); $app->view()->appendData(array('baseUrl' => $baseUrl )); });
Я могу получить базовый url с {{ app.request.getRootUri }}
(я использую механизм шаблонов Twig). Кстати, это то же самое, что и переменная среды SCRIPT_NAME.
если вы используете TWIG, тогда в Slim v3 call –
{{ base_url() }}
или используйте {{ path_for('yourRouteName') }}
Самый простой способ получить базовый url – добавить URL-адрес запроса и корневой URL-адрес запроса, как $req = $app->request; $base_url = $req->getUrl()."".$req->getRootUri()."/";
ниже: $req = $app->request; $base_url = $req->getUrl()."".$req->getRootUri()."/";
$req = $app->request; $base_url = $req->getUrl()."".$req->getRootUri()."/";