我将分享我使用 CI 的方法
- 我创建的控制器尽可能纤薄。控制器主作业只会通过
URI、_GET和_POST获取参数。然后控制器将所需的参数传递给模型,并得到结果。之后,将加载视图文件并传递视图所需的所有变量。
- 与数据库、电子邮件发送等相关的所有流程逻辑都在模型中处理。模型将获取参数,进行查询,如果需要,处理查询结果,然后返回一个数组、结果集、布尔值或整数。获取返回值的控制器直接将其传递给视图,无需对其进行重新处理。
- 在视图中,它将处理变量以显示它。将有循环显示数据列表,从数组中获取列字段然后将其显示为表单默认值等。视图和模型通常成对开发,因为视图中所有需要的字段必须由模型中的查询提供.
Controller 中唯一的“胖”处理是 form_validation。我已经在你的另一个问题中回答了,我是如何编写 form_validation 规则以及如何使用它的。
以下是我对上述问题的回答:
问。在创建新表单和您的
使用我正在创建的 CI 的 form_helper
控制器中的数组并传递
它到 view/form_input() 方法。
我应该在
控制器、视图或单独的
文件?
我很少使用 form_helper。这是因为我的大部分观点来自设计师同行或客户提供的 HTML 文件。我只使用form_dropdown,因为它允许我将选项作为数组传递,而不是foreach。对于另一个表单元素,我只使用模板文件中提供的那个。
问。在我的控制器中,我创建了一个方法
对于我的表单 即 new_user() 并在
我的视图/form_open() 我指定了一个
我的控制器中的不同方法
处理动作(即 add(),
edit(), delete() ..etc) 和那个方法
处理验证。这是
我喜欢的方式;但是,我有一个
传递数据有很多困难
如果验证失败。任何
建议?
当我创建我的应用程序时,我通常在控制器中只有 2 个主要方法。 admin 用于显示列表和处理删除,form 用于显示和处理添加和编辑。让我举一个产品模块的例子。
我将拥有使用这些方法的产品控制器:
class Product extends MY_Controller {
function index()
{
//for front page, display list of product
}
function detail()
{
//for front page, display single product detail
//product id is passed as 3rd URI segment
$id = intval($this->uri->rsegment(3));
}
function admin()
{
//for admin, display product list
//receive id in _POST then do delete
//after delete, do redirect to self, best practise
}
function form()
{
//for admin, handle add and edit
$id = intval($this->uri->rsegment(3));
//if id given and product detail data can be loaded, then it in 'edit' mode
//else it in 'add' mode
//after validation success, and insert/update success, redirect to product/admin
}
}
使用这种方法,我可以避免重复代码,并且可以使所有代码始终保持最新。几乎所有的添加和编辑都具有相同的视图和表单字段。如果添加和编辑表单不同(例如编辑用户,不允许更改用户名),通过将$mode 变量设置为add 或edit,我可以输入简单的if 并显示正确的表单,验证规则,并调用适当的模型方法。
问。我有一两个例子,当
我执行我需要的表单验证
针对两个 $_POST 变量进行验证。
一个例子是,在验证时我
需要查询数据库
确定输入的业务是否
已经存在(基于业务
名称和邮政编码)然后重定向回来
查看并保留帖子
变量。到目前为止我还不能
找到一种方法来创建自定义
回调函数这样做是因为
你只能传入一个参数。
我能够做到的唯一方法
让这个工作是如果验证
通过,然后我执行数据库
检查,如果业务存在,我把
session/flashdata 中的 $_post 和
使用重定向再次加载视图。
定义 form_input 的数组
属性调用 set_value 是
它为每个提取闪存数据的位置
记录在数组中。
您可以create your own validation rules。要传递多个参数,您可以打开文件system/libraries/Form_validation.php,然后查看function matches($str, $field) 代码。您的回调可以有多个参数,function matches($str, $field) 代码将向您展示如何读取和使用第二个参数。
我希望这将有助于您学习和使用 CI。等待您的出色网络应用程序;)