2010-01-26 136 views
2

我有几个关于CI应用程序设计的问题。Codeigniter应用程序设计

问:当创建一个新窗体并使用CI的form_helper时,我在控制器中创建数组并将其传递给view/form_input()方法。我应该在控制器,视图还是单独的文件中执行此操作?在我的控制器中,我为我的表单创建一个方法,即new_user(),并在我的view/form_open()中指定一个不同的方法来处理动作(即add() ,编辑(),删除()..等)&该方法处理验证。这是我推崇的方式;然而,如果验证失败,我很难传递数据。有什么建议么?

问:我有一个或两个实例,当我执行表单验证时,我需要验证两个$ _POST变量。一个例子是,在验证时,我需要查询数据库以确定输入的业务是否已经存在(基于业务名称和邮政编码),然后重定向回视图并保留后变量。到目前为止,我还没有找到一种方法来创建自定义回调函数,因为您只能传入一个参数。我已经能够实现这个工作的唯一方法是验证通过,然后执行数据库检查,如果业务存在,我将$ _post放入session/flashdata中,并使用重定向重新加载视图。定义form_input属性的数组调用set_value,因为它是为数组中的每个记录提取flashdata的地方。

$data['name'] = array(
    'name'  => 'name', 
    'id'  => 'name', 
    'value' => set_value('name', $this->session->flashdata('name')), 
    'maxlength' => '200', 
    'size'  => '79', 
    'class' => 'text' 

我意识到这真的归结为偏好;不过,我真的很想了解我可以预期的缺陷以及其他人如何设计他们的应用程序。我已经下载了示例应用程序,并且我搜索了大量搜索内容,但我还没有找到太多的讨论。任何建议,非常感谢。

谢谢!

回答

4

我会使用CI

  1. 我创建控制器一样苗条尽可能分享我的做法。控制器主要作业只能通过URI_GET_POST获取参数。然后控制器将所需的参数传递给模型,并得到结果。之后,视图文件将被加载,视图所需的所有变量将被传递。
  2. 在模型中处理与数据库,电子邮件发送等相关的所有过程逻辑。模型将获取参数,执行查询,如果需要则处理查询结果,然后返回数组,结果集,布尔值或整数。获取返回值的控制器直接通过它来查看,而无需重新处理它。
  3. 在视图中,它将处理变量以显示它。将有循环显示数据列表,从数组中获取列字段,然后将其显示为表单默认值等。视图和模型通常是以成对方式开发的,因为视图中所有需要的字段必须由模型中的查询提供。

Controller中唯一的'胖'处理是form_validation。我在你的其他问题中回答了它,我如何编写form_validation规则以及如何使用它。

下面是我上面你的问题的答案:

Q.当使用CI的form_helper创建一个新表单和你的 时,我在控制器中创建 数组,并将 传递给view/form_input()方法。 我应该在 控制器,视图或单独的 文件中执行此操作吗?

我很少使用form_helper。这是因为我的大部分观点来自同事设计师或客户提供的HTML文件。我只使用form_dropdown,因为它允许我将选项作为数组传递,而不是做foreach。对于其他表单元素,我只使用模板文件中提供的表单元素。

Q.以我控制器,I创建一个方法 用于我的形式即new_user()和 我的视图/ form_open()我在我的控制器指定 不同的方法来处理 动作(即,add(), edit(),delete()..等)&该方法 处理验证。这是我所推崇的方式 ;然而,如果验证失败,我的 难以传递数据 。任何 建议?

当我创建我的应用程序时,我通常在控制器中只有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变量设置为addedit,我可以放置简单的if并显示正确的表单,验证规则并调用相应的模型方法。

问:我有一个实例或两个,当 我执行表单验证,我需要 验证对两名$ _ POST变量。 一个例子是,在验证我 需要查询数据库 确定进入商务 已经存在(基于灭商 姓名和邮政编码),然后重定向回 的观点,坚持岗位 变量。到目前为止,我还没有能够 找到一种方法来创建自定义 回调函数来执行此操作,因为 只能传入一个参数。 ,我已经能够 得到这个工作的唯一方法是,如果验证 传球,然后我执行数据库 检查,如果商家出现我把 的$ _ POST会话/ flashdata和 使用重定向加载再次查看。 定义form_input 属性的数组调用set_value,该值为 ,其中它为数组中的每个 记录提取flashdata。

您可以create your own validation rules。要传递多个参数,您可以打开文件system/libraries/Form_validation.php,然后查看function matches($str, $field)代码。您的回叫可以有多个参数,并且function matches($str, $field)代码将告诉您如何读取和使用第二个参数。

我希望这会帮助你学习和使用CI。等待你的伟大的Web应用程序;)

0

Q.当创建一个新的窗体和你使用CI的form_helper时,我在控制器中创建数组并将其传递给view/form_input()方法。我应该在控制器,视图还是单独的文件中执行此操作?

A. Form_Helper应该始终在“查看”中使用。在我的控制器中,我为我的表单创建一个方法,即new_user(),并在我的view/form_open()中指定一个不同的方法来处理动作(即add() ,编辑(),删除()..等)&该方法处理验证。这是我推崇的方式;然而,如果验证失败,我很难传递数据。有什么建议么?

答:我的方法是在save()方法中直接添加/编辑()到save()中,如果两者都使用其他方法。

问:我有一个或两个实例,当我执行表单验证时,我需要验证两个$ _POST变量。一个例子是,在验证时,我需要查询数据库以确定输入的业务是否已经存在(基于业务名称和邮政编码),然后重定向回视图并保留后变量。到目前为止,我还没有找到一种方法来创建自定义回调函数,因为您只能传入一个参数。我已经能够实现这个工作的唯一方法是验证通过,然后执行数据库检查,如果业务存在,我将$ _post放入session/flashdata中,并使用重定向重新加载视图。定义form_input属性的数组调用set_value,因为它是为数组中的每个记录提取flashdata的地方。

A.我建议你使用$ this-> input-> post instant使用$ _POST,因为如果你启用它,CI将帮助你过滤XSS。 PHP不支持is_POST像.NET,我要做的就是用一个文本框作为参考

if(isset($_POST('txt_Name'))) 
{ 

} 
**or** 
if($this->input->post('txt_Name')) 
{ 

} 

希望我的回答能帮助你。

+0

if($ this-> input-> post('field)!== FALSE)是一样的东西。 – 2010-01-26 11:47:55