Skip to content

Instantly share code, notes, and snippets.

@josegomezr
Last active March 3, 2016 04:11
Show Gist options
  • Save josegomezr/be194b163f046868670d to your computer and use it in GitHub Desktop.
Save josegomezr/be194b163f046868670d to your computer and use it in GitHub Desktop.
HTTP-Verb-Aware Controllers

Este patch en MY_Controller.php sirve para que CodeIgniter llame a los métodos en los controladores usando los verbos http.

Snippet usando el clásico CI_Controller

// omitido para brevedad
public function metodo(){
    if($_SERVER['REQUEST_METHOD'] == 'GET'){
        // cosas que hacer cuando es GET
    }
    if($_SERVER['REQUEST_METHOD'] == 'GET'){
        // cosas que hacer cuando es POST
    }
    // ....
}

Snippet usando este MY_Controller

// omitido para brevedad
public function get_metodo(){
    // cosas que hacer cuando es GET
}
public function post_metodo(){
    // cosas que hacer cuando es POST
}

Hay un adicional la variable $viewData, sirve para centralizar la info que va al final para las views.

Snippet usando el clásico CI_Controller

// omitido para brevedad
public function manejar_consulta(){
    // ....
    $data = array();
    $data['xxx'] = "dasd";
    // ....
    $this->load->view('view_asombrosa', $data);
    $this->load->view('view_asombrosa_2', $data);
    $this->load->view('view_asombrosa_3', $data);
    
}

Snippet usando este MY_Controller

// omitido para brevedad
public function manejar_consulta(){
    // ....
    $this->viewData['xxx'] = "dasd";
    // ....
    $this->load->view('view_asombrosa', $this->viewData);
    $this->load->view('view_asombrosa_2', $this->viewData);
    $this->load->view('view_asombrosa_3', $this->viewData);
    
}

Quizá parezca tonto, pero que mas da.

<?php
/**
* HTTP-Verb-Aware Controller
*/
class MY_Controller extends CI_Controller {
public $viewData = array( );
public function _remap( $method, $params ) {
$method = strtolower( $_SERVER[ 'REQUEST_METHOD' ] ) . '_' . $method;
if ( method_exists( $this, $method ) )
return call_user_func_array( array(
$this,
$method
), $params );
else
show_error( "Method <strong>$method</strong> does not exist on class <strong>" . __CLASS__ . "</strong>" );
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment