Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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,',');

}

где

  1. FindFurnishName - это имя функции, которая определена в вашем контроллере.
  2. $ 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>