2011-10-12 68 views
3

我正在用CodeIgniter构建一个CMS,并且我很难理解处理各种CRUD视图的最佳方法。鉴于我的网址类似于...CodeIgniter CRUD查看抽象

mydomain.com/admin/app/content/pages/edit

...其中“管理员”是我的控制器和“应用”是我的操作方法,我目前地图段3,4,5到实际的目录/文件,就像这样:

/views 
    /admin 
     /content 
      /pages 
       list_view.php 
       edit_view.php 
       add_view.php 
      /banners 
       list_view.php 
       edit_view.php 
       add_view.php 

一个需要注意的是,我需要调用根据不同的非CRUD模型方法上的页面被调用,所以我app()动作方法开始有一个讨厌的if..else块。另外,由于表格数据不同,每个部分的视图都会有所不同,所以我不知道如何避免出现一堆视图页面。显然,所有这一切的缺点是1)我重复了很多代码,并且2)如果我添加一个新的管理部分,我必须在物理上创建一大堆新的目录并添加一个新的部分给if ...别的块。

所以我的问题是:

  1. 我怎样才能减少目录和我创建视图页面的数量?
  2. 方法list_fields() or field_data()是否适用于任何自动化?

我有一个想法是轮廓我与交互的表,创建一个动态关联数组定义的字段我要揭露以及它应该是形式元素的类型,然后传递以共同的观点。思考?缺陷?

谢谢!

回答

3

虽然我明白这一点可能不会直接回答你的问题,它可以为您提供基础上设计您的CRUD。我已经使用了GroceryCRUD很长一段时间了,对于基本的和高级的CRUD操作,它几乎发誓。它的设计和构建非常好,除了定制的文件结构之外,它似乎可以提供您所需要的所有功能。 CRUD可以很容易地修改,以结合你正在寻找的文件/网址结构。

@ see http://www.grocerycrud.com/

+0

太好了,谢谢。实际上,我刚刚在一个小时前发现了GroceryCRUD,并开始潜入。我会赶上你,但还没有足够的代表。 :) – Marlorn

+0

得到一些代表;)GroceryCRUD是太棒了。只是要小心,不要过分依赖CRUD。他们都很好,很好的开发,但我经常发现我的应用程序超过了CRUD,我最终需要正确地开发它。Grocery的更高版本虽然很好 - 可用的回调和上传等等。1-many和1-1关系也不错。祝你的项目好运。 –

+0

刚刚查看了我的旧帖子,发现任何未回复的帖子 - 即使您无法顺利登录,您也可以接受答案。 –

1

您可以extend CI_Model并使用一些reflection函数,如getProperties()来帮助您的通用CRUDs。结合CI的list_fields()就像你提到的那样,你可以创建一些通用页面来实现这一点。

可以处理表单数据的任何对象的例子可能是

function processForm() { 
    $props = $this->self->getProperties(ReflectionProperty::IS_PUBLIC); 
    foreach ($props as $prop) : 
     $prop->setValue($this,$this->input->post($prop->getName())); 
    endforeach; 
} 

其中

$this->self = new ReflectionClass($this); 
+0

太好了,谢谢。我并不熟悉反思(但),但我会研究它。我喜欢你,但还没有足够的代表。 :) – Marlorn

+0

当你想要编写可重复使用的代码时,绝对有用的东西。 – dispake