2016-07-01 5 views
7

Я пытаюсь использовать маршрутизатор (AltoRouter) в первый раз и не могу позвонить на любую страницу.Маршрутизация через Php AltoRouter

структура веб-папка

enter image description here Кодекс

Index.php

require 'lib/AltoRouter.php'; 

$router = new AltoRouter(); 
$router->setBasePath('/alto'); 
$router->map('GET|POST','/', 'home#index', 'home'); 
$router->map('GET|POST','/', 'display.php', 'display'); 
$router->map('GET','/plan/', 'plan.php', 'plan'); 
$router->map('GET','/users/', array('c' => 'UserController', 'a' => 'ListAction')); 
$router->map('GET','/users/[i:id]', 'users#show', 'users_show'); 
$router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do'); 
// match current request 
$match = $router->match(); 

if($match && is_callable($match['target'])) { 
    call_user_func_array($match['target'], $match['params']); 
} else { 
    // no route was matched 
    header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found'); 
} 

У меня есть файл с именем plan.php (план дисплея) в папке плана и гиперссылка, что я am is is

<a href="<?php echo $router->generate('plan'); ?>">Plan <?php echo $router->generate('plan'); ?></a> 

whi ch не работает.

Вы можете помочь?

ответ

2

Вы не можете позвонить plan.php пропускания plan.php в качестве аргумента функции match

Проверьте примеры на http://altorouter.com/usage/processing-requests.html

Если вы хотите использовать контент из plan.php

вы должны использовать map в следующий формат

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

к файлу plan/plan.php добавить echo 'testing plan';

Кроме того, дважды проверьте, что ваш файл .htaccess содержит

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

Кроме того, если установить базовый путь с $router->setBasePath('/alto'); ваши index.php файлы должны быть помещены в каталог alto так что ваш URL будет в том, что случай http://example.com/alto/index.php

Рабочий пример:

require 'lib/AltoRouter.php'; 

$router = new AltoRouter(); 
$router->setBasePath('/alto'); 

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

// match current request 
$match = $router->match(); 

if($match && is_callable($match['target'])) { 
    call_user_func_array($match['target'], $match['params']); 
} else { 
    // no route was matched 
    header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found'); 
} 

, тогда это будет работать нормально

<a href="<?php echo $router->generate('plan'); ?>">Plan <?php echo $router->generate('plan'); ?></a> 
+0

У меня есть домашняя страница, но я не могу назвать plan.php. На главной странице есть ссылка на план Plan, который я изменил на Plan generate('plan'); ?>. –

+0

home # index это работает, потому что, скорее всего, у вас есть класс Home с индексом метода в нем. $ router-> map ('GET', '/ plan /', function() { требуется __DIR__. '/plan/plan.php'; }, 'plan'); Когда маршрут согласован, эта функция выше включает файл plan.php. Альтернативу вы можете создать класс 'plan' с индексом метода, а затем вы сможете передать индекс плана # так же, как и для домашней страницы. –