Я новичок в Slim Framework. Как получить базовый URL-адрес, например, с помощью функции Codeigniter base_url()
?
Спасибо
Я новичок в Slim Framework. Как получить базовый URL-адрес, например, с помощью функции Codeigniter base_url()
?
Спасибо
Вам нужно установить базовый URL-адрес вручную ПЕРВЫЙ, прежде чем вы сможете получить его, как в этом:
$app->hook('slim.before', function () use ($app) {
$app->view()->appendData(array('baseUrl' => '/base/url/here'));
});
http://help.slimframework.com/discussions/questions/49-how-to-deal-with-base-path-and-other-routes
<base href="{{ baseUrl }}" />
- person Dexter Huinda; 14.07.2012
В Slim v3, поскольку он реализует PSR7, вы можете получить объект PSR7 Uri и вызвать метод getBasePath(), который Slim3 добавляет к нему. Просто напишите:
$basePath = $request->getUri()->getBasePath();
Из Документация Slim v3 :
Базовый путь
Если передний контроллер вашего Slim-приложения находится в физическом подкаталоге под корневым каталогом вашего документа, вы можете получить физический базовый путь HTTP-запроса (относительно корня документа) с помощью метода getBasePath() объекта Uri. Это будет пустая строка, если приложение Slim установлено в самом верхнем каталоге корня документа.
Имейте в виду, что метод getBasePath() добавляется фреймворком и не является частью PSR7 UriInterface.
getBasePath()
в интерфейсе PSR-7 Uri нет.
- person Stefano Torresi; 23.11.2017
getBasePath()
специфичен для Slim\Http\Uri
, он не соответствует PSR-7. Учитывая, что остальная часть документации предлагает, и это справедливо, намекать на интерфейсы PSR-7, использование метода, специфичного для реализации, приведет к привязке к поставщику и поставит под угрозу переносимость, которую должна была обеспечить поддержка PSR-7 в первое место. Чтобы уточнить ваш ответ, я бы предложил отказаться от ссылки на PSR-7, потому что в ее нынешнем виде подразумевается, что предлагаемый метод является частью стандарта.
- person Stefano Torresi; 24.11.2017
getBaseUrl()
- person Ivan of uganda; 22.02.2019
В недавнем приложении, где мы используем 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 -
{{ base_url() }}
или используйте {{ path_for('yourRouteName') }}
Самый простой способ получить базовый URL-адрес — добавить URL-адрес запроса и корневой URL-адрес запроса, как показано ниже: $req = $app->request;
$base_url = $req->getUrl()."".$req->getRootUri()."/";