【问题标题】:calling x controller function inside a y controller function codeigniter在 y 控制器函数 codeigniter 中调用 x 控制器函数
【发布时间】:2014-05-16 06:31:52
【问题描述】:

我是 codeigniter 的新手,我有两个控制器:utility.phpwelcome.php

utility.php,我有函数:

   function getdata() {
     //code here
   }

   function logdata() {
     //code here
   }

welcome.php里面,我有这个功能:

   function showpage() {
     //some code here
     //call functions here
   }

我想做的是在我的welcome.php 中,我想从utility.php 调用函数。我该怎么做呢?谢谢。

【问题讨论】:

    标签: php codeigniter controller


    【解决方案1】:

    来自here的引用

    要扩展控制器,请关注tutorial 或查看下面的一些代码。


    private/public/protected之间的区别


    在文件夹/application/core/中创建一个名为MY_Controller.php的文件

    在该文件中有一些代码,例如

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class MY_Controller extends CI_Controller {
    
        protected $data = Array(); //protected variables goes here its declaration
    
        function __construct() {
    
            parent::__construct();
            $this->output->enable_profiler(FALSE); // I keep this here so I dont have to manualy edit each controller to see profiler or not        
            $this->load->model('some_model'); //this can be also done in autoload...
            //load helpers and everything here like form_helper etc
        }
    
        protected function protectedOne() {
    
        }
    
        public function publicOne() {
    
        }
    
        private function _privateOne() {
    
        }
    
        protected function render($view_file) {
    
            $this->load->view('header_view');
            if ($this->_is_admin()) $this->load->view('admin_menu_view');
    
            $this->load->view($view_file . '_view', $this->data); //note all my view files are named <name>_view.php
            $this->load->view('footer_view');
    
        }
    
        private function _isAdmin() {
    
            return TRUE;
    
        }
    
    }
    

    现在在您现有的任何控制器中,只需编辑第一行或第二行

    class <controller_name> extends MY_Controller {
    

    你就完成了

    另请注意,您打算在视图中使用的所有变量都在此变量中(array) $this-&gt;data

    MY_Controller扩展的某些控制器示例

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class About extends MY_Controller {
    
        public function __construct() {
    
            parent::__construct();
    
        }
    
        public function index() {
            $this->data['today'] = date('Y-m-d'); //in view it will be $today;
            $this->render('page/about_us'); //calling common function declared in MY_Controller
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      简短的回答是你没有。

      MVC 的重点是让您的代码井井有条。

      您可以做的是在库文件夹中创建一个库,您可以在其中将所需的方法放入多个控制器中。

      例如,您可以创建一个 mylog 库,您可以在其中放置所有与日志相关的内容。然后在任何控制器中调用:

      $this->load->library('mylog');
      $this->mylog->logdata();
      

      除了处理数据模型的函数外,还应该驻留在模型中。您可以从 CI 中的任何控制器调用任何模型

      【讨论】:

        【解决方案3】:

        这不是概念,如果您想在不同的控制器中调用代码,请执行以下操作:

        1. 随时(即使在视图中)创建帮助程序和调用函数。
        2. 扩展 CI_Controller,以便您可以在任何扩展的控制器中使用一个或多个功能。

        让我们从助手开始:

        在文件夹application/helpers/summation_helper.php中创建文件

        使用以下代码示例

        <?php if (!defined('BASEPATH')) exit('No direct script access allowed');
        
        function sum($a, $b) {
        
            //$CI =& get_instance(); 
            // if you want to use $this variable you need to get instance of it so now instead of using $this->load... you may use $CI->load
            $return = $a + $b;
            return number_format($return, 3);
        
        }
        

        如果您要在许多控制器/视图中使用您的助手,请在自动加载中加载它,否则只需手动加载它$this-&gt;load-&gt;helper('summation');

        扩展Controller_CI:如果您使用数据库,这是更好的方法。请关注这个tutorial,它解释了一切。

        *我已经在网站关闭之前通过手机发布了这个答案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-09
          • 2011-02-25
          相关资源
          最近更新 更多