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.
}