Вы можете сделать это с помощью драйверов.Отправьте контроллер как ссылку на объект драйверу для использования класса представления.Затем вы просто загружаете драйверы и используете их в качестве плагинов.
Редактировать: Вот код, который я использую в своем приложении:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter base widget driver
*
* @author Alex
* @version 1.0.0
*/
class Basedriver {
/**
* Current specified controller.
* @var CI_Controller
*/
public $controller;
/**
* Contents of the driver which should be outputted or returned.
* @var string
*/
protected $contents;
/**
* Loader Class
* @var CI_Loader
*/
protected $load;
/**
* Constructor function for Basedriver class
*/
public function __construct()
{
$this->controller =& get_instance();
$this->load = $this->controller->load;
}
/**
* Renders driver data into specified output. If $echo_contents is true,
* output is echoed to the client, otherwise it is returned.
* @param boolean $echo_contents Specifies whether the content should be outputted or returned as string
* @param mixed $params Array of parameters which should be sent to the driver
* @return string Returned driver data if $echo_contents is set
*/
public function render($params = NULL, $echo_contents = true)
{
$this->parse_params($params);
$this->run();
if ($echo_contents)
echo $this->contents;
else
return $this->contents;
return NULL;
}
/**
* Default run function for all drivers, should be overidden by extending classes.
*/
protected function run()
{
$this->contents = NULL;
}
/**
* Parses parameters and sets them as variables.
* Default variables need to be defined in extending class
*/
protected function parse_params($params)
{
if ($params === NULL) return;
foreach($params as $variable => $value)
{
if (isset($this->$variable))
$this->$variable = $value;
}
}
}
/* End of file Basedriver.php */
/* Location: ./application/libraries/Basedriver.php */
Здесь есть класс загрузки, позволяющий использовать класс представления иКонтроллер позволяет вам использовать функции базы данных и предоставлять вам другой доступ, если вам это нужно.Этот класс должен быть загружен до того, как все остальные драйверы (виджеты) и все драйверы (виджеты) должны расширить этот класс.Вы можете сделать это, добавив 'basedriver' в массив $ config ['library'] в application / config / autoload.php.
Пример виджета драйвера:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Example extends Basedriver
{
protected $parameter1 = 'defaultvalueparam1';
protected $parameter2 = 'defaultvalueparam2';
protected function run()
{
// Widget logic here...
// you can use $this->load->view and $this->controller->db here
$this->contents = 'final_processed_data_here';
}
}
/* End of file Example.php */
/* Location: ./application/libraries/Example/Example.php */
Использование драйверакоторый расширяет Basedriver как виджет, например:
$this->load->driver('example');
$this->example->render(array('parameter1' => '1', 'parameter2' => '2'));