Маршрутизация через Php AltoRouter

Я пытаюсь использовать роутер (AltoRouter) в первый раз и не могу вызвать какую-либо страницу.

Структура веб-папок

введите описание изображения здесь
Код

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 (план отображения) в папке плана и гиперссылка, которую я пытаюсь

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

который не работает.

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

8

Решение

Вы не можете вызвать 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>
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]