2012-03-02 87 views
0

我使用Codeigniter和MVC模式创建应用程序。 我现在想创建一个可重用的管理工具,用于不同的对象,如条目,用户,类别。我需要跨越不同的控制器和视图以及多个时间的特定工具集。MVC和在模型中查看

我希望能够调用类似$this->load_admin_tools($name,$data)其中$name将成为工具集的名称(这将只是一个HTML表单)和$data必要的变量来处理那些形式(最有可能$id的对象)。

我想这样做,这样我就可以在一个地方添加或删除一些工具。

我想创造一个model_admin_tools,我将检查的权限是否应显示工具,然后装入适当的视图(表格删除/编辑/ etc)。我知道那些应该是一个控制器(为了检查权限,然后决定是否显示某些东西),但是一遍又一遍地重复相同的代码,这对我来说比将它们放在模型中是最糟糕的。我可以在控制器中创建私人功能,但是我不得不将这个功能放在我的所有控制器中。

有没有更好的方法来实现这一目标?我在想助手,但同样,助手不是为了“观看”。或者,我可能太委婉?

在此先感谢。

回答

1

在视图中使用助手并不差。我一直在我的视图中使用的一个助手是url助手。

如果你想一组可以在多台控制器可以使用的工具,只需要创建一个模型,做什么,然后在每个控制器可以只加载模型,然后调用该函数。这就是模型的目的是被重用。

而且 - 你可以通过第三个参数设置为true,返回一个视图作为变量。看到这个页面的最下方:http://codeigniter.com/user_guide/general/views.html

示例控制器方法:

public function method() 
{ 
    $this->load->model('myModel'); 
    $var = $this->myModel->modelMethod(); 

    if($var == true) { 
     $data['sectionOne'] = $this->load->view('myView', '', true); 
    } 

    $this->load->view('layout', $data); 

} 
+0

是的,我用的帮手所有的时间,但我不加载在其中的视图。澄清。我想为用户操作加载5个不同的html表单(如编辑/删除/禁止等)。所以我需要检查它是否应该加载和什么样的形式。然后我需要加载适当的HTML表单(视图)。所以最后,它将是模型中的$ this-> load-> view('user_delete_form')。而且我知道这应该在Controller中完成。这就是为什么我有点困惑,我不知道是否有更好的方式来做到这一点。 – user1245750 2012-03-02 19:04:29

+0

看我编辑的答案,看看是否有助于回答你的问题。 – Catfish 2012-03-02 19:09:22

+0

这不完全是我想要实现的,因为这样我就不得不调用模型,检查结果,然后加载视图。该代码块将在控制器上执行很多次);理想情况是将该代码放到一个函数中(如模型中),然后调用它。但是这样我就可以在模型中使用'load-> view()'。我不知道是否有可能需要检查。我的意思是,我可以在视图中创建切换,并基于第二个参数来加载显示我需要的视图。即使我不能用一行代码来做(检查,加载需要的视图)3行比20好得多 – user1245750 2012-03-02 19:31:34