CodeIgniter CRUD视图抽象

时间:2011-10-12 22:31:54

标签: php codeigniter

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

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

...'admin'是我的控制器而'app'是我的操作方法,我目前将段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. 我的一个想法是分析我正在与之交互的表,创建一个动态关联数组,定义我想要公开的字段以及它应该的表单元素的类型,然后将其传递给共同的看法。思考?缺陷?

    谢谢!

2 个答案:

答案 0 :(得分:3)

虽然我很欣赏这可能不是您问题的直接答案,但它可能为您提供设计CRUD的基础。我现在已经使用了GroceryCRUD很长一段时间了,并且基本和高级的CRUD操作都非常发誓。它的设计和构建设计得非常好,除了定制的文件结构外,它似乎可以满足您的所有需求。可以很容易地修改CRUD以合并您正在寻找的文件/网址结构。

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

答案 1 :(得分:1)

您可以extend CI_Model并使用一些reflection函数(如getProperties())来帮助您使用通用CRUD。与你提到的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);