2016-10-26 4 views
1

Я использую Altorouter в базовом PHP-приложении (без фреймворка), но почему-то он не работает. Ниже приведены детали:Altorouter не может выполнять маршруты

index.php

<?php 
error_reporting(E_ALL); 
ini_set('display_errors',1); 
require_once __DIR__ . '/vendor/autoload.php'; 

$router = new AltoRouter(); 

$router->map('GET', '/', function() { 
    include __DIR__ . 'home.php'; 
}); 

print "Done"; 

Он печатает Готово и нет ошибок в журнале PHP.

Htaccess

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . index.php [L] 

Я доступ как `http://localhost/home/myapp/

+1

Если, вероятно, 'включают __DIR__ , '/home.php'; ' – Phil

+0

@Phil все еще, не работает. – Volatil3

+0

@Phil - да, и я бы даже зашел так далеко, чтобы сказать, что вместо этого нужно использовать 'require'. Единственное реальное преимущество, которое я когда-либо находил, - это вернуть массив, включенный в файл. В противном случае запрос будет терпеть неудачу и скажет вам, что вы потеряли косую черту, потому что __DIR__ не добавляет конечную косую черту в путь. – ArtisticPhoenix

ответ

2

Ok я понял вопрос. URL Я хочу получить доступ является:

http://localhost/home/myapp/

Altorouter не знает о корневом URL так BasePath должен быть установлен. это делается как:

$router->setBasePath('/home/myapp');

Обратите внимание, что нет никакого заднего / не следует ставить в setBasePath, потому что мы положим, что в нашей map функции, как, что:

$router->map('GET', '/', 'home.php', 'home'); 
$match = $router->match(); 
if ($match) { 
    require $match['target']; 
} else { 
    header("HTTP/1.0 404 Not Found"); 
    require '404.html'; 
} 
+0

Так что проблема 'setBasePath 'вызывает все эти проблемы? –