我正在使用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 ...中添加一个新部分。别阻止。
所以我的问题是:
我的一个想法是分析我正在与之交互的表,创建一个动态关联数组,定义我想要公开的字段以及它应该的表单元素的类型,然后将其传递给共同的看法。思考?缺陷?
谢谢!
答案 0 :(得分:3)
虽然我很欣赏这可能不是您问题的直接答案,但它可能为您提供设计CRUD的基础。我现在已经使用了GroceryCRUD很长一段时间了,并且基本和高级的CRUD操作都非常发誓。它的设计和构建设计得非常好,除了定制的文件结构外,它似乎可以满足您的所有需求。可以很容易地修改CRUD以合并您正在寻找的文件/网址结构。
答案 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);