在 CakePHP 3 中为表分配一个 human-readable 和动态可检索的标题或别名

Assign tables a human-readable, and dynamically retrievable, title or alias in CakePHP 3

出于为 CMS 创建动态菜单的目的,我需要能够检索给定模型的关联,以及对于每个关联模型,在 [=25= 中表示它的字符串] 形式。因此,例如,如果我有一个 Articles table,其中有许多 Hostedimages,我可以通过

动态获取该关联信息

$this->Articles->associations()->keys()

但是,这给了我字符串 Hostedimages,而当然,对于 UI 我想要 Hosted Images

我假设我可以将此字符串存储在 Hostedimages 模型中的某个位置。有人知道如何实现吗?

keys() 应该 return 所有小写名称 IIRC,即 hostedimages,这就是关联集合在内部使用它们以确保唯一性的方式。

当然可以给 table 对象赋值,但是 table 可以在多个关联中使用,所以效果不太好,而 table也不需要了解任何有关表示层的信息。

理想情况下,您会坚持 CakePHP 命名约定并使用驼峰命名,即命名您的 association/table HostedImages,然后您可以在关联名称上使用变形器:

$associations = $this->Articles->associations();
$readableNames = collection($associations)
    ->map(function (\Cake\ORM\Association $association) {
        return \Cake\Utility\Inflector::humanize(
            \Cake\Utility\Inflector::underscore($association->getName())
        );
    })
    ->toList();

另见