Kohana - 在控制器之间传递ORM对象的最佳方法?

时间:2013-10-30 13:23:52

标签: orm controller kohana-3 hmvc kohana-orm

我有扩展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中的方法。每个模块可能希望以不同的方式处理对象。

2 个答案:

答案 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);