Как вызвать функцию 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