我有一个名为home.php
的控制器,其中有一个名为podetails
的函数。我想在另一个控制器user.php
中调用此函数
有可能这样做吗?我在CI中读过HMVC
,但我想知道是否可以不使用hmvc?
答案 0 :(得分:11)
要扩展控制器,请按照此tutorial或查看下面的代码。
在名为/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->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
}
}
答案 1 :(得分:2)
将 podetails()写为辅助文件中的函数。
然后在两个控制器中加载该帮助器。
在控制器中你只需要调用podetails()
假设:
- 控制器1 -
function podetails()
{
podetails(); // will call function in helper ;
}
- 控制器2 -
function podetails()
{
podetails(); // will call function in helper ;
}