2009-12-12 4 views
0

J'ai trouvé des réponses qui sont étroitement liées à ce problème, mais je n'arrive toujours pas à le résoudre. Je crois que les gens disent que quelque chose n'est pas correct avec mon chemin d'inclusion, mais j'ai essayé toutes les résolutions que j'ai pu trouver en vain.Erreur fatale: Classe 'Zend_Controller_Action' non trouvée

est ici l'erreur:

Fatal error: Class 'Zend_Controller_Action' not found in /Users/*me*/Sites/*site*/application/controllers/IndexController.php on line 3 

Voici le comprennent des déclarations:

$newIncludePath = array(); 
$newIncludePath[] = '.'; 
$newIncludePath[] = 'include'; 
$newIncludePath[] = get_include_path(); 
$newIncludePath[] = '../library'; 
$newIncludePath[] = '../application/classes/'; 
$newIncludePath[] = '../application/models/'; 
$newIncludePath[] = '../application/models/'; 
$newIncludePath[] = '../application/controllers'; 
$newIncludePath = implode(PATH_SEPARATOR, $newIncludePath); 
set_include_path($newIncludePath); 

require_once 'Zend/Controller/Front.php'; 
require_once 'Zend/Loader.php'; 

Zend_Loader::registerAutoload(); 

Je suis frappais ma tête sur le clavier pendant des heures de récurage les forums. Je suis nouveau à zend et php. Ce truc m'a donné un mal de tête royal. J'ai explicitement ajouté des contrôleurs dans le chemin. Je n'ai aucune idée de ce que je néglige.

BTW, le me et le site sont expurgés des noms pour des raisons de confidentialité.

Je suis éternellement reconnaissant pour une résolution.

mjs-edit:

J'ai remarqué mon inclut étaient un peu bancal. Alors, voici un do-over:

$newIncludePath = array(); 
$newIncludePath[] = '.'; 
$newIncludePath[] = get_include_path(); 
$newIncludePath[] = '../library'; 
$newIncludePath[] = '../application/classes/'; 
$newIncludePath[] = '../application/models/'; 
$newIncludePath[] = '../application/library/'; 
$newIncludePath = implode(PATH_SEPARATOR, $newIncludePath); 
set_include_path($newIncludePath); 

La sortie de var_dump:

string(148) "../application/controllers:.:.:/Applications/MAMP/bin/php5/lib/php:../library:../application/classes/:../application/models/:../application/library/" 

je remarquai que Zend/Controller/Action existe sous ../library. Donc, je ne comprends pas pourquoi l'application ne peut pas le trouver.

Si je lance IndexController de PHPDebug, il retourne

string(170) ".:/Users/me/Sites/site:/Applications/Zend/Zend Studio - 7.1.0/plugins/org.zend.php.framework.resource_7.1.0.v20091101-1523/resources/ZendFramework-1/library/" 
Fatal error: Class 'Zend_Controller_Action' not found in /Users/me/Sites/site/application/controllers/IndexController.php on line 5 
+0

que je suis Je me suis cogné la tête pendant deux jours et j'ai l'impression que je ne suis pas proche d'une solution. J'espère que quelqu'un peut fournir un peu plus de perspicacité que ce que j'ai maintenant. merci. –

Répondre

2

Le comportement par défaut d'un chargeur automatique de Zend_Appilcation est de prendre le nom de la classe

Zend_Controller_Action 

et le convertir dans un chemin

Zend/Controller/Action.php 

puis d'inclure/exiger le fichier nécessaire pour charger la classe.

Ainsi, vous pourriez avoir deux choses différentes qui ne va pas

  1. Votre PHP include_path ne pointe pas vers le dossier de la bibliothèque par défaut Zend et tente d'inclure Zend/Controller/Action.php sont défaillantes.

  2. Le chargeur automatique est pas enregistré correctement

Ainsi, dans votre fichier IndexController.php, ajoutez ce qui suit dans la zone espace de nommage global au-dessus de la déclaration de classe

var_dump(get_include_path()); 

Cette sortie volonté include valeur du chemin. Vérifiez chaque chemin individuel dans votre chemin d'inclusion et assurez-vous que l'ajout de Zend/Controller/Action.php à l'un d'entre eux résout dans le fichier Action.php. Si ce n'est pas le cas, prenez des mesures pour vous assurer qu'un chemin EST là où cela est possible.

(vous le suppose ci-dessus à l'aide d'un Zend_Application qui propre cadre d'application de Zend en fonction de leur propre Zend Framework. Si vous utilisez les composants autonomes il pourrait y avoir d'autres complications)

0

Votre chemins d'inclusion sont par rapport à la racine de l'application, mais le fichier est en cours de chargement à un niveau différent (par exemple. Application/controllers). Ainsi, tous les chemins d'accès ressemblent maintenant à une application/contrôleurs /../ bibliothèque incorrecte.

Je corrige cela en utilisant des chemins absolus dans mon chemin d'inclusion. Par exemple, essayez de changer ../library aux utilisateurs/me/Sites/Site/bibliothèque

+0

Ou vous pouvez utiliser 'realpath (dirname (__ FILE __)." /../ library ")' pour ne pas vous lier à un hôte particulier. – gnarf

+0

J'ai essayé toutes les suggestions sans succès. Où le chemin include est-il défini initialement? Je demande parce que "../application/controllers:" est la première entrée qui est extraite de "get_include_path()". Et PHP Debug signale que zend_controller_action n'y est pas trouvé. Peut-être que quelque chose ne va pas dans un fichier ini quelque part? –

Questions connexes