将家庭控制器映射为 AltoRouter 中的默认控制器
Mapping home controller as the default controller in 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 class 应该是默认控制器。
问题是,当我删除 class home_controller
class home_controller {
public function index() {
echo 'hi from home';
}
}
并将其另存为单独的文件 home_controller.php 在 app/controller 目录中它不起作用。
我知道路由器无法定位 home_controller class 因此不会显示它的内容(如果我直接包含文件 home_controller.php 它再次正常工作)。
我的问题是,如何将位于不同目录中的 home_controller 映射为默认值?
您似乎没有使用 composer 来安装软件包。这是 PHP.
中的标准方式
1。安装作曲家
- Here is manual,取决于你的OS
2。从命令行调用 Composer
转到项目的根目录,打开命令行并键入:
composer require altorouter/altorouter
您将在包的 Github 页面的 composer.json
中找到包名称 altorouter/altorouter
- here.
3。将加载的文件添加到您的 index.php
现在您已经安装了路由器包。下一步是将所有作曲家加载的文件添加到您的应用程序中。只需将 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
应该是这样。如果您遇到任何麻烦,请告诉我哪一点。
这是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 class 应该是默认控制器。
问题是,当我删除 class home_controller
class home_controller {
public function index() {
echo 'hi from home';
}
}
并将其另存为单独的文件 home_controller.php 在 app/controller 目录中它不起作用。
我知道路由器无法定位 home_controller class 因此不会显示它的内容(如果我直接包含文件 home_controller.php 它再次正常工作)。
我的问题是,如何将位于不同目录中的 home_controller 映射为默认值?
您似乎没有使用 composer 来安装软件包。这是 PHP.
中的标准方式1。安装作曲家
- Here is manual,取决于你的OS
2。从命令行调用 Composer
转到项目的根目录,打开命令行并键入:
composer require altorouter/altorouter
您将在包的 Github 页面的 composer.json
中找到包名称 altorouter/altorouter
- here.
3。将加载的文件添加到您的 index.php
现在您已经安装了路由器包。下一步是将所有作曲家加载的文件添加到您的应用程序中。只需将 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
应该是这样。如果您遇到任何麻烦,请告诉我哪一点。