【问题标题】:Best practise for handling form submission in controllers在控制器中处理表单提交的最佳实践
【发布时间】:2011-05-02 20:19:43
【问题描述】:

例如,我正在创建一个在线商店。我有一个名为 products 的控制器,在该控制器中我有一个名为 create_product 的函数。 Create_product 调用一个视图,该视图显示一个表单,用户可以在其中将新产品输入数据库。

当用户填写表单创建产品时,我是否应该将操作发送回 create_product 控制器并使用 IF 语句进行处理?还是卸载到另一个函数?

例子

<form method="post" action="www.example.dev/products/create_product/add"> 
//the above form would post back to the original controller

function create_product()
{
    if(uri->segment(3) == "add")
    {
        //call a model to do all the database stuff
    }

    load->view->create_product_form;
}

这是处理此问题的最佳方法还是应该将其传递给另一个函数?

【问题讨论】:

    标签: php model-view-controller forms controllers


    【解决方案1】:

    不要在一个函数中使用 URI 段来过滤大量内容。 createProduct() 可以列出可用于创建的产品(我假设以 CRUD 格式),并且表单的提交应该使用 POST 数据 ping 另一个控制器。也许是 insertProduct(),其中数据被清理并发送到模型以插入到数据库中。

    关注点分离!使用良好的函数名称描述符使函数尽可能分开。

    【讨论】:

    • 干杯凯尔,我喜欢这种方法。我知道我正在做的不是最好的方法,但不确定该走哪条路。这很有意义:)
    • 没问题。附带说明一下,请务必使用 site_url() 或您的 MVC 包允许保持 POSTing URL 干净的任何函数。你的代码看起来像 CodeIgniter,所以我建议使用 site_url()。
    • 是的,我确实使用了 base_url 类型的函数。我曾经使用过codeigniter,但目前正在使用FuelPHP
    【解决方案2】:

    我(个人)将拥有一个设置表单参数并使用该表单“启动”视图的函数,以及另一个用于验证和调用模型以将该表单的值放入数据库的函数。我相信这完全取决于您,但是如果您根据控制器的实际功能将控制器划分为多个功能,代码会更清晰。

    【讨论】:

      【解决方案3】:

      我喜欢 symfony 处理表单和表单提交的方式。它在一个功能(动作)中

      简化代码:

      executeCreate() {
      $this->form = new Form()
      if($r->isMethod('POST')) {
          //handle submission
          bind();
          save();
      }
      

      【讨论】:

        猜你喜欢
        • 2020-11-12
        • 2019-01-07
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        • 2012-03-03
        • 2017-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多