我无法验证输入表单并从该表单保存数据。我怀疑也许这些都是由关联问题引起的,虽然我不确定。
我正在使用CakePHP 2.2.0 RC2。
我有三种模式:用户,会员和地址。每个用户可以在其帐户中拥有多个成员,每个用户可以拥有多个地址(它也会记住过去的地址)。
我的模特协会是:
用户模型:
class User extends AppModel {
public $name = 'User';
public $hasMany = array(
'Member' => array(
'className' => 'Member',
'foreignKey' => 'user_id',
'order' => 'Member.member ASC',
'dependent' => true
),
'Address' => array(
'className' => 'Address',
'foreignKey' => 'user_id',
'order' => 'Address.address ASC',
'dependent' => true
)
);
...
会员模特:
class Member extends AppModel {
public $name = 'Member';
public $displayField = 'member';
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
)
);
...
地址模型:
class Address extends AppModel {
public $name = 'Address';
public $displayField = 'address';
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
)
);
...
对于我的表单创建语句,我有:
$this->Form->create( 'Member', array( 'url' => array( 'action' => 'add' ) ) );
我正在使用成员模型和控制器来处理表单,因为它只提交成员字段或成员和地址字段,具体取决于用户是否已经有地址条目(如果用户没有,则为将地址输入字段添加到表单中,否则不会。)
我没有在表单中提交任何用户字段。
现在,我希望,如果我的关联设置正确,任何模型中的任何“必需”字段旁边都会有一个星号。在成员模型和地址模型中都根据需要设置了一些字段,并且成员字段在表单上显示为必需(带星号),而地址字段则不显示。
地址模型中所需的地址字段代码示例:
public $validate = array(
'street1' => array(
'required' => array(
'rule' => array( 'notEmpty' ),
'required' => true, 'allowEmpty' => false,
'message' => 'Please enter a street address'
),
....
这是我的一些视图/表单代码:
echo $this->Form->input( 'Member.firstname', array( 'label' => 'First name', 'type' => 'text' ) );
echo $this->Form->input( 'Member.middlename', array( 'label' => 'Middle name', 'type' => 'text' ) );
echo $this->Form->input( 'Member.lastname', array( 'label' => 'Last name', 'type' => 'text' ) );
echo '<p class="bold">Please enter current address details:</p>';
echo $this->Form->input( 'Address.street1', array( 'label' => 'Street address (line 1)', 'type' => 'text' ) );
echo $this->Form->input( 'Address.street2', array( 'label' => 'Street address (line 2)', 'type' => 'text' ) );
echo $this->Form->input( 'Address.suburb', array( 'label' => 'Suburb', 'type' => 'text' ) );
...
当我在表单页面上输出$ validationErrors时(在表单提交之前),我得到了这个:
Array
(
[Member] => Array
(
)
[User] => Array
(
)
)
我假设那里也应该有[地址]部分。
我无法发现任何明显的事情,但我是CakePHP的新手(虽然我确实有PHP经验),所以任何想法都会受到赞赏。
谢谢! 彼得。
答案 0 :(得分:0)
首先,您说您正在使用Cake 2.2的候选版本(RC2)。现在有一个稳定的版本,我强烈建议你升级到它。
您使用Member
模型创建表单,但与地址没有直接关系(关联)。地址与用户相关联。如果您通过用户模型创建表单,它应该可以正常工作。
如果这种情况 - 使用用户模型创建表单 - 对您和您的应用程序不起作用 逻辑比您的数据库模型和您的模型关联是错误的,它们不符合您的业务需求。如果是这种情况,您应该考虑更改应用程序的体系结构。
关于$uses
的说明:您不必在控制器的$ uses中包含Address
模型,以便能够验证输入。 Controller :: $ uses直接在Controller本身中使用模型(控制器自己的模型除外)。例如:
public $uses = array('Article', 'News');
任何控制器中的都会使该控制器中的所有文章和新闻模型的方法都可用:
$this->Article->methodName();
或
$this->News->methodName();