Cómo llamar a la función del controlador codeigniter desde la vista


¿ Cómo llamar a la función del controlador codeigniter desde la vista? Cuando llamo a la función en un controlador, obtener una página 404.

Author: Norto23, 2012-04-03

12 answers

Codeigniter es un framework MVC (Model - View - Controller). Realmente no es una buena idea llamar a una función desde la vista. La vista se debe utilizar solo para la presentación, y toda su lógica debe estar sucediendo antes de llegar a la vista en los controladores y modelos.

Un buen comienzo para aclarar la mejor práctica es seguir este tutorial:

Https://codeigniter.com/user_guide/tutorial/index.html

Es simple, pero realmente establece un excelente cómo hacerlo.

Espero que esto ayude!

 15
Author: envysea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-20 14:00:07

Puede llamar a la función del controlador desde la vista de la siguiente manera:

Controlador:

public function read()
{

            $object['controller']=$this; 
            $this->load->view('read',$object);
}

Vista:

//to call controller function from view do

$controller->myOtherFunct();
 32
Author: saad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-20 06:24:50

Puede llamar a una función de controlador con AJAX en su vista. En este caso, estoy usando la biblioteca jQuery para hacer la llamada.

<script type="text/javascript">
    $.ajax({
            url: "<?=site_url("controller/function")?>",
            type: "post", // To protect sensitive data
            data: {
               ajax:true,
               variableX: "string",
               variableY: 25
               //and any other variables you want to pass via POST
                   },
            success:function(response){
            // Handle the response object
            }
        });
</script>

De esta manera puede crear porciones de código (módulos) y recargarlas con el método AJAX en un contenedor HTML.

 7
Author: Logus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-28 13:30:56

Me gustaría responder a esta pregunta ya que esto viene todas las veces en las búsquedas {

Puede llamar a un método de controlador en view, pero tenga en cuenta que esta no es una buena práctica en ningún MVC, incluido codeigniter.

Su controlador puede ser como debajo de la clase {

<?php
    class VCI_Controller extends CI_Controller {
    ....
    ....
    function abc($id){
       return $id ;
    }

    }
?>

Now You can call this function in view files as below --
<?php
    $CI =& get_instance();
    $CI->abc($id) ;

?>
 4
Author: Abhishek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-26 04:57:05
class MY_Controller extends CI_Controller {

    public $CI = NULL;

    public function __construct() {
        parent::__construct();
        $this->CI = & get_instance();
    }

    public function yourMethod() {

    }

}

// in view just call
$this->CI->yourMethod();
 3
Author: MrĐàm Tn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-14 03:59:05

Las vistas no pueden llamar a las funciones del controlador.

 2
Author: rechie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-03 03:18:13

Una idea que puedo dar es,

Llame a esa función en el propio controlador y devuelva el valor para ver el archivo. Como,

class Business extends CI_Controller {
    public function index() {
            $data['css'] = 'profile';

            $data['cur_url'] = $this->getCurrURL(); // the function called and store val
            $this->load->view("home_view",$data);
     }
     function getCurrURL() {
                $currURL='http://'.$_SERVER['HTTP_HOST'].'/'.ltrim($_SERVER['REQUEST_URI'],'/').'';
            return $currURL;
     }

}

In view(home_view.php) usa esa variable. Como,

echo $cur_url;
 2
Author: ShivarajRH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-22 05:12:29

Sé que esto es malo.. Pero he estado en una situación difícil en la que es imposible volver a poner esto en el controlador o modelo.

Mi solución es llamar a una función en el modelo. Se puede hacer dentro de una vista. Pero usted tiene que asegurarse de que el modelo ha sido cargado a su controlador primero.

Diga su modelo main_model, puede llamar a la función en el modelo de esta manera en su vista : $this->main_model->your_function ();

Espero que esto ayude. :)

 1
Author: Ahmad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-25 04:34:17

También podemos pasar la función de controlador como variable en la página de vista.

class My_controller extends CI_Controller {
    public function index() {
           $data['val']=3;
           $data['square']=function($val){
                               return $val*$val;
                                   };
    $this->load->view('my-view',$data);
}
}

En la página de vista

<p>Square of <?=$val?>
   <?php 
     echo $square($val); 
   ?>
</p>

La salida es 9

 1
Author: Shailesh Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-27 07:44:19

Es bastante simple simplemente tener la función correctamente escrita en la clase controller y usar una etiqueta para especificar la clase controller y el nombre del método, o cualquier otro parámetro necesario..

<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Iris extends CI_Controller {
    function __construct(){
        parent::__construct();
        $this->load->model('script');
        $this->load->model('alert');

    }public function pledge_ph(){
        $this->script->phpledge();
    }
}
?>

Esta es la clase de controlador Iris.php y la clase modelo con la función apuntada desde la clase controlador.

<?php 
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Script extends CI_Model {
    public function __construct() {
        parent::__construct();
        // Your own constructor code
    }public function ghpledge(){
        $gh_id = uniqid(rand(1,11));
        $date=date("y-m-d");
        $gh_member = $_SESSION['member_id'];
        $amount= 10000;
        $data = array(
            'gh_id'=> $gh_id,
            'gh_member'=> $gh_member,
            'amount'=> $amount,
            'date'=> $date
        );
        $this->db->insert('iris_gh',$data);
    } 
}
?>

En la vista en lugar de un botón, simplemente use el enlace de anclaje con el nombre del controlador y el nombre del método.

<html>
    <head></head>
    <body>
        <a href="<?php echo base_url(); ?>index.php/iris/pledge_ph" class="btn btn-success">PLEDGE PH</a>
    </body>
</html>
 1
Author: Fillz Adebayo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:03:15

Si necesita llamar a un controlador desde una vista, tal vez para cargar una vista parcial, pensando como programación modular, y usted debe implementar la estructura HMVC en lugar del plano MVC. CodeIgniter no implementó HMVC de forma nativa, pero puede usar esta útil biblioteca para implementar HMVC. https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc

Después de la configuración recuerde: que todos sus controladores deben extenderse desde MX_Controller para poder usar esta característica.

 0
Author: abilogos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-19 08:12:02

Prueba este.

Agregue este código en Su archivo de vista

$CI     = & get_instance();
$result = $CI->FindFurnishName($pera);

Agregue código en su archivo de controlador

public function FindFurnishName($furnish_filter)

{

$FindFurnishName        = $this->index_modal->FindFurnishName($furnish_filter);  
$FindFurnishName_val    = '';
foreach($FindFurnishName as $AllRea)
{
    $FindFurnishName_val  .= ",".$AllRea->name;
}
return ltrim($FindFurnishName_val,',');

}

Donde

  1. FindFurnishName es el nombre de la función que se define en Su Controlador.
  2. per pera es una opción (según su necesidad).
 0
Author: Suresh Kumar Kumawat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-28 06:46:21