【问题标题】:CodeIgniter CRUD view abstractionCodeIgniter CRUD 视图抽象
【发布时间】:2011-10-12 22:31:54
【问题描述】:

我正在使用 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() 方法能否适用于任何自动化?

我的一个想法是分析我正在与之交互的表,创建一个动态关联数组来定义我想要公开的字段以及它应该是表单元素的类型,然后将其传递给共同的看法。想法?缺陷?

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    虽然这可能无法直接回答您的问题,但它可以为您提供设计 CRUD 的基础。我已经使用 GroceryCRUD 很长一段时间了,并且非常相信它可以用于基本和高级 CRUD 操作。它的设计和构建都非常好,除了定制的文件结构外,它似乎可以提供您正在寻找的一切。

    可以轻松修改 CRUD 以合并您正在寻找的文件/url 结构。

    http://www.grocerycrud.com/

    【讨论】:

    • 太好了,谢谢。实际上,我大约一个小时前才找到 GroceryCRUD 并开始潜入。我会支持你,但还没有足够的代表。 :)
    • 获得一些代表 ;) GroceryCRUD 太棒了。请注意不要过度依赖 CRUD。它们在开发中都很好,但是我经常发现我的应用程序超出了 CRUD,我最终还是需要正确地开发它。 Grocery 的较新版本非常棒 - 可用回调和上传等负载。1-many 和 1-1 关系也很好。祝你的项目好运。
    • 刚刚浏览了我的旧帖子以查找任何未回答的帖子 - 如果答案正确,即使您还不能投票,您也可以接受。
    【解决方案2】:

    您可以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);
    

    【讨论】:

    • 太好了,谢谢。我不熟悉反射(还),但我会研究它。我会支持你,但还没有足够的代表。 :)
    • 在您想编写可重用代码时绝对有用的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    相关资源
    最近更新 更多