Je veux séparer certaines fonctions des méthodes de contrôleur en bibliothèques pour les rendre modulaires. En fonction de l'URI, j'essaie de router vers une méthode de bibliothèque si elle existe. Mais je dois charger la bibliothèque pour vérifier la méthode avec la fonction php method_exists. Le seul autre moyen que j'ai trouvé pour vérifier cela est de mettre toutes les méthodes de la bibliothèque dans un tableau de configuration et de vérifier le nom de la méthode. Tels que:Codeigniter: Comment puis-je vérifier si une méthode de bibliothèque existe sans charger la bibliothèque?
<?php
/**
* Application_config.php
*/
$config['extensions'] = array(
'News' => array(
'library' => 'articles_library',
'methods' => array(
'articles',
'article',
'edit_article',
'add_article',
'delete_article'
)
)
);
et
<?php
/**
* admin_controller.php
*
* all admin routes go to index
*/
class C3_base_controller extends Controller {
public function index() {
$lib_chk = 0;
$ext = $this->config->item('extensions');
foreach($ext as $item) {
foreach ($item['methods'] as $meth) {
if ($this->uri->segment(2) == $meth) {
$lib = $item['library'];
echo $this->$lib->$meth();
$lib_chk = 1;
}
}
}
if ($lib_chk == 0) {
// rest of controller...
}
}
}
Y at-il une meilleure façon de vérifier l'existence d'une méthode de bibliothèque dans chaque bibliothèque sans charger les bibliothèques? Avoir à dupliquer toutes les méthodes dans la configuration de l'application, c'est juste le demander.
Avez-vous envisagé de nommer toutes vos méthodes crud en utilisant une convention de nommage standard? Au lieu de add_article vous utiliseriez add. De cette façon, tous vos modules auraient un nom commun pour les mêmes fonctions et vous n'auriez pas besoin d'un tableau individuel pour chaque module. –
Je ne sais pas pourquoi je n'ai pas pensé à ça. Convention sur la configuration. De cette façon, je pourrais juste vérifier l'un de ces mots, et l'acheminer en fonction du nom de la bibliothèque param. Tels que ** webapp.com/library_name/add ** –
Exactement. C'est ainsi que j'ai mis en place mes propres cms. Tous mes contrôleurs ont une interface commune qui utilise cette convention. Ils ont tous au moins un index, créer, mettre à jour et supprimer la méthode. –