Invalid controller specified - Zend Framework

3.5k Views Asked by At

Yeah I have already visited the forums & tried to solve the bug. PLease I really need a little help here.

Whenever I am trying to access the http://domain.com/dashboard/index/index/

I receive an error Invalid controller class ("Dashboard_IndexController")

There are two modules in my application Main (default) & Dashboard

My Application.ini

[bootstrap]
autoloadernamespaces[] = "Zend_"
autoloadernamespaces[] = "WOW_"

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"

bootstrap.class = "Bootstrap"

resources.frontcontroller.moduledirectory = APPLICATION_PATH"/modules"
resources.frontcontroller.defaultmodule = "main"
resources.frontcontroller.params.prefixDefaultModule = true

resources.frontController.params.displayExceptions = 0
resources.frontcontroller.throwerrors = false

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.layout.layout =  "main"

resources.view[] =

resources.modules[] =

Bootstrap.php

<?php

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {

        protected $_logger;


        protected $_resourceLoader;


        public $frontController;

        protected function _initLogging()
        {
             $this->bootstrap('frontController');
    //       $this->frontController = $this->getResource('frontController');
            $logger = new Zend_Log();

            $writer = 'production' == $this->getEnvironment() ?
                new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../data/logs/app.log') :
                new Zend_Log_Writer_Firebug();
            $logger->addWriter($writer);


                $filter = new Zend_Log_Filter_Priority(Zend_Log::CRIT);
                $logger->addFilter($filter);


            $this->_logger = $logger;
            Zend_Registry::set('log', $logger);
        }
        protected function _initDoctype()
        {
            $this->bootstrap('view');
            $view = $this->getResource('view');
            $view->doctype('XHTML1_STRICT');
        }


        protected function _initDbProfiler()
        {
            $this->_logger->info('Bootstrap ' . __METHOD__);

            if ('production' !== $this->getEnvironment()) {
                $this->bootstrap('db');
                $profiler = new Zend_Db_Profiler_Firebug('All DB Queries');
                $profiler->setEnabled(true);
                $this->getPluginResource('db')->getDbAdapter()->setProfiler($profiler);
            }
        }


        protected function _initConfig()
        {
            $this->_logger->info('Bootstrap ' . __METHOD__);
            Zend_Registry::set('config', $this->getOptions());
        }


        protected function _initRoutes()
        {

            $this->_logger->info('Bootstrap ' . __METHOD__);
            $this->bootstrap('frontController');

            $router = $this->frontController->getRouter();

            // Admin context route
            $route = new Zend_Controller_Router_Route(
                'dashboard',
                array(
                    'action'     => 'index',
                    'controller' => 'index',
                    'module'     => 'dashboard',
                    'isAdmin'    => true
                )
            );

            $router->addRoute('dashboard', $route);


        }


        protected function _initDefaultModuleAutoloader()
        {
            $this->_logger->info('Bootstrap ' . __METHOD__);

            $this->_resourceLoader = new Zend_Application_Module_Autoloader(array(
                'namespace' => 'Main',
                'basePath'  => APPLICATION_PATH . '/modules/main',
            ));
            $this->_resourceLoader->addResourceTypes(array(
                'modelResource' => array(
                  'path'      => 'models/resources',
                  'namespace' => 'Resource',
                ),

                'form' => array(
                        'path' => 'forms',
                        'namespace' => 'Form',
                   ),

                'service' => array(
                        'path' => 'services',
                        'namespace' => 'Service',
                        ),

            ));
            /*
             $this->frontController->setControllerDirectory(array(
                    'default' => APPLICATION_PATH .'/modules/main/controllers',
                    'dashboard' => APPLICATION_PATH .'/modules/dashboard/controllers',

            ));
              yeah I tried this too....
            */

        }
        /**
         * function autoloads the different modules 
         */

        protected function _initModuleLoader()
        {
            $this->_logger->info('Bootstrap ' . __METHOD__);

            $this->_resourceLoader = new Zend_Application_Module_Autoloader(array(
                'namespace' => 'Dashboard',
                'basePath'  => APPLICATION_PATH . '/modules/dashboard',
            ));
            $this->_resourceLoader->addResourceTypes(array(
                'modelResource' => array(
                  'path'      => 'models/resources',
                  'namespace' => 'Resource',
                ),

                /*
                'form' => array(
                        'path' => 'form',
                        'namespace' => 'Form',
                   ),

                'service' => array(
                        'path' => 'services',
                        'namespace' => 'Service',
                        ),
               */
            ));

        }


         /**
         * Add Controller Action Helpers
         */
        protected function _initActionHelpers()
        {
            $this->_logger->info('Bootstrap ' . __METHOD__);
           // Zend_Controller_Action_HelperBroker::addHelper(new WOW_Controller_Helper_Acl());
           // Zend_Controller_Action_HelperBroker::addHelper(new SF_Controller_Helper_RedirectCommon());
            // Zend_Controller_Action_HelperBroker::addHelper(new SF_Controller_Helper_Service());
        }

    }

Any Idea. Thanks for ur support

Ok Guys I took care of that. That some path problem at loading time

2

There are 2 best solutions below

0
On

You had specified Dashboard namespace in:

    $this->_resourceLoader = new Zend_Application_Module_Autoloader(array(
        'namespace' => 'Dashboard',
        'basePath'  => APPLICATION_PATH . '/modules/dashboard',
    ));

So it will append Dashboard to ALL classes you try to call. So change namespace to empty string and leave only one Zend_Application_Module_Autoloader call. I'm doing it like the following:

protected function _initModule() {
    $loader = new Zend_Application_Module_Autoloader(array(
        'namespace' => '',
        'basePath' => APPLICATION_PATH,
    ));
    return $loader;
}

And that's it!

0
On

Or you can do it within an ini file.

;custom name space

autoloaderNamespaces[] = "Zfcms_"

autoloaderNamespaces[] = "App_"

autoloaderNamespaces[] = "Custom_"

index.php:

// Define path to application directory

defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(FILE) . '/../application'));

// Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), )));

/** Zend_Application */ require_once 'Zend/Application.php';

// Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();