如何在子目录中获取根 URL 到 Slim 应用程序?
How to get the root URL to Slim application in a subdir?
我必须用 PHP 做一个网站,我选择使用 Slim 和 Twig。但是我的上司不希望我使用虚拟主机。因此,当我使用 MAMP 测试网站时遇到问题,因为该网站位于子目录中,例如 http://localhost:8888/subdir
.
当我尝试访问资产时,我不能使用绝对路径,因为它会迫使我写 /subpath/path/to/asset
。但是当我们部署应用程序时,将没有子路径。我怎样才能像有虚拟主机一样对网站进行 root 操作?
你可以在下面看到我的一些代码:
index.php
<?php
require 'vendor/autoload.php';
include 'database.php';
use app\controller\ConfigController;
$app = new \Slim\Slim();
$app->get('/', function () {
echo "accueil";
})->name("root");
$app->group('/Admin', function () use ($app) {
$app->get("/", function (){
$ctrl = new ConfigController();
$ctrl->index();
})->name("indexAdmin");
});
.htaccess(在 localhost:8888/子目录中)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
ConfigController(调用函数)
public function index() {
$loader = new \Twig_Loader_Filesystem("app/view/Admin");
$twig = new \Twig_Environment($loader);
$template = $twig->loadTemplate('Index.twig');
echo $template->render(array(
'css' => "admin.css"
));
}
模板 由 Twig 环境调用
<!doctype html>
<html lang="fr">
<head>
<link rel="stylesheet" type="text/css" href="/app/assets/stylesheets/{{ css }}">
</head>
<body>
[...]
我在Google和Stack Overflow上搜索的时候,大家都说要做虚拟主机,我做不到。还有其他解决方案吗?
如果您使用 slim/views package 将 Twig 集成到您正在编写的应用程序中,则可以将该包中的 TwigExtension
添加到您的 Twig 实例并使用 siteUrl
为您的资产发挥作用。这样:
<link rel="stylesheet" href="{{ siteUrl('path/to/asset/style.css') }}">
如果您不使用该包,您可以创建自己的函数来获取应用程序 URL。像这样:
function siteUrl($url) {
$req = Slim::getInstance()->request();
$uri = $req->getUrl() . $req->getRootUri();
return $uri . '/' . ltrim($url, '/');
}
我必须用 PHP 做一个网站,我选择使用 Slim 和 Twig。但是我的上司不希望我使用虚拟主机。因此,当我使用 MAMP 测试网站时遇到问题,因为该网站位于子目录中,例如 http://localhost:8888/subdir
.
当我尝试访问资产时,我不能使用绝对路径,因为它会迫使我写 /subpath/path/to/asset
。但是当我们部署应用程序时,将没有子路径。我怎样才能像有虚拟主机一样对网站进行 root 操作?
你可以在下面看到我的一些代码:
index.php
<?php
require 'vendor/autoload.php';
include 'database.php';
use app\controller\ConfigController;
$app = new \Slim\Slim();
$app->get('/', function () {
echo "accueil";
})->name("root");
$app->group('/Admin', function () use ($app) {
$app->get("/", function (){
$ctrl = new ConfigController();
$ctrl->index();
})->name("indexAdmin");
});
.htaccess(在 localhost:8888/子目录中)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
ConfigController(调用函数)
public function index() {
$loader = new \Twig_Loader_Filesystem("app/view/Admin");
$twig = new \Twig_Environment($loader);
$template = $twig->loadTemplate('Index.twig');
echo $template->render(array(
'css' => "admin.css"
));
}
模板 由 Twig 环境调用
<!doctype html>
<html lang="fr">
<head>
<link rel="stylesheet" type="text/css" href="/app/assets/stylesheets/{{ css }}">
</head>
<body>
[...]
我在Google和Stack Overflow上搜索的时候,大家都说要做虚拟主机,我做不到。还有其他解决方案吗?
如果您使用 slim/views package 将 Twig 集成到您正在编写的应用程序中,则可以将该包中的 TwigExtension
添加到您的 Twig 实例并使用 siteUrl
为您的资产发挥作用。这样:
<link rel="stylesheet" href="{{ siteUrl('path/to/asset/style.css') }}">
如果您不使用该包,您可以创建自己的函数来获取应用程序 URL。像这样:
function siteUrl($url) {
$req = Slim::getInstance()->request();
$uri = $req->getUrl() . $req->getRootUri();
return $uri . '/' . ltrim($url, '/');
}