web-dev-qa-db-fra.com

Comment appeler la fonction de contrôleur codeigniter de la vue

Comment appeler la fonction de contrôleur de codeigniter de la vue? Lorsque j'appelle la fonction dans un contrôleur, obtenez une page 404.

30
keerthi

Codeigniter est un framework MVC (Model - View - Controller). Ce n'est vraiment pas une bonne idée d'appeler une fonction à partir de la vue. La vue doit être utilisée uniquement pour la présentation et toute votre logique doit exister avant que vous obteniez la vue dans les contrôleurs et modèles.

Un bon début pour clarifier la meilleure pratique consiste à suivre ce tutoriel: 

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

C'est simple, mais c'est vraiment un excellent tutoriel.

J'espère que ça aide!

15
envysea

Vous pouvez appeler la fonction du contrôleur de la manière suivante:

Manette:

public function read()
{

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

Vue:

//to call controller function from view do

$controller->myOtherFunct();
34
saad

Vous pouvez appeler une fonction de contrôleur avec AJAX dans votre vue . Dans ce cas, j'utilise la bibliothèque jQuery pour passer l'appel.

<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 cette façon, vous pouvez créer des portions de code (modules) et les recharger avec la méthode AJAX dans un conteneur HTML.

7
Logus

Je voudrais répondre à cette question car cela revient tout le temps dans les recherches -

Vous pouvez appeler une méthode de contrôleur dans la vue, mais veuillez noter que ce n'est pas une bonne pratique dans les MVC incluant codeigniter.

Votre contrôleur peut être comme classe ci-dessous -

<?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
Abhishek
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
MrĐàm Tn

les vues ne peuvent pas appeler les fonctions du contrôleur.

2
rechie

Une idée que je peux donner est,

Appelez cette fonction dans le contrôleur lui-même et renvoyez une valeur pour afficher le fichier. Comme,

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) utilise cette variable. Comme,

echo $cur_url;
2
ShivarajRH

Nous pouvons également passer la fonction du contrôleur en tant que variable dans la page de vue.

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);
}
}

Dans la page de vue

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

La sortie est 9

1
Shailesh Singh

Essaye celui-là.

Ajouter ce code dans votre fichier View 

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

Ajouter du code dans le fichier de votre contrôleur

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,',');

  1. FindFurnishName est le nom de la fonction définie dans votre contrôleur.
  2. $ pera est une option (selon vos besoins).
1

il est très simple de simplement écrire correctement la fonction dans la classe du contrôleur et d’utiliser une balise pour spécifier la classe du contrôleur et le nom de la méthode, ou tout autre paramètre nécessaire.

<?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();
    }
}
?>

Il s'agit de la classe de contrôleur Iris.php Ainsi que de la classe de modèle avec la fonction pointée de la classe de contrôleur.

<?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);
    } 
}
?>

Sur la vue au lieu d'un bouton, utilisez simplement le lien d'ancrage avec le nom du contrôleur et le nom de la méthode.

<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
Fillz Adebayo

Je sais que c'est mauvais ... Mais j'ai été dans une situation difficile où il est impossible de remettre cela au contrôleur ou au modèle.

Ma solution consiste à appeler une fonction sur le modèle . Cela peut être fait à l'intérieur d'une vue . Mais vous devez vous assurer que le modèle a été chargé en premier sur votre contrôleur.

Dites votre modèle main_model, vous pouvez appeler une fonction sur le modèle comme ceci sur votre vue: $ This-> main_model-> your_function ();

J'espère que cette aide. :) 

1
Ahmad

si vous devez appeler un contrôleur depuis une vue, vous pouvez peut-être charger une vue partielle, vous envisagez une programmation modulaire, et vous devez implémenter une structure HMVC à la place de l'avion MVC .__ CodeIgniter n'a pas implémente HMVC de manière native, mais vous pouvez utiliser cette bibliothèque utile pour implémenter HMVC . https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc

après l’installation, rappelez-vous que tous vos contrôleurs doivent utiliser MX_Controller pour pouvoir utiliser cette fonction.

0
abilogos

Allez en haut de votre code View et faites comme ça: 

  <?php
     $this->load->model('MyModelName');
     $MyFunctionReturnValue = $this->MyModelName->MyFunctionName($param));
?>

<div class="row">
    Your HTML CODE
</div>
0
user11084999