Как вызвать функцию контроллера кодового словаря из представления

Как вызвать функцию codeigniter controller из представления? Когда я вызываю функцию в контроллере, получите страницу 404.

Codeigniter – это MVC (модель – представление – контроллер). Это действительно не очень хорошая идея, чтобы вызвать функцию из представления. Представление следует использовать только для презентации, и вся ваша логика должна происходить до того, как вы перейдете к представлению в контроллерах и моделях.

Хорошим началом для разъяснения лучшей практики является следовать этому руководству:

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

Это просто, но на самом деле это отличное практическое руководство.

Надеюсь, это поможет!

Вы можете вызвать функцию контроллера из вида следующим образом:

контроллер:

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

Посмотреть:

 //to call controller function from view do $controller->myOtherFunct(); 

Вы можете вызвать функцию контроллера с AJAX на вашем представлении. В этом случае я использую библиотеку jQuery для вызова.

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

Таким образом, вы можете создавать части кода (модули) и перезагружать их методом AJAX в контейнере HTML.

представления не могут вызывать функции контроллера.

Одна идея, которую я могу дать,

Вызовите эту функцию в самом контроллере и верните значение для просмотра файла. Подобно,

 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) используют эту переменную. Подобно,

 echo $cur_url; 

Я хотел бы ответить на этот вопрос, поскольку это все время приходит в поисках –

Вы можете вызвать метод контроллера, но учтите, что это не очень хорошая практика в любом MVC, включая codeigniter.

Ваш контроллер может быть как ниже класса –

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

Я знаю, что это плохо. Но я был в тяжелой ситуации, когда это невозможно вернуть на контроллер или модель.

Мое решение – вызвать функцию на модели. Это можно сделать во взгляде. Но вы должны убедиться, что модель загружена в ваш контроллер.

Скажем, модель main_model, вы можете вызвать функцию на модели, как это на вашем представлении: $ this-> main_model-> your_function ();

Надеюсь, эта помощь. 🙂

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

достаточно просто иметь функцию, правильно написанную в классе контроллера, и использовать тег, чтобы указать класс контроллера и имя метода, или любой другой необходимый параметр.

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

Это класс контроллера Iris.php и класс модели с функцией, обозначенной классом контроллера.

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

На представлении вместо кнопки просто используйте привязку с именем контроллера и именем метода.

 <html> <head></head> <body> <a href="<?php echo base_url(); ?>index.php/iris/pledge_ph" class="btn btn-success">PLEDGE PH</a> </body> </html> 

Мы также можем передавать функцию контроллера как переменную на странице просмотра.

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

На странице просмотра

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

Выход 9