如何在cakephp中使用可选关联模型的字段创建表单

时间:2019-07-13 01:33:03

标签: php cakephp cakephp-3.0

我有以下型号:

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)

当用户要创建帖子时,我希望一个表单也可以添加至少一个文本或至少一个图像,或两者都添加。

我的理解是,由于formhelperTextsTable.phpImagesTable.php中使用了验证器,因此它根据需要标记了images.0.imagelinktexts.0.body字段。如果您确实要创建文本或图像类型的实体,则它们是必需的。但是我希望这些关联实体的创建是可选的。例如,用户应该只可以发布带有图像的帖子。

如何告诉cakephpformhelper并非每个帖子都需要文本和图像?有什么要添加到关联定义中或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;
    }

场景:

  1. 用户将一些内容写入texts.0.body中,并将某些内容写入images.0.imageLink->系统中将创建帖子,相关的文本和相关的图像。
  2. 用户仅填写texts.0.body或images.0.imagelink-> formhelper的客户端验证阻止发送表单,但我只想创建用户为其填写表单字段的关联模型。 / li>

我尝试创建两个字段,但是如果用户想同时发布带有图像和文本的帖子,则图像和文本不在同一帖子中。

0 个答案:

没有答案