CakePHP 3.10添加一个名称中带有'_id'的Form字段,自动使其成为一个选择字段

9jyewag0  于 2022-11-11  发布在  PHP
关注(0)|答案(1)|浏览(175)

CakePHP 3.10添加一个表单字段与'_id'在名称中,自动使其成为一个选择字段。我想知道,如果这是在我们的应用程序中做的事情,特别是由以前的开发人员,如果是这样,我会如何/在哪里看?
或者,如果它是一个CakePHP的东西,我可以在哪里得到它的文档?
控制器:

public function add()
{
    $building = $this->Buildings->newEntity();
    if ($this->request->is('post')) {
        //code for after form submission
    }

    $this->set(compact('building'));
}

查看方式:

<div>        
        <?= $this->Form->create($building) ?>
        <fieldset>
            <legend><?= __('Add Building') ?></legend>
            <?php
                echo $this->Form->control('test_id'); <!-- this field type will be a select field -->               
                echo $this->Form->control('name');
            ?>
        </fieldset>
        <?= $this->Form->button(__('Submit')) ?>
        <?= $this->Form->end() ?>
    </div>
dgjrabp2

dgjrabp21#

如果您阅读此V3文档,您可以看到:
您可以在这里查看更多信息,也可以在这里查看更多信息。
所以,这是因为cakephp理解你在Buildings模型和Test模型之间有一个belongsTo或者hasOne关联。
如果你在buildings表中有一个test_id列,你就告诉cakephp测试表有一个或者有很多buildings/s。
您可以使用以下条件强制使用表单帮助程序类型:

$this->Form->control('test_id', ['type' => 'text']);

额外注意:当您遇到这种情况时,可以使用虚拟字段来显示该建筑物所属的test_id。例如:您可以显示测试名称和作者名称的连接(假设这两个字段存在于测试表中),如下所示:
转换为测试实体. php

namespace App\Model\Entity;

use Cake\ORM\Entity;

class Test extends Entity
{
    protected function _getTestIndicator()
    {
        return $this->name . '  ' . $this->author_name;
    }
}

进入视图:

echo $user->test_indicator;

相关问题