Как решит проблемму Phalcon Router Service router cannot be resolved, при мультимодульной структуре проекта?

Привет!
Хотел написать модульнный сайтик на Phalcon.
Набросал каркас, все работает кроме Router'а.

Вот такая структура

  • app
    • Cache
    • Config
    • Core
    • Modules
      • index
        • Conrollers
        • Models
        • Views
        • Module.php
        • Routes.php

    • Plugins
    • Views
    • Boorstrap.php

  • public
    • index.php


В каждом модуле есть Routes.php в его метод "init" передается параметром экземпляр обьекта BaseRoute который наследуется от Phalcon\Mvc\Router.
По началу выкидывало ошибку только в том случае когда я пытался добавить группу маршрутов, сейчас ошибку выбивает каждый раз если существует фаил Routes.php в папке модуля.
Вот текст ошибки:
Fatal error:  Uncaught exception 'Phalcon\Di\Exception' with message 'Service 'router' cannot be resolved' in C:\OpenServer\domains\Vtransfer.app\app\Boorstrap.php:262
Stack trace:
#0 [internal function]: Phalcon\Di\Service->resolve(NULL, Object(Phalcon\Di\FactoryDefault))
#1 [internal function]: Phalcon\Di->get('router', NULL)
#2 [internal function]: Phalcon\Di->getShared('router')
#3 C:\OpenServer\domains\Vtransfer.app\app\Boorstrap.php(262): Phalcon\Di->offsetGet('router')
#4 C:\OpenServer\domains\Vtransfer.app\app\Boorstrap.php(113): VTransfer\Bootstrap->dispatch(Object(Phalcon\Di\FactoryDefault))
#5 C:\OpenServer\domains\Vtransfer.app\public\index.php(20): VTransfer\Bootstrap->run()
#6 {main}
  thrown in C:\OpenServer\domains\Vtransfer.app\app\Boorstrap.php on line 262


на 262 строке функция которая вызывается при старте:
private function dispatch($di)
    {
        $router = $di['router'];

        $router->handle();

        $view = $di['view'];

        $dispatcher = $di['dispatcher'];

        $response = $di['response'];

        $dispatcher->setModuleName($router->getModuleName());
        $dispatcher->setControllerName($router->getControllerName());
        $dispatcher->setActionName($router->getActionName());
        $dispatcher->setParams($router->getParams());

        $moduleName = $this->camelize($router->getModuleName());

        $ModuleClassName = $moduleName . '\Module';

        if (class_exists($ModuleClassName))
        {
            $module = new $ModuleClassName;
            $module->registerAutoloaders();
            $module->registerServices($di);
        }

        $view->start();

        if (true)
        {
            $debug = new \Phalcon\Debug();
            $debug->listen();

            $dispatcher->dispatch();
        }
        else
        {
            try {
                $dispatcher->dispatch();
            } catch (\Phalcon\Exception $e) {
                // Errors catching

                $view->setViewsDir(__DIR__ . '/modules/Index/views/');
                $view->setPartialsDir('');
                $view->e = $e;

                if ($e instanceof \Phalcon\Mvc\Dispatcher\Exception) {
                    $response->setHeader(404, 'Not Found');
                    $view->partial('error/error404');
                } else {
                    $response->setHeader(503, 'Service Unavailable');
                    $view->partial('error/error503');
                }
                $response->sendHeaders();
                echo $response->getContent();
                return;

            }
        }

        $view->render(
            $dispatcher->getControllerName(),
            $dispatcher->getActionName(),
            $dispatcher->getParams()
        );

        $view->finish();

        $response = $di['response'];

        $response->sendHeaders();

        echo $response->getContent();
    }

Вот BaseRouter:
use Phalcon\Mvc\Router;

class BaseRouter extends Router
{

    public function __construct()
    {
        parent::__construct();

        $this->setDefaultModule('index');
        $this->setDefaultController('index');
        $this->setDefaultAction('index');

        $this->add('/:module/:controller/:action/:params', array(
            'module' => 1,
            'controller' => 2,
            'action' => 3,
            'params' => 4
        ))->setName('default');

        $this->add('/:module/:controller', array(
            'module' => 1,
            'controller' => 2,
            'action' => 'index',
        ))->setName('default_action');

        $this->add('/:module', array(
            'module' => 1,
            'controller' => 'index',
            'action' => 'index',
        ))->setName('default_controller');


        $this->removeExtraSlashes(true);
    }

    /**
     * @param $group \Phalcon\Mvc\Router\Group
     */
    public function addGroup($group)
    {
        $this->mount($group);
    }
}


А вот Routes.php который в папке с модулем:
use Phalcon\Mvc\Router\Group as Group;

class Routes
{

    /**
     * @param $router \Phalcon\Mvc\Router
     * @return mixed
     */
    public function init($router)
    {
        /*
        $index = new Group(array(
            'module' => 'admin',
            'controller' => 'index'
        ));

        $index->setPrefix('/admin');

        $index->add('/admin', array(
            'controller' => 'index',
            'action' => 'index'
        ));

        $index->add('/save', array(
            'controller' => 'users'
            'action' => 'save'
        ));

        $index->add('/edit/user/{id}', array(
            'controller' => 'users'
            'action' => 'edit'
        ));

        // Добавление группы в общие правила маршрутизации
        $router->mount($index);
        */
    }

}
  • Вопрос задан
  • 1071 просмотр
Решения вопроса 1
KorsaR-ZN
@KorsaR-ZN
Какая версии фрейма?
А вообще такая ошибка возникает, когда у тебя в DI контейнере роутер не правильно зарегистрирован, например класс не существует.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы