AltoRouter - отображение / маршрутизация домашнего класса по умолчанию

Я понял, как вы называете здесь свои контроллеры, но как установить "Home" в качестве контроллера по умолчанию и "index" в качестве действия по умолчанию в AltoRouter

это неправильно но что то типа

$router->map('GET', '/', function($controller, $action) {
    $controller = 'Home';
    $action = 'index';
});

1 ответ

Немного зависит от того, что вы подразумеваете под "действием по умолчанию".

Если вы имеете в виду "как я могу сделать '/' маршрут идти к index() метод на моем HomeController class", тогда будет применяться упрощенная версия связанной проблемы github (и веб-сайта AltoRouter):

$router = new AltoRouter();
$router->setBasePath('/example.com'); 
$router->map('GET','/', 'HomeController#index');
$match = $router->match();

if ($match === false) {
    header($_SERVER["SERVER_PROTOCOL"].' 404 Not Found');
} else {
    list($controller, $action) = explode('#', $match['target']);
    if ( is_callable([$controller, $action]) ) {
        $obj = new $controller();
        call_user_func_array([$obj, $action], [$match['params']]);
    } else {
        // here your routes are wrong.
        // Throw an exception in debug, send a 500 error in production
    }
}

# здесь совершенно произвольно, это просто разделитель, отделяющий имя контроллера от вызываемого метода. Laravel использует @ для аналогичного вида нотации маршрутизатора к контроллеру (т.е. HomeController@index).

Если вы имели в виду "если сомневаетесь, покажите домашнюю страницу как действие по умолчанию", то это выглядело бы примерно так, как указано выше, единственное отличие состояло бы в том, что путь 404 будет простым:

if ($match === false) {
    $obj = new HomeController();
    $obj->index();
} else {
    // etc.
}
Другие вопросы по тегам