cakephp - 获取与控制器关联的表名
问题描述
我正在为数据操作编写一个非常通用的脚本。为此,我需要知道与当前控制器关联的表名。不知何故,我无法弄清楚如何得到它。
更新
通常,每个 Controller 的template/<name>
目录中都有以下 PHP 文件:
add.php
edit.php
index.php
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。
解决方案
您的控制器应该扩展AppController
. 如果您需要视图中的模式,则AppController::beforeFilter
可以在控制器中完成查找它所需的所有工作,并将其设置为视图可以使用的 $schema 变量。像这样的东西(未经测试,但应该非常接近):
public function beforeFilter(Event $event) {
parent::beforeFilter($event);
$this->set('schema', $this->loadModel()->getSchema());
}
推荐阅读
- c - 为什么我的二维数组中元素的内存位置在 C 中不断变化?
- javascript - 表单不刷新就提交(仅限 Vanilla JS)
- neo4j - neo4j apoc.load.json:从目录加载所有文件
- node.js - HTTP 事件云函数:请求正文值未定义
- c - 为什么我的程序跳过了我的第一个循环?
- c - 冒泡排序递归没有循环
- sql-server - 如何向 SQL Server 发送命令完成从 VB.Net 程序发送的选择查询开始的批处理?
- html - 如何使用引导程序创建左侧导航栏?
- c# - 使用 xUnit 框架在 C# Net Core 2.1 Function App 中进行模拟
- java - 使用反射加载随机类并将其注册为springboot中的组件