Как мне установить контроллер по умолчанию а также действие по умолчанию в PhalconPHP?
Я использовал этот код без успеха:
$di->set('router', function () {
$router = new \Phalcon\Mvc\Router();
$router->notFound(['controller' => 'Index', 'action'=> 'index']);
$router->setDefaultController('Bookmarks');
$router->setDefaultAction('index');
return $router;
});
Может произойти сбой, потому что вы не установили пространство имен по умолчанию для контроллера. У меня также были некоторые проблемы с именем контроллера, когда я переключился с Windows на Linux. Использование имени в нижнем регистре, казалось, решило проблему.
$router = new Phalcon\Mvc\Router\Annotations(false);
$router->removeExtraSlashes(true);
$router->setDefaultNamespace('App\Controllers\\');
$router->setDefaultController('index');
$router->setDefaultAction('index');
/**
* Standard MVC routes
*/
$router->add('/', []);
$router->add(
'/:controller',
[
'controller' => 1
]
);
$router->add(
'/:controller/:action/:params',
[
'controller' => 1,
'action' => 2,
'params' => 3
]
);
return $router;
Кроме того, метод notFound не работал для меня. Поэтому я подключил слушателя к eventsManager для решения этой проблемы.
$di->set('dispatcher', function () use ($di) {
// ERROR 404 - Page not found
$evManager = $di->getShared('eventsManager');
$evManager->attach(
"dispatch:beforeException",
function ($event, $dispatcher, $exception) {
switch ($exception->getCode()) {
case Dispatcher::EXCEPTION_HANDLER_NOT_FOUND:
case Dispatcher::EXCEPTION_ACTION_NOT_FOUND:
$dispatcher->forward(
[
'controller' => 'error',
'action' => 'show404'
]
);
return false;
}
}
);
$dispatcher = new Dispatcher();
$dispatcher->setEventsManager($evManager);
return $dispatcher;
}, true);
Других решений пока нет …