У меня есть один контроллер с именем home.php
в котором есть функция с именем podetails
. Я хочу вызвать эту функцию в другом контроллере user.php
.
Можно ли это сделать? Я прочитал о HMVC
в CI, но я хочу знать, можно ли обойтись без использования hmvc?
Чтобы расширить контроллер, пожалуйста, следуйте этому руководству или см. Код ниже.
различия между частным / общественным / защищенным
создать файл в папке /application/core/
named 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('Ym-d'); //in view it will be $today; $this->render('page/about_us'); //calling common function declared in MY_Controller } }
напишите podetails () как функцию в вспомогательном файле.
затем загрузите этот помощник в обоих контроллерах.
в контроллере вы просто вызываете podetails ()
Предположим, что:
–controller 1–
function podetails() { podetails(); // will call function in helper ; }
–controller 2–
function podetails() { podetails(); // will call function in helper ; }