Codeigniter - Periksa apakah fungsi Controller ada atau tidak, dari file rute

Apakah ada cara untuk memeriksa apakah fungsi atau metode ada di pengontrol dari file rute. Saya telah mencoba seperti yang ditunjukkan di bawah ini, tetapi terhenti ketika pengontrol menggunakan pustaka sesi yang tidak dapat saya tambahkan di file rute.

$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

Catatan: Jangan menyarankan solusi untuk memeriksa file sebagai string dan memeriksa apakah string definisi fungsi ada atau tidak.

Bantuan apa pun dihargai. Terima kasih :)


person Sanjay Kumar N S    schedule 07.04.2016    source sumber


Jawaban (1)


Anggaplah Anda memiliki Test pengontrol dengan metode index:

class Test extends CI_Controller
{

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

}

Karena PHP >= 5.3 Anda dapat menggunakan panggilan balik sebagai pengganti aturan perutean normal. Dan untuk memeriksa apakah suatu metode ditentukan, Anda dapat menggunakan ReflectionClass. Berikut adalah contoh untuk pengontrol 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