我有扩展ORM的Model_Group。
我有一个获得新ORM的Controller_Group:
public function before()
{
global $orm_group;
$orm_group = ORM::factory('Group');
}
...它有各种方法使用它来获取不同的数据子集,例如......
public function action_get_by_type()
{
global $orm_group;
$type = $this->request->param('type');
$result = $orm_group->where('type', '=', $type)->find_all();
}
然后我有另一个控制器(在一个单独的模块中),我想用它来操纵对象并调用相关的视图。我们称之为Controller_Pages。
$orm_object = // Get the $result from Controller_Group somehow!
$this->template->content = View::factory( 'page1' )
->set('orm_object', $orm_object)
将ORM对象从Controller_Group传递到Controller_Pages的最佳方法是什么?这是一个好主意吗?如果没有,为什么不,以及有什么更好的方法呢?
将它们分成不同控制器的原因是因为我希望能够从其他模块中重用Controller_Group中的方法。每个模块可能希望以不同的方式处理对象。
答案 0 :(得分:1)
这是我这样做的方式,但首先我要注意你不应该在这种情况下使用global
。
如果要在before
函数中设置ORM模型,只需在控制器中创建一个变量并像这样添加它。
public function before()
{
$this->orm_group = ORM::factory('type');
}
在您的Model
中,您还应添加访问数据的功能,并使控制器尽可能小。你的ORM模型可能看起来像这样。
public class Model_Group extends ORM {
//All your other code
public function get_by_type($type)
{
return $this->where('type', '=', $type)->find_all();
}
}
在你的控制器中你可以做这样的事情。
public function action_index()
{
$type = $this->request->param('type');
$result = $this->orm_group->get_by_type($type);
}
我希望这会有所帮助。
答案 1 :(得分:1)
我总是为这样的东西创建一个帮助类
Class Grouphelper{
public static function getGroupByType($type){
return ORM::factory('Group')->where('type','=',$type)->find_all();
}
}
现在,您可以按类型获取所需的组:
Grouphelper::getGroupByType($type);