Codeigniter — проверьте, существует ли функция контроллера, из файла маршрутов.

Есть ли способ проверить, существует ли функция или метод в контроллере из файла routes. Я попытался, как показано ниже, но застрял, когда контроллер использует библиотеки session, которые я не смог добавить в файл маршрутов.

$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

Примечание. Не предлагайте решения для проверки файла как строки и проверки существования строки определения функции.

Любая помощь приветствуется. Спасибо :)


person Sanjay Kumar N S    schedule 07.04.2016    source источник


Ответы (1)


Предположим, у вас есть контроллер Test с методом index:

class Test extends CI_Controller
{

    public function index()
    {
        echo 'index';
    }

}

Поскольку PHP >= 5.3, вы можете использовать обратные вызовы вместо обычных правил маршрутизации. И чтобы проверить, определен ли метод, вы можете использовать ReflectionClass. Вот пример для контроллера Test:

$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
};
person Alexander Popov    schedule 07.04.2016