CakePHP中的相关模型不显示验证消息

时间:2010-09-26 08:08:21

标签: validation cakephp

我有一组看起来有点像这样的模型

     
  • 会员  
        
    • Member_Addresses
    •   
    • 代理   
           
      • AgentAddress
      •   
        
    •  
     

我还有一个表单,试图让您以一种形式更新所有这些不同的模型。我对在CakePHP中制作表单的方式有点新,而且我无法在表单中显示验证错误消息。

我的表单看起来像这样:

<?php echo $this->Form->create('Member',array('type' => 'file'));?>
<fieldset>
<?php
    echo $this->Form->input('first_name');
    echo $this->Form->input('last_name');
?>
</fieldset>
<fieldset>
    <?
    echo $this->Form->input('MemberAddress.0.line_1');
    echo $this->Form->input('MemberAddress.0.city');
    echo $this->Form->input('MemberAddress.0.state');
    echo $this->Form->input('MemberAddress.0.zip');
    ?>
</fieldset>
<fieldset>
<?
    echo $this->Form->input('MemberAddress.1.line_1');
    echo $this->Form->input('MemberAddress.1.city');
    echo $this->Form->input('MemberAddress.1.state');
    echo $this->Form->input('MemberAddress.1.zip');
?>
</fieldset>
<fieldset>
    <?
    echo $this->Form->input('Agent.0.agent',array('type'=>'text'));
    echo $this->Form->input('Agent.0.agency');
    echo $this->Form->input('Agent.0.email');
    echo $this->Form->input('Agent.0.phone');
    ?>
</fieldset>
<fieldset>
<?  
    echo $this->Form->input('Agent.0.AgentAddress.line_1');
    echo $this->Form->input('Agent.0.AgentAddress.city');
    echo $this->Form->input('Agent.0.AgentAddress.state');
    echo $this->Form->input('Agent.0.AgentAddress.zip');
?>
</fieldset>
<?php echo $this->Form->end('Submit');?>

此表单的要点是用户配置文件(成员),带有两个地址槽(MemberAddress),以及“代理”的联系信息......代理模型是Agent和AgentAddress。我正在为MemberAddresses使用hasMany关系,但只允许用户提供两个地址。

我收到了顶级会员模型的验证消息,但我没有收到相关模型的验证消息。在我的控制器中,我决定不使用saveAll()因为使用MemberAddress.0和MemberAddress.1项,当将第二个MemberAddress(MemberAddress.1)留空时,我将无法保存任何内容。所以我将saveAll()更改为save,将保存逻辑推送到MemberAddress模型,然后从模型中的MemberAddress-&gt; update()调用返回一个布尔值,表示成功或失败。

如何为MemberAddress和代理模型(代理和代理地址)冒泡验证错误消息?

1 个答案:

答案 0 :(得分:2)

如果您不想使用saveAll,则只能用于验证,例如:

if($this->Member->saveAll($this->data, array('validate'=>'only'))){
   //your custom save function
}

验证的问题是错误需要附加到正确的表单元素,并且当您使用一些自定义保存功能时,错误会附加到MemberAddress.city,而它们需要附加到MemberAddress.0 。市。