我是Slim Framework的新手。如何获得与Codeigniter函数base_url()
类似的基本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-different-routes
使用Slim v3,当它实现PSR7时,您可以获得一个PSR7 Uri对象,并调用Slim3添加到其中的getBasePath()方法
$basePath = $request->getUri()->getBasePath();
来自Slim v3文档:
基本路径
如果Slim应用程序的前端控制器位于文档根目录下的物理子目录中,则可以使用Uri对象的getBasePath()方法获取HTTP请求的物理基本路径(相对于文档根)。如果Slim应用程序安装在文档根目录的最顶端目录中,则这将是一个空字符串。
请注意,getBasePath()方法是由框架添加的,不是PSR7UriInterface的一部分。
在最近使用Twig的应用程序中,我们如下分配httpBasePath:
$view = $app->view()->getEnvironment();
$view->addGlobal('httpBasePath', $app->request->getScriptName());
addGlobal()
方法可能相当于$app->view()->appendData()
,我不确定。
使用$app->request->getScriptName()
的优点是,我们不必手动设置文件夹名称,也不必关心它是什么——一个开发人员可以将repo放在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 ));
});
我可以用{{ app.request.getRootUri }}
获得基本url(我使用的是Twig模板引擎)。顺便说一句,这与"SCRIPT_NAME"环境变量相同。
如果您正在使用TWIG,则在Slim v3中调用-
{{ base_url() }}
或使用{{ path_for('yourRouteName') }}
获取基本url的最简单方法是附加请求url和请求根url,如下所示:$req = $app->request;
$base_url = $req->getUrl()."".$req->getRootUri()."/";