关联模型数据的 cakephp 3 表单验证

cakephp 3 form validation for associated model data

我需要有关验证关联模型数据的帮助。我有一个包含用户数据 (UsersTable) 的表单,其中包含来自模型公司的其他字段(用户有许多公司)。

我的表单视图如下所示:

echo $this->Form->create($contentData);
  echo $this->Form->control('User.person_name');
  echo $this->Form->control('User.email');
  echo $this->Form->control('User.phone');
  echo $this->Form->control('Companies.0.company_name'); 
  //I try Companies.company_name too
  echo $this->Form->control('Companies.0.nip');

控制器中的操作如下所示:

$userTable = TableRegistry::get('Users');
$contentData = $userTable->newEntity(null, ['associated' => ['Companies']]);

if ($this->request->is(['post', 'put'])) {

    $formData = $this->request->getData();

    $contentData = $userTable->newEntity($this->request->getData(),
        ['validate' => true, 'associated' => ['Companies']]);

    pr($contentData->getErrors());
    die();

}

不幸的是调试了 UsersTable 验证的 return 错误,CompaniesTable 除外。

你能知道我哪里错了吗?

对于主要模型(用户),您根本不需要在表单中使用模型名称。对于关联模型,约定为小写复数。

echo $this->Form->control('person_name');
echo $this->Form->control('email');
echo $this->Form->control('phone');
echo $this->Form->control('companies.0.company_name'); 
echo $this->Form->control('companies.0.nip');

无关说明:您初始化 $formData 但从未使用它,您不需要将任何参数传递给第一个 newEntity 调用,典型用法是使用 patchEntity而不是 if.

中的 newEntity