Базовый URL Slim Framework

Я новичок в Slim Framework. Как получить базовый URL-адрес, например, с помощью функции Codeigniter base_url()?

Спасибо


person Community    schedule 14.07.2012    source источник


Ответы (7)


Вам нужно установить базовый 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

person Dreaded semicolon    schedule 14.07.2012
comment
Я думаю, он спрашивал, как не установить - person Dexter Huinda; 14.07.2012
comment
да я заметил, но сначала нужно настроить. это не по умолчанию, отредактировал мой ответ, чтобы уточнить это - person Dreaded semicolon; 14.07.2012
comment
@SosialLab Правильно, чтобы получить [после настройки с помощью вышеуказанного метода]... в ваших шаблонах используйте что-то вроде этого <base href="{{ baseUrl }}" /> - person Dexter Huinda; 14.07.2012
comment
Привет спасибо за ответ. Я использую $app-›render(). Как настроить? - person ; 14.07.2012
comment
@SosialLab Вам нужно прочитать документы и узнать, как работают настройка, получение, структура MVC и тонкое кодирование. - 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.

person Al Foиce ѫ    schedule 21.01.2016
comment
такого метода getBasePath() в интерфейсе PSR-7 Uri нет. - person Stefano Torresi; 23.11.2017
comment
@StefanoTorresi: Может быть, вы неправильно поняли то, что я плохо выразил (английский не мой родной язык): Slim3 предлагает getBasePath() поверх объекта PSR7 Uri. Я никогда не писал, что этот метод является частью интерфейса PSR7 Uri. Пожалуйста, обратитесь к документации Slim3. - person Al Foиce ѫ; 24.11.2017
comment
Я понял, что вы имели в виду, но да, как вы сами признаете, это выразилось некорректно: метод getBasePath() специфичен для Slim\Http\Uri, он не соответствует PSR-7. Учитывая, что остальная часть документации предлагает, и это справедливо, намекать на интерфейсы PSR-7, использование метода, специфичного для реализации, приведет к привязке к поставщику и поставит под угрозу переносимость, которую должна была обеспечить поддержка PSR-7 в первое место. Чтобы уточнить ваш ответ, я бы предложил отказаться от ссылки на PSR-7, потому что в ее нынешнем виде подразумевается, что предлагаемый метод является частью стандарта. - person Stefano Torresi; 24.11.2017
comment
намного лучше! ???? - person Stefano Torresi; 24.11.2017
comment
Извините за опоздание на вечеринку, но я думаю, что в настоящее время правильный метод 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, и никакой настройки не требуется.

person Charlie Schliesser    schedule 24.01.2014

Попробуйте это в 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 ));
});
person qwertz    schedule 05.10.2013
comment
Это напоминает мне ту же функцию в WordPress, это должно быть включено в основы документации фреймворка. - person Rodrigo Polo; 12.06.2014

Я могу получить базовый URL-адрес с помощью {{ app.request.getRootUri }} (я использую механизм шаблонов Twig). Между прочим, это то же самое, что и переменная среды SCRIPT_NAME.

person Francesco Nardone    schedule 25.03.2015

если вы используете TWIG, то в вызове Slim v3 -

{{ base_url() }}

или используйте {{ path_for('yourRouteName') }}

person HADI    schedule 23.07.2016

Самый простой способ получить базовый URL-адрес — добавить URL-адрес запроса и корневой URL-адрес запроса, как показано ниже: $req = $app->request; $base_url = $req->getUrl()."".$req->getRootUri()."/";

person Mutinda Boniface    schedule 11.06.2015