2016-06-29 24 views
0

這是一個設計問題。Cakephp 3 - 通過多種表單/動作構建實體

我正在嘗試在cakephp3中建立預訂系統。

我從來沒有做過這樣的蛋糕之前。

我認爲最好的方式可能是 - 如帖子標題所示 - 通過多種形式/動作建立實體。

喜歡的東西選擇位置 - >輸入客戶詳細信息 - >輸入特殊要求 - >查看全部細節,並支付

因此,每個這些階段的成爲我的預訂控制器內的行動。每個動作的視圖將其內容提交給鏈中的下一個動作,並將補丁實體與請求數據一起使用,並將結果發送到新動作的視圖。

我開始懷疑這是否是一種好方法。一個重要的問題是,來自以前每個操作的數據必須存儲在隱藏字段中,以便可以使用當前操作的新數據重新提交。

我希望以前操作的數據以只讀方式可見,所以我使用了傳遞給視圖的實體來填充HTML表格。這很好,它工作正常,但不得不在隱藏的字段中存儲相同的數據不是一個很好的方式來做到這一點。

我希望這是有道理的!

無論如何,我想我會在這裏發佈一些設計指導,因爲我覺得可能有更好的方法來做到這一點。我曾考慮過在數據庫中創建臨時記錄,只是傳遞身份證,但我希望我不必這樣做。

這裏的任何建議將非常感激。

乾杯。

+0

如果您不想將其存儲在數據庫中並傳遞該ID,則幾乎只剩下會話。您可以通過JS將它存儲在瀏覽器本地存儲中,但我不認爲這是一個非常可靠的解決方案。 – burzum

回答

0

我只是將實體存儲在數據庫中,然後繼續處理其他視圖,從數據庫中獲取數據。僞代碼:

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 ... 
    } 
+0

嗨,感謝您的回覆。我已經按照你的建議來完成它,並且效果很好。設置起來非常快,我通過刪除一些驗證規則修復了唯一的問題。乾杯 –

+0

很高興我能幫助:)乾杯 –