如何从视图中调用codeigniter控制器功能

kee*_*thi 33 php codeigniter

如何从视图中调用codeigniter控制器功能?当我在控制器中调用该函数时,获得一个404页面.

saa*_*aad 41

您可以通过以下方式从视图中调用控制器功能:

控制器:

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

视图:

// to call controller function from view, do
$controller->myOtherFunct();
Run Code Online (Sandbox Code Playgroud)

  • +1,因为我知道最好的方法是不在视图中调用控制器,但知道这些破坏规则的技巧有时可能是有用的. (7认同)
  • 另一种更简单的方法是使函数静态(即“public static function myOtherFunct()”)并从视图中调用它:“ControllerName::myOtherFunct()”不需要将类实例或其他任何内容传递给视图。 (3认同)

env*_*sea 15

Codeigniter是一个MVC(模型 - 视图 - 控制器)框架.从视图中调用函数真的不是一个好主意.视图应仅用于演示,并且在进入控制器和模型中的视图之前,应该发生所有逻辑.

澄清最佳实践的一个良好开端是遵循本教程:

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

它很简单,但它确实提供了一个很好的操作方法.

我希望这有帮助!

  • 这怎么可以接受?我本可以自己去他们的页面.我们需要做得更好,朋友. (3认同)

Log*_*gus 7

您可以在视图上使用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>
Run Code Online (Sandbox Code Playgroud)

这样,您可以创建代码(模块)的一部分,并在HTML容器中重新加载AJAX方法.


Abh*_*hek 5

我想回答这个问题,因为搜索一直在出现-

您可以在视图中调用控制器方法,但是请注意,在任何包含代码点火器的MVC中,这都不是一个好习惯。

您的控制器可能像下面的类-

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

?>
Run Code Online (Sandbox Code Playgroud)