Ich möchte bestimmte Funktionen von Controller-Methoden in Bibliotheken trennen, um sie modular zu machen. Basierend auf dem URI versuche ich, zu einer Bibliotheksmethode zu routen, wenn sie existiert. Aber ich müsste die Bibliothek laden, um nach der Methode mit der Funktion method_exists zu suchen. Die einzige andere Möglichkeit, nach der ich gesucht habe, ist, alle Bibliotheksmethoden in ein Konfigurationsarray zu stellen und dort nach dem Methodennamen zu suchen. Wie zum Beispiel:Codeigniter: Wie kann ich prüfen, ob eine Bibliotheksmethode existiert, ohne die Bibliothek zu laden?
<?php
/**
* Application_config.php
*/
$config['extensions'] = array(
'News' => array(
'library' => 'articles_library',
'methods' => array(
'articles',
'article',
'edit_article',
'add_article',
'delete_article'
)
)
);
und
<?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...
}
}
}
die Bibliotheken in jeder Bibliothek für die Existenz einer Bibliothek Methode zu überprüfen, ohne den Laden eine bessere Weise gibt es? Um jede Methode in der Anwendungskonfiguration zu duplizieren, wird nur danach gefragt.
Haben Sie darüber nachgedacht, alle Ihre crud Methoden zu benennen? Anstelle von add_article würden Sie add verwenden. Auf diese Weise würden alle Ihre Module einen gemeinsamen Namen für die gleichen Funktionen haben und Sie müssten nicht für jedes Modul ein eigenes Array haben. –
Ich weiß nicht, warum ich nicht daran gedacht habe. Konvention über Konfiguration. Auf diese Weise konnte ich einfach nach einem dieser Wörter suchen und es basierend auf dem Bibliotheksnamen param weiterleiten. Wie zB ** webapp.com/library_name/add ** –
Genau. So habe ich mein eigenes cms implementiert. Alle meine Controller haben eine gemeinsame Schnittstelle, die diese Konvention verwenden. Sie alle haben mindestens einen Index, erstellen, aktualisieren und löschen Sie die Methode. –