通过 Php AltoRouter 路由
Routing via Php AltoRouter
我是第一次尝试使用路由器 (AltoRouter),但无法调用任何页面。
Web 文件夹结构
代码
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>
这不起作用。
你能帮忙吗?
您不能通过将 plan.php
作为参数传递给 match
函数来调用 plan.php
查看 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>
我是第一次尝试使用路由器 (AltoRouter),但无法调用任何页面。
Web 文件夹结构
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>
这不起作用。
你能帮忙吗?
您不能通过将 plan.php
作为参数传递给 match
函数来调用 plan.php
查看 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>