将主控制器映射为AltoRouter中的默认控制器



这是index.php

<?php
include 'library/altorouter.php';
$router = new AltoRouter();
$router->setBasePath('/AltoRouter'); 
$router->map('GET','/', 'home_controller#index', 'home');
$router->map('GET','/content/[:parent]/?[:child]?', 'content_controller#display_item', 'content');
$match = $router->match();
// not sure if code after this comment  is the best way to handle matched routes
list( $controller, $action ) = explode( '#', $match['target'] );
if ( is_callable(array($controller, $action)) ) {
$obj = new $controller();
var_dump($obj);
call_user_func_array(array($obj,$action), array($match['params']));
} else if ($match['target']==''){
echo 'Error: no route was matched'; 
} else {
echo 'Error: can not call '.$controller.'#'.$action; 
}
// content_controller class file is autoloaded 
class home_controller {
public function index() {
echo 'hi from home';
}
}

而且效果很好。home_controller类应该是默认的控制器。

问题是,当我删除类home_controller 时

class home_controller {
public function index() {
echo 'hi from home';
}
}

并将其保存为app/controllerdirectroy中的seprate文件home_controller.php

我知道路由器无法定位home_controller类,因此不会显示其内容(如果我直接包含文件home_controler.php,它将再次正常工作)。

我的问题是,如何将home_controller映射为默认值,它位于不同的目录中?

看起来您没有使用composer来安装包。这是PHP中的标准方式。


1.安装Composer

  • 这是手册,具体取决于您的操作系统


2.从命令行调用Composer

转到项目的根目录,打开命令行并键入:

composer require altorouter/altorouter

你可以在包的Github页面上的composer.json中找到包名称altorouter/altorouter


3.将加载的文件添加到index.php

现在您已经安装了路由器包。下一步是将所有composer加载的文件添加到应用程序中。只需将include 'library/altorouter.php';替换为以下内容:

<?php
# index.php
require_once __DIR__ . '/vendor/autoload.php';


4.也可以通过Composer加载控制器

最后一步是告诉composer在哪里找到您的类

打开composer.json并添加以下部分:

{
"autolaod": {
"classmap": ["app"]
}
}

阅读文档中有关classmap选项的更多信息。

要使用此选项更新/vendor/autoload.php,只需从命令行调用:

composer dump-autoload

应该是这样。如果你遇到任何麻烦,请告诉我哪一点。

相关内容

  • 没有找到相关文章

最新更新