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.
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!
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();
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.
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) ;
?>
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();
les vues ne peuvent pas appeler les fonctions du contrôleur.
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;
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
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,',');
}
où
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>
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. :)
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.
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>