我有以下型号:
Posts->hasMany('texts');
Texts has a field 'body' that is required (not null)
Posts->hasMany('images);
Images has a field 'imagelink' that is required (not null)
当用户要创建帖子时,我希望一个表单也可以添加至少一个文本或至少一个图像,或两者都添加。
我的理解是,由于formhelper
在TextsTable.php
和ImagesTable.php
中使用了验证器,因此它根据需要标记了images.0.imagelink
和texts.0.body
字段。如果您确实要创建文本或图像类型的实体,则它们是必需的。但是我希望这些关联实体的创建是可选的。例如,用户应该只可以发布带有图像的帖子。
如何告诉cakephp
或formhelper
并非每个帖子都需要文本和图像?有什么要添加到关联定义中或PostsTable.php
的验证器中吗?
如果我有一个仅具有直接位于posts模型中的字段的表单,但是当我同时具有post和关联模型的字段的一个窗体时,我可以创建一个没有任何关联模型的帖子就好了。然后formhelper
迫使我创建所有可能的关联模型的实体,每次创建基本模型的实体时,该实体的形式都具有一个字段。
最后,我还想创建用户想要的任意数量的文本和图像,但是我认为这是一个不同的问题。
这是ctp文件中的相关形式:
<?= $this->Form->create($post) ?>
<fieldset>
<?php
echo $this->Form->control('post_title');
echo $this->Form->control('texts.0.body');
echo $this->Form->control('images.0.imagelink');
?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>
TextsTable.php(ImagesTable.php基本相同)
public function validationDefault(Validator $validator)
{
$validator
->integer('id')
->allowEmptyString('id', null, 'create');
$validator
->scalar('body')
->requirePresence('body', 'create')
->notEmptyString('body');
return $validator;
}
场景:
我尝试创建两个字段,但是如果用户想同时发布带有图像和文本的帖子,则图像和文本不在同一帖子中。