Sabtu, 17 Desember 2016

CODEIGNITER HMVC FORM VALIDATION CALLBACK ISSUE

,
Codeigniter sudah menyediakan library form_validation dimana sudah ada dokumentasinya di User Guide yang telah disediakan. Ketika kita membuat form input data seringkali kita perlu membuat sebuah validasi tertentu diluar validasi yang disediakan di library tersebut, karenanya kita perlu menggunakan fungsi callback. Pada penggembangan codeigniter dengan hmvc yang telah dibahas pada dua postingan sebelumnya fungsi callback ini akan tidak berjalan sebagaimana mestinya, dimana pesan notifikasi kepada pengguna tidak bisa ditampilkan. Berikut pesan error yang dijumpai "Unable to access an error message corresponding to your field name.....................". Berikut script yang saya buat
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * Description of Dashboard
 * @author IMAM SYAIFULLOH
 */
class Dashboard extends MX_Controller
{
    public function __construct()
    {
   parent::__construct();
        $this->load->helper('form');        
        $this->load->library('form_validation');
    }

    public function index(){
     $data['title'] = 'Lesson HMVC';
     $data['content'] = 'Hello World';
     $this->load->view('dashboard_index', $data, FALSE);
    }

    public function login($value='')
    {
        if($_POST){
            $this->form_validation->set_rules('email', 'Email address', 'required|valid_email');
            $this->form_validation->set_rules('password', 'Password', 'required|callback_password_check');
            $this->form_validation->set_error_delimiters('
', '
'); if ($this->form_validation->run() == FALSE) { $page = 'dashboard/dashboard_login'; } else { $page = 'dashboard/dashboard_index'; } } else { $page = 'dashboard/dashboard_login'; } $data['title'] = 'Lesson HMVC'; $data['content_title'] = 'Lesson HMVC Callback Form Validation'; echo modules::run('template/loadview', $data,$page); } public function password_check($pass) { if ($pass == '123456') { $this->form_validation->set_message('password_check', 'The {field} field can not be the word "123456"'); return FALSE; } else { return TRUE; } } }
Ternyata setelah membaca beberapa referensi perlu adanya penambahan script / library agar fungsi callback dapat berjalan sebagaimana mestinya. Berikut langkah-langkahnya
Step 1
Buatlah sebuah library baru bernama MY_Form_validation.php, dengan isi script sebagai berikut
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * Description of MY_Form_validation
 */
class MY_Form_validation extends CI_Form_validation {

    public $CI;

    function run($module = '', $group = '') {
        (is_object($module)) AND $this->CI = &$module;
        return parent::run($group);
    }

}
Step 2
Pada function __construct() perlu ditambahkan satu baris script "$this->form_validation->CI = &$this;" setelah memanggil library form_validation.
Selanjutnya pada script "$this->form_validation->run()" diedit menjadi "$this->form_validation->run($this)" sehingga scriptnya menjadi berikut
defined('BASEPATH') OR exit('No direct script access allowed');
/**
 * Description of Dashboard
 * @author IMAM SYAIFULLOH
 */
class Dashboard extends MX_Controller
{
    public function __construct()
    {
   parent::__construct();
        $this->load->helper('form');        
        $this->load->library('form_validation');
        $this->form_validation->CI = &$this;
    }

    public function index(){
     $data['title'] = 'Lesson HMVC';
     $data['content'] = 'Hello World';
     $this->load->view('dashboard_index', $data, FALSE);
    }

    public function login($value='')
    {
        if($_POST){
            $this->form_validation->set_rules('email', 'Email address', 'required|valid_email');
            $this->form_validation->set_rules('password', 'Password', 'required|callback_password_check');
            $this->form_validation->set_error_delimiters('
', '
'); if ($this->form_validation->run($this) == FALSE) { $page = 'dashboard/dashboard_login'; } else { $page = 'dashboard/dashboard_index'; } } else { $page = 'dashboard/dashboard_login'; } $data['title'] = 'Lesson HMVC'; $data['content_title'] = 'Lesson HMVC Callback Form Validation'; echo modules::run('template/loadview', $data,$page); } public function password_check($pass) { if ($pass == '123456') { $this->form_validation->set_message('password_check', 'The {field} field can not be the word "123456"'); return FALSE; } else { return TRUE; } }div> }