Codeigniter MY_Controller: est-il seulement possible d'étendre core une fois?
J'ai étendu la base à l'aide de la MY_Controller comme décrit CI dans la documentation.
De cette façon, je peux mettre des fonctions (c'est à dire, auth vérifier) dans le constructeur de MY_Controller donc, il est toujours avant les méthodes de mes autres contrôleurs.
Mon problème maintenant est que certaines parties de mon webapp sont ouvertes (c'est à dire, ne nécessitent pas de connexion) et d'autres nécessitent de connexion.
Par conséquent, je ne peux pas étendre à TOUS mes contrôleurs de MY_Controller (qui contient une auth de la fonction de contrôle).
Je me demandais si il serait possible d'étendre le noyau de façon à avoir, dire, LOG_Controller et NOLOG_Controller.
Ensuite, les contrôleurs qui nécessitent une connexion étendre à partir de LOG_Controller --- et les contrôleurs qui ne nécessitent pas de connexion s'étendent de NOLOG_Controller.
Est-ce possible? (ou est-il mauvais?)
Il semble config/config.php il permet seulement un extension du coeur de préfixe, donc je suis pas sûr que c'est possible.
Laissez-moi savoir ce que vous en pensez ou si il ya une meilleure façon de le faire. Merci.
OriginalL'auteur pepe | 2011-11-04
Vous devez vous connecter pour publier un commentaire.
Ont un coup d'oeil à cet article http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY - C'est exactement ce que vous cherchez.
L'air propre, mais je ne pouvais pas le faire fonctionner dans mon installation. Je suis probablement sur une autre version
Cela fait 4 ans et que le site est de travailler. Évitez juste de mettre des liens et aussi d'accepter les réponses qui contiennent uniquement des liens.
OriginalL'auteur John
J'utilise l'astuce suivante. Définir l'ensemble de votre base de contrôleurs My_Controller.php:
Ce fait tous les contrôleurs disponibles plus tard dans vos contrôleurs. Juste éviter de faire de la base de contrôleurs trop gras.
Aussi, vous pouvez consulter cet exemple: https://github.com/aquilax/novigeroi2/blob/master/application/core/AQX_Controller.php
C'est exactement ce que je fais. Il fonctionne comme un charme. J'ai un peu différents cas d'utilisation. Dans mon exemple, j'ai MY_Controller faire quelques trucs de base dont j'ai besoin (comme l'ensemble des layouts/modèles). Ensuite, j'ai un "Secure_Controller" qui hérite de MY_Controller. À partir de là, j'ai contrôleurs différents pour les différentes zones/sections de mon site. Changer facilement d'authentification, mises en page, et plus encore. La "graisse" contrôleurs affecter les performances un peu, mais je ne peux pas imaginer que tu fais quelque chose de fou dans ces contrôleurs. Juste le réglage de base les trucs que vous auriez eu à faire de toute façon.
MY_Controller.php est chargé sur chaque demande, c'est pourquoi le garder slim est une bonne idée.
tx aquilaX +1 pour le concept - j'ai choisi de répondre à l'un des liens vers un guide de nice à partir de Phil Esturgeon sur ce - Phil dit dans les commentaires de cet article, et que votre approche fonctionne, mais peut gonfler inutilement si l'on n'est pas prudent de garder le contrôleur skinny
OriginalL'auteur AquilaX
Puisque vous n'avez pas publié le code source, imaginons que votre
MY_Controller
ressemble à l'exemple suivant:Chemin d'accès du fichier: application/core/MY_Controller.php
Votre "protégé" contrôleurs de prolonger celui-là et hériter de méthodes, comme suit:
Chemin d'accès du fichier: application/controllers/Secure.php
Vous souhaitez autoriser à la fois certains protégés et certains non protégés contrôleurs dans votre application. Dans l'ordre pour vous de garder ces contrôleurs protégés, ils doivent étendre
MY_Controller
et en hériter du__construct()
méthode. Pour tout contrôleur qui n'a pas besoin d'hériter de cette__construct()
méthode, il vous suffit de prolonger laCI_Controller
directement, comme suit:Chemin d'accès du fichier: application/controllers/Insecure.php
Là vous l'avez. Les contrôleurs qui hérite directement de (étendre) le
CI_Controller
sera "l'insécurité".Un Examen
L'essentiel ici est que vous pouvez avoir d'autres méthodes dans votre contrôleur que vous souhaitez passer à tous vos contrôleurs - dans ce cas, il peut ne pas être la meilleure solution pour vous. Si est le cas, vous pouvez toujours déplacer ces méthodes à un helper à la place.
OriginalL'auteur Jongosi
Je pense qu'il n'est pas possible. Il y a des façons de faire ce que vous avez besoin d'étendre le même contrôleur. Pourquoi ne pas mettre toutes vos pages dans un dossier (comme le Public) et de vérifier dans MY_Controller si la demande est acheminée vers ce dossier. Si non, nécessite auth.
OriginalL'auteur noinstance
Une autre solution facile est de simplement exiger les classes supplémentaires/controllers vous avez besoin au bas de votre application/controller/my_controller.php fichier
Mon custom contrôleur ressemble à ça, ne nécessite pas de paramètres de configuration supplémentaires:
Semble assez sec pour moi et puis vous permet de personnaliser votre demande par la mise en place d'un templates /layouts contrôleur répertoire quelque part. Je suis en train de terminer un ancien de CI, de projet je suis donc aller plus loin, mais je suis sûr que vous pouvez également jouer avec certaines variables de configuration sont d'ailleurs à le faire, même à SEC er
OriginalL'auteur JonMorehouse