【问题标题】:Mapping home controller as the default controller in AltoRouter将家庭控制器映射为 AltoRouter 中的默认控制器
【发布时间】:2018-03-29 02:06:35
【问题描述】:

这是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';
    }
}

并将其保存为单独的文件 home_controller.phpapp/controller 目录中它不起作用。

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

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

【问题讨论】:

  • 您当前的类自动加载器不包括app/controller 目录中的类。您需要为该特定目录设置自动加载。你知道怎么做,对吧?

标签: php model-view-controller composer-php router altorouter


【解决方案1】:

您似乎没有使用composer 来安装软件包。这是 PHP 中的标准方式。


1。安装作曲家


2。从命令行调用 Composer

进入项目的根目录,打开命令行并输入:

composer require altorouter/altorouter

您将在包的 Github 页面上的 composer.json 中找到包名称 altorouter/altorouter - here


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

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

<?php

# index.php

require_once __DIR__ . '/vendor/autoload.php';


4。也可以通过 Composer 加载您的控制器

最后一步是告诉作曲家在哪里找到你的课程

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

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

阅读更多关于classmap option in documentation的信息。

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

 composer dump-autoload

应该是这样的。如果您遇到任何麻烦,请告诉我。

【讨论】:

  • 谢谢...我没有按照上面的任何步骤进行操作。我接受您的回答,完成后会回复您。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
  • 2020-06-13
相关资源
最近更新 更多