0

我正在创建一个自定义烘焙模板,我想获取 DB 表列类型,并在控制器文件位置注释:Template\Bake\Element\Controller\index.twig,当我使用{% set fields = Bake.filterFields(fields, schema, modelObj) %}我已经使用的代码时在文件Template\Bake\Element\form.twig上找到,它返回显示字段的错误,架构为 NULL。

有人可以帮助我如何获取数据库表列类型以及对控制器文件的评论吗?因为我想在 Bake 命令生成的记录集中添加一个 FIELDS ARRAY。

CakePHP v3.8.2 和 Bake v1.x

谢谢。

4

1 回答 1

1

Controller命令不会为视图设置架构或其列,您必须通过modelObj模板内部的表对象 ( ) 自行获取:

{% set schema = modelObj.getSchema() %}
{% set fields = schema.columns() %}
{% set fields = Bake.filterFields(fields, schema, modelObj) %}

或者为事件使用事件监听器,该监听器Bake.beforeRender.Controller.controller在控制器模板被渲染之前被调度,并允许您访问视图及其变量:

// in config/bootstrap_cli.php

use Cake\Event\Event;
use Cake\Event\EventManager;

EventManager::instance()->on(
    'Bake.beforeRender.Controller.controller',
    function (Event $event) {
        /** @var \Cake\View\View $view */
        $view = $event->getSubject();

        /** @var \Cake\ORM\Table $table */
        $table = $view->get('modelObj');

        $schema = $table->getSchema();
        $fields = $schema->columns();

        $view->set(compact('schema', 'fields'));
    }
);

也可以看看

于 2020-10-21T16:22:11.103 回答