ArsenBespalov
@ArsenBespalov
Сам себе разработчик

Как обработать роуты с цифрами в Phalcon?

Такая ситуация, если допустим попытаться открыть страницу по такому вот адресу:

localhost/404

То мы попадаем на стартовую страницу и так с любыми цифрами, т.е. адреса, которые начинаются с цифр всегда приводят на стартовую страницу, хотя не контроллеров, не методов соответствующих нет, обработка несуществующих контроллеров или действий отправляет на 404 страницу, но вот цифровые запросы никогда не отправляет на 404 страницу.

Эту проблему как-то можно решить, кто знает?

Вот роутинг:
$di->set(
    'router',
    function () {
        $router = new Router();

        $router->setDefaultModule('frontend');

        $router->add('/:action', [
            'module' => 'frontend',
            'controller' => 'index',
            'action' => 1,
        ]);

        $router->add('/:action/:params', [
            'module' => 'frontend',
            'controller' => 'index',
            'action' => 1,
            'params' => 2,
        ]);

        $router->add('/:module/:controller/:action/:params', [
            'module'     => 1,
            'controller' => 2,
            'action'     => 3,
            'params'     => 4,
        ]);

        $router->removeExtraSlashes(true);

        return $router;
    }
);


Вот обработчик ошибок в дефолтном модуле:
$dependencyInjector->setShared(
            'dispatcher',
            function () {
                $eventManager = new Manager();

                $eventManager->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' => 'notFound',
                                ]);
                                return false;
                        }
                    }
                );

                $dispatcher = new Dispatcher();

                $dispatcher->setDefaultNamespace('AudioOcean\Frontend\Controllers');
                $dispatcher->setEventsManager($eventManager);

                return $dispatcher;
            }
        );


Вот кстати для наглядности что показывает команда в представлении index:

Y2L4XL5c6ZxD26.pngJ2by1EqHPpMXm6.png
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
ArsenBespalov
@ArsenBespalov Автор вопроса
Сам себе разработчик
Может это только у меня такие проблемы с цифрами в адресе, но она реально меня достала, в результате решение сделал таким не замысловатым:

$eventManager->attach('dispatch', function (Event $event, Dispatcher $dispatcher) {
                    if (!$dispatcher->getActionName()) {
                        $dispatcher->forward([
                            'controller' => 'error',
                            'action' => 'notFound',
                        ]);
                    }
                });


Спасибо 1 1 за помощь в решении моей проблемы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы