【问题标题】:Cakephp 3 - Building an entity over several forms/actionsCakephp 3 - 在多个表单/动作上构建实体
【发布时间】:2016-06-29 08:16:39
【问题描述】:

这是一个设计问题。

我正在尝试在 cakephp3 中构建一个预订系统。

我以前从来没有用蛋糕做过这样的事情。

我认为最好的方法可能是——正如帖子标题所暗示的——在多个表单/动作上建立一个实体。

选择位置 -> 输入客户详细信息 -> 输入特殊要求 -> 查看完整详细信息并付款

因此,这些阶段中的每一个都成为我的预订控制器中的一个操作。每个动作的视图将其内容提交给链中的下一个动作,我使用带有请求数据的补丁实体,并将结果发送到新动作的视图。

我开始怀疑这是否是一个好方法。一个重要的问题是,之前每个操作的数据都必须存储在隐藏字段中,以便可以与当前操作的新数据一起重新提交。

我希望以前操作的数据以只读方式可见,因此我使用了传递给视图的实体来填充 HTML 表。这很好,而且工作正常,但必须在隐藏字段中存储相同的数据并不是一个很好的方法。

我希望这是有道理的!

无论如何,我想我会在这里发布一些设计指导,因为我觉得可能有更好的方法来做到这一点。我曾考虑在数据库中创建临时记录并仅传递 id,但我希望不必这样做。

这里的任何建议将不胜感激。

干杯。

【问题讨论】:

  • 如果您不想将其存储在数据库中并传递 id,那么几乎只剩下会话了。您也可以通过 JS 将其存储在浏览器本地存储中,但我认为这不是一个非常可靠的解决方案。

标签: cakephp


【解决方案1】:

我只是将实体存储在数据库中,然后继续您的其他视图,从数据库中获取数据。伪:

    public function chooseLocation() {
        $ent = new Entitiy();

        patchEntity($ent,$this->request->data);
        if save entity {
            redirect to enterCustomerDetails($ent[id]);
        }
    }

   public function enterCustomerDetails($id) {
     $ent = $this->Modelname->get($id);
     // patch, save, redirect again ...
  }

【讨论】:

  • 您好,感谢您的回复。我已经按照您建议的方式完成了它,并且效果很好。设置起来非常快,我唯一遇到的问题是通过删除几个验证规则来解决的。干杯
  • 很高兴我能帮上忙 :) 干杯
猜你喜欢
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2018-06-14
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多