【发布时间】:2011-08-22 05:09:12
【问题描述】:
这个问题的简短版本是:
如何获取仅存在于数组中的数据(即:尚未保存在模型中)并将其与模型中的 $this->find('list') 数组中的值相关联?
这个问题的长版本是:
我正在使用 CakePHP 和 Wizard Component 进行 3 步申请表。
三个表单步骤是联系方式、课程和详细信息。
在这些步骤之后,有一个“审查”步骤,我想显示前 3 个表单步骤中的所有提交,以便用户在按下提交之前最后一次检查。在大多数情况下,这非常有效。我只需要在控制器中执行以下操作:
function _prepareReview() {
$contact = $this->Wizard->read('contact');
$course = $this->Wizard->read('course');
$details = $this->Wizard->read('details');
$this->set(compact('contact','course','details'));
}
然后,在 review.ctp 中,我可以引用 $contact['Contact']['firstname']; 之类的内容来获取此人的名字等。
但是,问题在于从“相关”模型中获取数据。例如,有一个“国籍”字段,它只是一个 ID。在“详细信息”步骤中,我使用find('list') 从 Nationality 模型中获取所有国籍的列表,作为正确显示的下拉菜单,然后 Cake 保存相应的 ID。
但是,当我进入向导组件中的“审查”步骤时,我只能从向导组件的数组中获取实际 ID。我真的不能指望得到其他任何东西。
我看不到任何明显的方法可以从向导组件的上下文中访问$details[Detail][Nationality][name](或类似的东西),因为设置递归不起作用,因为在这个阶段数据实际上不在模型中,它只是一个表单数据数组。
所以,换句话说,我有一个数组中的数据(不是来自模型,而是来自表单提交),如下所示:
Array
(
[Details] => Array
(
[firstname] => Test
[nationality_id] => 3
)
)
然后我有来自$this->Detail->Nationality->find('list') 的以下内容,如下所示:
Array
(
[0] => American
[1] => Australian
[2] => British
[3] => Canadian
)
那么我怎样才能从向导组件中获得$details['Details']['nationality_id']; 以显示“加拿大”而不是“3”?当只有一个数组来自模型时,如何建立关系?我只需要这个来暂时向用户确认所有数据。当然,一旦用户按下提交,id '3' 就会被写入模型,这已经正常工作了。
或者这是一种完全疯狂的做事方式,我应该考虑一种完全不同的方法,例如先保存数据?不过,我真的不想在用户点击最终提交之前保存它。
【问题讨论】:
标签: cakephp