6
votes

Impossible d'appeler la même méthode statique de la méthode identique de la même classe

J'ai ce contrôleur d'erreur dans My Condicateur 2.1.0 Application:

Fatal error: Class 'Main' not found in /var/www/MYApplicationName/application/controllers/error.php on line 22


6 commentaires

Le fichier MainController est-il inclus? L'erreur signifie qu'il ne peut pas trouver la classe, souvent parce que le fichier de classe n'est pas inclus dans le script.


C'est toute la classe d'erreur. Aucun code supplémentaire n'est dans la méthode Index (). Comment cela est-il possible si ces deux sont les mêmes mais on ne peut pas appeler ce que l'autre peut? Ou est une méthode index () une spéciale? et oui, je sais comprendre quelque chose, mais ma question est de savoir comment est-il possible que l'index () fonctionne ???


Le Codedigniter Place Application / Contrôleurs / Contrôleurs / Main.PHP


C'est vraiment un comportement intriguant, il ne devrait y avoir aucune différence pour le chargeur de classe CI (mais cela est apparemment). Puis-je suggérer l'inverse: mettre en œuvre votre menu comme aide d'affichage?


HMM: D Vous voulez dire toute la fonction ou comment? Je demandais même cela une fois ici: codereview.stackexchange.com/questions/11277/...


Devez-vous appeler le constructeur de parents à Main?


4 Réponses :


1
votes

Les fonctions d'appel d'un autre contrôleur pausent MVC et vous met dans le domaine HMVC.

Veuillez consulter Ce fil , ainsi que Extensions modulaires (HMVC) Plugin Si vous avez vraiment besoin de le faire.


1 commentaires

Bon sujet, merci. Je pense avoir une réponse à ma vieille question à cette question: codereview.stackexchange.com/questions/11277/...



1
votes

Pourquoi ne créez-vous pas mon_controller qui étend le CI_Controller où vous mettez votre code réutilisable?


0 commentaires

1
votes

En fait, vous vous trompez. Votre code «index» ne fonctionne pas non plus.

Je viens de coller tout votre code ci-dessus dans une version propre de CI 2.1.2 et la fonction Index renvoie également la même erreur.

Alors, peut-être que votre ordinateur a quelque chose de caché ou que vous avez un autre code ailleurs qui vous fait penser que cela fonctionne. Mais cela ne fonctionne pas.

Quoi qu'il en soit - la question réelle est pourquoi essayez-vous d'appeler un contrôleur d'un autre contrôleur? Ce n'est pas une bonne approche MVC. Votre fonction "_menu ()" doit être située dans un bibliothèque - c'est là qu'il appartient .

ou mettre le code _menu () dans "my_controller" et que les deux contrôleurs étendent My_Controller .

ou mettre le code _menu () dans un Helper .

Fondamentalement, il y a trois meilleurs moyens pour que vous puissiez aborder cela.


1 commentaires

Meilleure réponse jusqu'à présent, je le vérifie, peut-être que la mise en cache était la raison ... aussi merci pour les suggestions, j'ai déjà mis le menu dans un modèle.



1
votes

Basé sur la réponse de @ Theshiftexchange, j'ai pu retrouver qu'un réglage de route a causé ce comportement. Mon config / routtes.php ressemble à ceci: xxx

donc, lorsque j'ai apporté une demande à www.example.com/nonexistent-url Ceci est servi par le contrôleur principal , puis CI remarqua qu'il n'y a pas de méthode comme celle-ci, il a donc couru erreur / index aussi, mais le principal Le contrôleur a déjà été chargé d'ici là.

L'autre méthode Facebook a été redirigé à partir d'une méthode existante de Main uniquement, par exemple Galerie , de cette façon, c'est comme si je suis allé à l'URL www.example.com/error/facebook , donc le contrôleur principal n'est pas chargé, car seulement erreur / facebook est demandé. Si j'appelle www.example.com/error/index il fonctionne de la même manière, car dans ce cas, le contrôleur principal n'est pas chargé, seulement l'erreur .

(la prime va à @theshiftexchange, car sa réponse était la plus précise et m'a fourni la meilleure information pour suivre le problème. Merci!
L'une de mes redirections n'a jamais été atteinte, ce que j'ai appris appelait la page d'erreur / index.)


0 commentaires