Как вызвать функцию codeigniter controller из представления? Когда я вызываю функцию в контроллере, получайте страницу 404.
Как вызвать функцию контроллера кодового словаря из представления
Ответ 1
Codeigniter - это MVC (модель - представление - контроллер). Это действительно нехорошо вызывать функцию из представления. Представление должно использоваться только для презентации, и вся ваша логика должна произойти, прежде чем вы перейдете к представлению в контроллерах и моделях.
Хорошим началом для разъяснения лучшей практики является следовать этому руководству:
https://codeigniter.com/user_guide/tutorial/index.html
Это просто, но на самом деле это отличная инструкция.
Надеюсь, это поможет!
Ответ 2
Вы можете вызвать функцию контроллера из представления следующим образом:
Контроллер:
public function read() {
$object['controller'] = $this;
$this->load->view('read', $object);
}
Вид:
// to call controller function from view, do
$controller->myOtherFunct();
Ответ 3
Вы можете вызвать функцию контроллера с 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.
Ответ 4
Я хотел бы ответить на этот вопрос, так как все это происходит в поиске -
Вы можете вызвать метод контроллера в поле зрения, но учтите, что это не является хорошей практикой в любом 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) ;
?>
Ответ 5
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();
Ответ 6
представления не могут вызывать функции контроллера.
Ответ 7
Одна идея, которую я могу дать, -
Вызвать эту функцию в самом контроллере и вернуть значение для просмотра файла. Как,
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;
Ответ 8
Попробуйте это.
Добавьте этот код в файл вида
$CI = & get_instance();
$result = $CI->FindFurnishName($pera);
Добавить код в файл вашего контроллера
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,',');
}
где
- FindFurnishName - это имя функции, которая определена в вашем контроллере.
- $ pera - это вариант (как вам нужно).
Ответ 9
Я знаю, что это плохо.. Но я был в тяжелой ситуации, когда это невозможно вернуть на контроллер или модель.
Мое решение - вызвать функцию на модели. Это можно сделать во взгляде. Но вы должны убедиться, что модель была загружена на ваш контроллер в первую очередь.
Произнесите свою модель main_model, вы можете вызвать функцию на модели, как это на вашем представлении: $ Этом- > main_model- > your_function();
Надеюсь на эту помощь.:)
Ответ 10
Мы также можем передавать функцию контроллера как переменную на странице просмотра.
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
Ответ 11
достаточно просто иметь функцию, правильно написанную в классе контроллера, и использовать тег, чтобы указать имя класса контроллера и имя метода или любой другой необходимый параметр.
<?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("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);
}
}
?>
На представлении вместо кнопки просто используйте привязку с именем контроллера и именем метода.
<html>
<head></head>
<body>
<a href="<?php echo base_url(); ?>index.php/iris/pledge_ph" class="btn btn-success">PLEDGE PH</a>
</body>
</html>
Ответ 12
если вам нужно вызвать контроллер из представления, может быть, чтобы загрузить частичное представление, ты думаешь как модульное программирование, и вы должны реализовать структуру HMVC вместо плоскости MVC. CodeIgniter изначально не реализовывал HMVC, но вы можете использовать эту полезную библиотеку для реализации HMVC. https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc
после настройки помните: все ваши контроллеры должны расширяться от MX_Controller для использования этой функции.
Ответ 13
Перейдите в начало своего кода View и сделайте это следующим образом:
<?php
$this->load->model('MyModelName');
$MyFunctionReturnValue = $this->MyModelName->MyFunctionName($param));
?>
<div class="row">
Your HTML CODE
</div>