通过Php AltoRouter路由

8 php routing router routes 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');
}
Run Code Online (Sandbox Code Playgroud)

我在计划文件夹中有一个名为plan.php(显示计划)的文件,我正在尝试的超链接

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

这不起作用.

你能帮我吗?

Paw*_*iel 4

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');
Run Code Online (Sandbox Code Playgroud)

到文件中plan/plan.php添加echo 'testing plan';

另外,请仔细检查您的 .htaccess 文件是否包含

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
Run Code Online (Sandbox Code Playgroud)

另外,如果您设置文件的基本路径,$router->setBasePath('/alto');则应index.php将其放置在该alto目录中,以便您的网址在这种情况下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');
}
Run Code Online (Sandbox Code Playgroud)

那么这样就可以了

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