2015-09-25 2 views
1

Я должен сделать сайт с PHP, и я решил использовать Slim и Twig. Но мои начальники не хотят, чтобы я использовал виртуальный хост. Поэтому у меня возникают проблемы, когда я тестирую сайт с помощью MAMP, потому что сайт находится в подкаталоге, например http://localhost:8888/subdir.Как получить корневой URL-адрес для Slim-приложения в поддире?

Когда я пытаюсь получить доступ к активу, я не могу использовать абсолютный путь, потому что это заставит меня написать /subpath/path/to/asset. Но когда мы будем развертывать приложение, не будет субпатов. Как я могу корневать веб-сайт, как если бы был виртуальный хост?

Вы можете увидеть некоторые из моего кода ниже:

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 (в локальном хосте: 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, все говорили, чтобы сделать виртуальный хост, но я не могу. Будет ли другое решение?

+0

Эй @ Аманитет, добро пожаловать в С.О. Используете ли вы пакет slim/views для интеграции Twig в приложение? –

+0

Эй! Ni i dont –

ответ

0

Если вы используете 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, '/'); 
} 
+0

Спасибо ypu vert много! Я попробую thqt в понедельник (у меня нет доступа к проекту в конце недели) –

+0

Thaks много! это сработало ! –

Смежные вопросы