首页 > 解决方案 > 获取与控制器关联的表名

问题描述

我正在为数据操作编写一个非常通用的脚本。为此,我需要知道与当前控制器关联的表名。不知何故,我无法弄清楚如何得到它。


更新

通常,每个 Controller 的template/<name>目录中都有以下 PHP 文件:

  1. add.php
  2. edit.php
  3. index.php
  4. view.php

这意味着对于 20 个表,我必须维护 80 个文件,这真的很愚蠢。因此,我使用了CRUD 插件,它显着减少了它,现在我只有一个my_index.php涵盖了index.php所有受影响表的 20 个物理版本。

为了为每个表生成正确的视图,我需要表的模式,为此我需要知道表名。

所以:

任何将代码添加到正确控制器中的解决方案都不是解决方案,因为我必须使用相同的代码行再次触摸/维护 20 个文件,这绝对不是 DRY 概念。解决方案必须是my_index.php.


获取当前表名的代码是什么?

我可以按照此处所述运行此代码https://book.cakephp.org/4/en/orm/table-objects.html#getting-instances-of-a-table-class但这必须在每个控制器中运行它有点违反 DRY 概念,因为我必须手动将它添加到每个控制器中......我正在寻找一种更通用的方法。

我正在运行 CakePHP 草莓 4.1。

标签: cakephp

解决方案


您的控制器应该扩展AppController. 如果您需要视图中的模式,则AppController::beforeFilter可以在控制器中完成查找它所需的所有工作,并将其设置为视图可以使用的 $schema 变量。像这样的东西(未经测试,但应该非常接近):

public function beforeFilter(Event $event) {
    parent::beforeFilter($event);
    $this->set('schema', $this->loadModel()->getSchema());
}

推荐阅读