Отображение домашнего контроллера в качестве контроллера по умолчанию в 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

Это должно быть так. Если у вас возникнут проблемы, дайте мне знать, в какой момент.

Другие вопросы по тегам