【问题标题】:How to use API generated values in entity virtual fields in CakePHP?如何在 CakePHP 的实体虚拟字段中使用 API 生成的值?
【发布时间】:2021-07-08 16:04:09
【问题描述】:

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

我目前正在为我维护的一个名为 Files 的 CakePHP 应用程序编写一些新表/实体。它们代表存储在 Amazon S3 中的存储桶上的图像。 Files 包含一个名为“Key”的值,它或多或少是 Cake 中我的实体所代表的文件的文件名,与 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 术语)交换为指向 S3 上资源的 pre-signed url。这个预签名的 url 需要显示在任何文件实体上。

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

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

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

提前致谢!

【问题讨论】:

    标签: php amazon-web-services amazon-s3 cakephp cakephp-3.0


    【解决方案1】:

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

    我认为模型(或类似表格的对象)更适合放置此类代码。
    您可能会发现这个问题对这一点很有用:Cakephp 3 - How to integrate external sources in table?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      相关资源
      最近更新 更多