Как вызвать функцию контроллера codeigniter из вида - PullRequest
31 голосов
/ 03 апреля 2012

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

Ответы [ 13 ]

36 голосов
/ 20 июня 2014

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

Контроллер:

public function read()
{

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

Вид:

//to call controller function from view do

$controller->myOtherFunct();
16 голосов
/ 03 апреля 2012

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

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

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

Это просто, но это действительно отличная инструкция.

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

7 голосов
/ 28 августа 2014

Вы можете вызвать функцию контроллера с 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.

5 голосов
/ 26 мая 2015

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

Вы можете вызвать метод контроллера в поле зрения, но учтите, что это не очень хорошая практика для любого 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) ;

?>
3 голосов
/ 14 октября 2016
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();
2 голосов
/ 28 июля 2018

Попробуйте это.

Добавьте этот код в файл вашего просмотра

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

}

, где

  1. FindFurnishName - это имя функции, которая определена в вашем контроллере.
  2. $ pera - это вариант (как вам нужно).
2 голосов
/ 22 марта 2013

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

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

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

}

в представлении (home_view.php) используют эту переменную.Мол,

echo $cur_url;
2 голосов
/ 03 апреля 2012

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

1 голос
/ 20 марта 2017

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

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

Это контроллерclass 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>
1 голос
/ 27 сентября 2016

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...