2012-01-29 16 views
7

Ho un problema con la configurazione dell'applicazione Zend Framework sul server live. Funziona bene su localhost.Zend Framework - "Controller specificato non valido"

mio indirizzo server di vivere dove ho la domanda è:

http://www.domainname.com/new/

Tutto è OK fino a quando provo ad accedere al mio modulo di amministrazione a URL http://www.domainname.com/new/admin, allora ottengo l'errore qui sotto.

Qualche idea?

An error occurred 
Page not found 
Exception information: 

Message: Invalid controller specified (index) 
Stack trace: 

#0 /data/www/www.domainname.com/public_html/new/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#1 /data/www/www.domainname.com/public_html/new/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() 
#2 /data/www/www.domainname.com/public_html/new/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() 
#3 /data/www/www.domainname.com/public_html/new/index.php(27): Zend_Application->run() 
#4 {main} 

Request Parameters: 

array (
    'module' => 'admin', 
    'controller' => 'index', 
    'action' => 'index', 
) 

percorsi di inclusione in index.php siano impostate correttamente (biblioteca e tutto il resto viene caricato), il file index.php qui:

// 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')); 

set_include_path('library'); 

// Define upload path 
if (!defined('UPLOAD_PATH')) 
     define('UPLOAD_PATH', realpath(dirname(__FILE__)) . '/upload/'); 

/** 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(); 

bootstrap.php di file:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initDoctype(){ 
     $this->bootstrap('view'); 
     $view = $this->getResource('view'); 
     $view->doctype('XHTML1_STRICT'); 
    } 

    protected function _initTimeZone(){ 
     $date = $this->getOption('date'); 
     date_default_timezone_set($date['timezone']); 
    } 

    protected function _initLayoutHelper(){ 
     $this->bootstrap('frontController'); 
     Zend_Controller_Action_HelperBroker::addHelper(
      new Jakub_Controller_Action_Helper_LayoutLoader()); 
    } 

    protected function _initFlashMessenger(){ 
     $flashMessenger = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger'); 

     if ($flashMessenger->hasMessages()) { 
      $view = $this->getResource('view'); 
      $view->messages = $flashMessenger->getMessages(); 
     } 
    } 

    protected function _initAuth(){ 
     $this->bootstrap('session'); 
     $auth = Zend_Auth::getInstance(); 
     if ($auth->hasIdentity()) { 
      $view = $this->getResource('view'); 
      $view->user = $auth->getIdentity(); 
     } 

     return $auth; 
    } 
} 

File Application.ini:

[production] 
webhost = "http://www.domainname.com/new" 

phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

includePaths.library = APPLICATION_PATH "/../library" 

date.timezone = "Europe/Bratislava" 

bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 

appnamespace = "Application" 
autoloadernamespaces.nette = "Nette_" 
autoloadernamespaces.jakub = "Jakub_" 

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 

resources.view[] = 
resources.view.helperPath.App_View_Helper = APPLICATION_PATH "/views/helpers" 

resources.modules[] = 

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

admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/scripts/base/" 
admin.resources.layout.layout = default 

[staging : production] 

[testing : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

[development : production] 
webhost = "http://domainname" 

phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

risposta

5

Nella cartella del modulo di amministrazione, controlla che IndexController.php esista nella sottodirectory "controller".

Se lo fa, quindi aprire IndexController.php e assicurarsi che la dichiarazione di classe effettivamente dichiarare la classe "IndexController" (una copia comune + incolla trabocchetto)

Modifica: Il nome del controller dovrebbe essere Admin_IndexController, non solo IndexController

+0

Tutto nel controller va bene, esiste, il nome è "classe Admin_IndexController". –

+0

E il nome del file è indexController.php, l'applicazione funziona bene su localhost, quindi il problema sarà probabilmente in percorsi o qualche configurazione. –

+0

Il nome della classe deve essere IndexController, non Admin_IndexController. – akond

0

prova nel vostro Application.ini:

resources.frontController.moduleControllerDirectoryName = "controllers" 

ho anche questa nel mio Application.ini per il mio modulo di app:

resources.frontController.params.prefixDefaultModule = "" 

inoltre ogni modulo ha il proprio bootstrap?

<?php 

class Admin_Bootstrap extends Zend_Application_Module_Bootstrap { 
    //put your code here 
} 
0

stavo usando un controller authetication mio collega preparato e ho avuto lo stesso problema, e ho trovato il problema nel reindirizzamento del controller.

if (!$this->_acl->isAllowed(Zend_Registry::get('user_role'), $module . ':' . $controller, $action)) { 
$request->setModuleName('default')->setControllerName('authentication')->setActionName('login');} 

controllate dopo questo in fondo se si è connessi e se si dispone dei diritti di accesso per andare al controller specificato, e se no, vi reindirizza a (in questo caso) default/authenticaion/index Purtroppo la i parametri di reindirizzamento non vengono visualizzati nel messaggio di errore. Mi sono reso conto che non ho il controller che sto reindirizzando per essere pronto, quindi in alcuni casi potrebbe essere lo stesso problema.

Problemi correlati