如何在 CakePHP 的实体虚拟字段中使用 API 生成的值?

How to use API generated values in entity virtual fields in CakePHP?

注意:尽管我的问题完全是关于 CakePHP 结构的,但我正在努力在这个问题中安装 AWS PHP SDK api connection。如果您不熟悉 AWS,我使用的任何 AWS 术语都应该非常简单,并且只是为了演示我 运行 遇到的 Cake 问题。

我目前正在为我维护的名为 Files 的 CakePHP 应用程序编写一些新的 tables / 实体。它们代表存储在 Amazon S3 存储桶中的图像。 Files 包含一个名为 'Key' 的值,它或多或少是 Cake 中 my 实体表示的文件的文件名,与 S3 上的文件名匹配。实体看起来像这样:

<?php

class File extends Cake\ORM\Entity
{
    protected $_accessible = [
        'file_name' => true,
        'key' => true,
        'unique_id' => true,
        'email_task_message_id' => true,
        'email_task_message' => true,
    ];
}

我正在集成 AWS PHP SDK,它允许我将存储桶的名称和文件名(在上面称为键,以匹配 AWS 术语)交换指向资源的 pre-signed url S3。此预签名 url 需要显示在所有文件实体上。

我想知道我应该在哪里将 AWS PHP SDK 调用集成到 Cake 模型结构中?

我想作为 Cake Virtual Field 在文件实体(上图)上执行此操作。但是在一个查询中实际上可以包含数百个文件,因此据我所知,这将导致虚拟字段重新连接到每个文件的 API 。所以我需要一些方法来将包含 AWS PHP SDK 连接的变量的已实例化版本注入到生成时的实体中。

或者通过对 table 代表文件实体 FilesTable 的行为的初始化调用以某种方式修改它更有意义吗?

提前致谢!

我不会在虚拟字段中执行主动查找。我认为只将它用于简单的事情更传统,数据已经存在。

我认为模型(或类似 table 的对象)更适合table这样的代码。
您可能会发现这个问题对这一点很有用:

您可以创建自己的查找器(整齐地隐藏在行为中以对您的逻辑进行分组),按以下顺序将您的 AWS 数据与数据库数据结合起来:

  1. 收集数据库数据,生成查找键数组
  2. 使用键数组执行单个远程查找
  3. 将远程数据与数据库数据合并。