Отображение домашнего контроллера в качестве контроллера по умолчанию в 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';
}
}
и сохранить его как отдельный файл home_controller.php в директории app / controller, он не работает.
Я понимаю, что маршрутизатор не может найти класс home_controller, поэтому не будет показывать его содержимое (если я напрямую включу файл home_controller.php, он снова будет работать как обычно).
Мой вопрос, как вы сопоставляете home_controller по умолчанию, который находится в другом каталоге?
1 ответ
Похоже, вы не используете composer для установки пакета. Это стандартный способ в PHP.
1. Установите Composer
- Вот руководство, в зависимости от вашей ОС
2. Вызовите Composer из командной строки
Перейдите в корневой каталог вашего проекта, откройте командную строку и введите:
composer require altorouter/altorouter
Вы найдете название пакета altorouter/altorouter
в composer.json
на странице пакета Github - здесь.
3. Добавить загруженные файлы в ваш index.php
Теперь вы установили пакет маршрутизатора. Следующий шаг - добавление всех загруженных композитором файлов в ваше приложение. Просто замени include 'library/altorouter.php';
со следующим:
<?php
# index.php
require_once __DIR__ . '/vendor/autoload.php';
4. Загрузите свои контроллеры также по Composer
Последний шаг - скажите композитору, где найти ваши классы.
открыто composer.json
и добавьте следующий раздел:
{
"autolaod": {
"classmap": ["app"]
}
}
Узнайте больше о classmap
вариант в документации.
Обновлять /vendor/autoload.php
с этой опцией просто вызовите из командной строки:
composer dump-autoload
Это должно быть так. Если у вас возникнут проблемы, дайте мне знать, в какой момент.