0

コンストラクターでの検証が失敗した場合にメソッドが実行されないようにしようとしています。私はAJAXを使用しており、リクエストをのようなURLに送信していexample/searchます。私は現在、変数がfalseでないかどうかをチェックしていますが、それを行うためのより良い方法があると思いますね。

class Example extends CI_Controller {

        public $error;
        function __construct() {
            parent::__construct();
                    //validation rules    
            if($this->form_validation->run() == FALSE) {
                $this->error=1;
            }

        }
        function search() {
            if(!$this->error) {
            //code
            }
        }
    }
4

1 に答える 1

0

application / config / form_validation.php

$config = array(
     'search' => array(
        array('field'=>'', 'label'=>'', 'rules'=>''),
        array('field'=>'', 'label'=>'', 'rules'=>'')
     ),
);

-

コントローラ

public function search(){

   //is ajax request?
   if( !$this->input->is_ajax_request() )
   {
      return show_error('Bad Request!'); // bye bye, stop execution
   }

   $this->output->set_status_header('200');

   if( ! $this->form_validation->run('search') )
   {
      echo json_encode(array(
          'error' => 1,
          'errors' => array(
                'field' => form_error('field')
           )
      ));
      return; // bye bye, stop execution
   }

   //all good, continue executing
   //.....
}

編集

//For just a constructor 

protected $isValidated = TRUE;

public function __construct(){

    //check for valid ajax request
    //do this in parent class(ajax_controller) ?

    if( !$this->form_validation->run('search') )
    {
       $this->isValidated = FALSE;
       return echo json_encode( array('error' => 1));
    }

    if($isValidated)
    {
         $this->_search( $this->input->post() );
    }
}

protected function _search( $input ){}

-

class Ajax_Controller extends CI_Controller{
    public function __construct(){
       if( !$this->input->is_ajax_request() )
       {
          return show_error('Bad Request!');
       }

       $this->output->set_status_header('200');
    }
}
于 2013-02-18T13:37:27.973 に答える