cakephp添加记录并修复了一些参数

时间:2010-01-09 18:09:03

标签: mysql cakephp

我确信这种问题必须在cakephp(我最近开始使用)中很常见,但我还没有找到明确的答案。

在我的数据库中,我在一对多关系中拥有称为客户和联系人的表格(Customer hasMany Contact; Contact belongsTo Customer)。当我将记录添加到联系人表(/ contacts / add)时,我可以从包含数据库中所有客户的选择框中选择客户(customer_id)。如何设置它以便我可以先选择客户(/ customers / view / 6),然后为该特定客户添加联系人(例如/ contacts / add / 6);然后从“添加联系人”表单中删除选择框(可能用隐藏的customer_id字段替换它)?

3 个答案:

答案 0 :(得分:5)

有几种方法可以做到这一点,但我认为最好的方法是使用named parameters

基本上,在您的views / customers / view.ctp中,您将customer_id添加到contacts / add链接:

$html->link(__('Add contact', true), array('controller' => 'contacts', 'action' => 'add', 'customer_id' => $customer['Customer']['id']));

并在您的views / contacts / add.ctp中检查命名参数并使用隐藏字段:

if (isset($this->params['named']['customer_id'])) {
    echo $form->input('customer_id', array('type' => 'hidden', 'value' => $this->params['named']['customer_id']));
} else {
    echo $form->input('customer_id');
}

或已选择合适客户的选择:

echo $form->input('customer_id', array('selected' => @$this->params['named']['customer_id']));

答案 1 :(得分:1)

但是,当您想要保护字段信息时,这不是解决方案。它仍然可以被接收到不同的价值。在保存之前如何在控制器中设置它?

答案 2 :(得分:1)

要使用隐藏字段来回答安全问题,您可以使用cake的安全组件来锁定它们以防止篡改。只需将其添加到开箱即可。