Non-default modules cannot be found in the multi-module program of phalcon framework

Source: Internet
Author: User
Tags autoloader
When I access 192.168.0.146test, the displayed page is normal. When I access 192.168.0.146testmanage, ** TestFrontendControllersManageControllerhandlerclasscannotbeloaded ** is displayed. I need to execute TestManageCon... when I access http: // 192.168.0.146/test/, the displayed page is normal.
When I access http: // 192.168.0.146/test/manage
Display ** Test \ Frontend \ Controllers \ ManageController handler class cannot be loaded **
What should I do if I need to execute Test \ Manage \ Controllers \ IndexController?

The project creation process is as follows:

Phalcon project test modules -- enable-webtools
Phalcon DevTools (2.0.7)
Success: Controller "index" was successfully created.

Success: Project "test" was successfully created.

Copy app/frontend-"app/manage
Modify the namespace of the program in app/manage/controllers to Test \ Manage \ Controllers;
Modify app/manage/Module. php


  registerNamespaces(array(            'Test\Manage\Controllers' => __DIR__ . '/controllers/',            'Test\Manage\Models' => __DIR__ . '/models/',        ));        $loader->register();    }    /**     * Registers services related to the module     *     * @param DiInterface $di     */    public function registerServices(DiInterface $di)    {        /**         * Read configuration         */        $config = include APP_PATH . "/apps/manage/config/config.php";        /**         * Setting up the view component         */        $di['view'] = function () {            $view = new View();            $view->setViewsDir(__DIR__ . '/views/');            return $view;        };        /**         * Database connection is created based in the parameters defined in the configuration file         */        $di['db'] = function () use ($config) {            return new DbAdapter($config->toArray());        };    }}

Modify test/config/modules. php


  registerModules(array(    'frontend' => array(        'className' => 'Test\Frontend\Module',        'path' => __DIR__ . '/../apps/frontend/Module.php'    ),    'manage' => array(        'className' => 'Test\Manage\Module',        'path' => __DIR__ . '/../apps/manage/Module.php'    )        ));

Test/config/services. php is not modified


  set('router', function () {    $router = new Router();    $router->setDefaultModule('frontend');    $router->setDefaultNamespace('Test\Frontend\Controllers');    return $router;});/** * The URL component is used to generate all kinds of URLs in the application */$di->set('url', function () {    $url = new UrlResolver();    $url->setBaseUri('/test/');    return $url;});/** * Setting up the view component */$di->setShared('view', function () use ($config) {    $view = new View();    $view->setViewsDir($config->application->viewsDir);    $view->registerEngines(array(        '.volt' => function ($view, $di) use ($config) {            $volt = new VoltEngine($view, $di);            $volt->setOptions(array(                'compiledPath' => $config->application->cacheDir,                'compiledSeparator' => '_'            ));            return $volt;        },        '.phtml' => 'Phalcon\Mvc\View\Engine\Php'    ));    return $view;});/** * Database connection is created based in the parameters defined in the configuration file */$di->set('db', function () use ($config) {    return new DbAdapter($config->database->toArray());});/** * If the configuration specify the use of metadata adapter use it or use memory otherwise */$di->set('modelsMetadata', function () {    return new MetaDataAdapter();});/** * Starts the session the first time some component requests the session service */$di->setShared('session', function () {    $session = new SessionAdapter();    $session->start();    return $session;});/*** Set the default namespace for dispatcher*/$di->setShared('dispatcher', function() use ($di) {    $dispatcher = new Phalcon\Mvc\Dispatcher();    $dispatcher->setDefaultNamespace('Test\Frontend\Controllers');    return $dispatcher;});

Test/config/routes. php


  get("router");foreach ($application->getModules() as $key => $module) {    $namespace = str_replace('Module','Controllers', $module["className"]);    $router->add('/'.$key.'/:params', array(        'namespace' => $namespace,        'module' => $key,        'controller' => 'index',        'action' => 'index',        'params' => 1    ))->setName($key);    $router->add('/'.$key.'/:controller/:params', array(        'namespace' => $namespace,        'module' => $key,        'controller' => 1,        'action' => 'index',        'params' => 2    ));    $router->add('/'.$key.'/:controller/:action/:params', array(        'namespace' => $namespace,        'module' => $key,        'controller' => 1,        'action' => 2,        'params' => 3    ));}

Public/index. php


  handle()->getContent();} catch (Exception $e) {    echo $e->getMessage();}

Reply content:

When I access http: // 192.168.0.146/test/, the displayed page is normal.
When I access http: // 192.168.0.146/test/manage
Display ** Test \ Frontend \ Controllers \ ManageController handler class cannot be loaded **
What should I do if I need to execute Test \ Manage \ Controllers \ IndexController?

The project creation process is as follows:

Phalcon project test modules -- enable-webtools
Phalcon DevTools (2.0.7)
Success: Controller "index" was successfully created.

Success: Project "test" was successfully created.

Copy app/frontend-"app/manage
Modify the namespace of the program in app/manage/controllers to Test \ Manage \ Controllers;
Modify app/manage/Module. php


  registerNamespaces(array(            'Test\Manage\Controllers' => __DIR__ . '/controllers/',            'Test\Manage\Models' => __DIR__ . '/models/',        ));        $loader->register();    }    /**     * Registers services related to the module     *     * @param DiInterface $di     */    public function registerServices(DiInterface $di)    {        /**         * Read configuration         */        $config = include APP_PATH . "/apps/manage/config/config.php";        /**         * Setting up the view component         */        $di['view'] = function () {            $view = new View();            $view->setViewsDir(__DIR__ . '/views/');            return $view;        };        /**         * Database connection is created based in the parameters defined in the configuration file         */        $di['db'] = function () use ($config) {            return new DbAdapter($config->toArray());        };    }}

Modify test/config/modules. php


  registerModules(array(    'frontend' => array(        'className' => 'Test\Frontend\Module',        'path' => __DIR__ . '/../apps/frontend/Module.php'    ),    'manage' => array(        'className' => 'Test\Manage\Module',        'path' => __DIR__ . '/../apps/manage/Module.php'    )        ));

Test/config/services. php is not modified


  set('router', function () {    $router = new Router();    $router->setDefaultModule('frontend');    $router->setDefaultNamespace('Test\Frontend\Controllers');    return $router;});/** * The URL component is used to generate all kinds of URLs in the application */$di->set('url', function () {    $url = new UrlResolver();    $url->setBaseUri('/test/');    return $url;});/** * Setting up the view component */$di->setShared('view', function () use ($config) {    $view = new View();    $view->setViewsDir($config->application->viewsDir);    $view->registerEngines(array(        '.volt' => function ($view, $di) use ($config) {            $volt = new VoltEngine($view, $di);            $volt->setOptions(array(                'compiledPath' => $config->application->cacheDir,                'compiledSeparator' => '_'            ));            return $volt;        },        '.phtml' => 'Phalcon\Mvc\View\Engine\Php'    ));    return $view;});/** * Database connection is created based in the parameters defined in the configuration file */$di->set('db', function () use ($config) {    return new DbAdapter($config->database->toArray());});/** * If the configuration specify the use of metadata adapter use it or use memory otherwise */$di->set('modelsMetadata', function () {    return new MetaDataAdapter();});/** * Starts the session the first time some component requests the session service */$di->setShared('session', function () {    $session = new SessionAdapter();    $session->start();    return $session;});/*** Set the default namespace for dispatcher*/$di->setShared('dispatcher', function() use ($di) {    $dispatcher = new Phalcon\Mvc\Dispatcher();    $dispatcher->setDefaultNamespace('Test\Frontend\Controllers');    return $dispatcher;});

Test/config/routes. php


  get("router");foreach ($application->getModules() as $key => $module) {    $namespace = str_replace('Module','Controllers', $module["className"]);    $router->add('/'.$key.'/:params', array(        'namespace' => $namespace,        'module' => $key,        'controller' => 'index',        'action' => 'index',        'params' => 1    ))->setName($key);    $router->add('/'.$key.'/:controller/:params', array(        'namespace' => $namespace,        'module' => $key,        'controller' => 1,        'action' => 'index',        'params' => 2    ));    $router->add('/'.$key.'/:controller/:action/:params', array(        'namespace' => $namespace,        'module' => $key,        'controller' => 1,        'action' => 2,        'params' => 3    ));}

Public/index. php


  handle()->getContent();} catch (Exception $e) {    echo $e->getMessage();}

Pbulic/index. php
RequireDIR. '/../Config/routes. php'; below

Add $ di-> set ('router ', $ router );


  set('router',$router);    echo $application->handle()->getContent();} catch (Exception $e) {    echo $e->getMessage();}

The information provided by the subject is insufficient. There are several important items in the multi-module settings, such as routes. php and modules in each Module. php, both of which are related to multimodule loading.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.