我有一个home
控制器,其index
动作显示一组特色产品.但是,产品通过product
控制器进行管理,包括专有模型和视图.
如何product
从控制器中的index
操作中访问信息home
?product
由于未在运行时加载类,并且CodeIgniter不提供动态加载控制器的方法,因此实例化将不起作用.将product
类放入库文件中也不起作用.
确切地说,我需要product
在索引视图中插入产品视图(由控制器处理的数据填充).我正在运行CodeIgniter 2.0.2.
小智 63
像这样加载它
$this->load->library('../controllers/instructor');
Run Code Online (Sandbox Code Playgroud)
并调用以下方法:
$this->instructor->functioname()
Run Code Online (Sandbox Code Playgroud)
这适用于笨2.X.
Wes*_*rch 29
如果你有兴趣,那里有一个完善的软件包,你可以添加到你的Codeigniter项目中来处理这个问题:
https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/
Modular Extensions使CodeIgniter PHP框架模块化.模块是独立组件的组,通常是模型,控制器和视图,安排在应用程序模块子目录中,可以放入其他CodeIgniter应用程序中.
好的,所以最大的变化是现在你正在使用模块化结构 - 但对我来说这是可取的.我已经使用CI大约3年了,并且无法想象没有Modular Extensions的生活.
现在,这是处理直接调用控制器以呈现视图部分的部分:
// Using a Module as a view partial from within a view is as easy as writing:
<?php echo modules::run('module/controller/method', $param1, $params2); ?>
Run Code Online (Sandbox Code Playgroud)
这里的所有都是它的.我通常使用它来加载小"小部件",如:
通常,我为每个模块构建一个"小部件"控制器,并仅将其用于此目的.
当我开始使用Codeigniter时,您的问题也是我的第一个问题.我希望这可以帮助你,即使它可能比你想要的多一点.从那以后我就一直在使用MX而且没有回头.
请务必阅读文档,并在Codeigniter论坛上查看有关此软件包的大量信息.请享用!
小智 8
在这种情况下,你可以尝试一些旧的学校PHP.
// insert at the beggining of home.php controller
require_once(dirname(__FILE__)."/product.php"); // the controller route.
然后,你会有类似的东西:
Class Home extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->product = new Product();
...
}
...
// usage example
public function addProduct($data)
{
$this->product->add($data);
}
}
Run Code Online (Sandbox Code Playgroud)
然后根据需要使用控制器的方法.
只是为了补充Zain Abbas所说的更多信息:
以这种方式加载控制器,并像他说的那样使用它:
$this->load->library('../controllers/instructor');
$this->instructor->functioname();
Run Code Online (Sandbox Code Playgroud)
或者您可以创建一个对象并以这种方式使用它:
$this->load->library('../controllers/your_controller');
$obj = new $this->your_controller();
$obj->your_function();
Run Code Online (Sandbox Code Playgroud)
希望这可以提供帮助.
基于@Joaquin Astelarra响应,我设法编写了一个名为load_controller_helper.php的小助手:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
if (!function_exists('load_controller'))
{
function load_controller($controller, $method = 'index')
{
require_once(FCPATH . APPPATH . 'controllers/' . $controller . '.php');
$controller = new $controller();
return $controller->$method();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样使用/调用它:
$this->load->helper('load_controller');
load_controller('homepage', 'not_found');
Run Code Online (Sandbox Code Playgroud)
注意:第二个参数不是必需的,因为它将运行名为index的方法,就像CodeIgniter一样.
现在,您可以在不使用HMVC的情况下在另一个控制器内加载控制器.
稍后编辑:请注意,此方法可能会产生意外结果.总是测试它!
归档时间: |
|
查看次数: |
106656 次 |
最近记录: |