2016-04-07 6 views
0

Datei Gibt es eine Möglichkeit, ob eine Funktion oder Methode zu überprüfen in einer Datei Controller von Routen existiert. Ich habe versucht, wie unten gezeigt, aber stecken, wenn der Controller die Sitzung Bibliotheken verwendet, die ich nicht in der Routes-Datei hinzufügen konnte.Codeigniter - Überprüfen Sie, ob eine Controller-Funktion vorhanden ist oder nicht, von den Routen

$urlArr = array_values(array_filter(explode('/', $_SERVER['PATH_INFO']))); 
$folderName = $urlArr[0]; 
$controllerName = $urlArr[1]; 
$actionName = !empty($urlArr[2]) ? $urlArr[2] : 'index'; 

include_once FCPATH."system/core/Controller.php"; 
include_once FCPATH."application/core/MY_Controller.php"; 
include_once FCPATH."application/controllers/$folderName/$controllerName.php"; 

// Here I need to check whether the function ($actionName) exists or not 

Hinweis: Verwenden Sie keine Lösungen vorschlagen, um die Datei als Zeichenfolge zu überprüfen, und prüfen Sie die Zeichenfolge Funktionsdefinition existiert oder nicht.

Jede Hilfe wird geschätzt. Thanks :)

Antwort

1

Nehmen wir an, Sie Test Controller mit index Methode haben:

Seit PHP> = 5.3 Sie Rückrufe anstelle der normalen Routing-Regeln verwenden können. Und um zu überprüfen, ob eine Methode definiert ist, können Sie ReflectionClass verwenden. Hier ist ein Beispiel für Test Controller:

$route['test'] = function() 
{ 
    require_once FCPATH."system/core/Controller.php"; 
    require_once APPPATH.'controllers/Test.php'; 
    $rc = new ReflectionClass('Test'); 

    var_dump($rc->hasMethod('publicFoo')); // bool(false) 
    var_dump($rc->hasMethod('index')); // bool(true) 

    return 'Test/index'; // return your routing 
}; 
+0

Vielen Dank. Es klappt :) –

Verwandte Themen