0

如何将文件存储在 drupal 实体中?我有一个要与用户关联的公共密钥,因此我创建了一个 APIuser 实体,但我不知道公共密钥属性赋予什么样的字段

function api_user_schema() {
    $schema['api_user'] = array(
    'description' => 'The base table for api_user.',
    'fields' => array(
        'id' => array(
            'description' => 'The primary identifier for an artwork.',
            'type' => 'serial',
            'unsigned' => TRUE,
            'not null' => TRUE,
        ),
        'public_key' => array(
            'description' => 'The primary identifier for the public key.',
            'type' => ???,
            'unsigned' => TRUE,
            'not null' => TRUE,
        )
        'created' => array(
            'description' =>
            'The Unix timestamp when the api_user was created.',
            'type' => 'int',
            'not null' => TRUE,
            'default' => 0,
        ),
        'changed' => array(
            'description' =>
            'The Unix timestamp when the api_user was most recently saved.',
            'type' => 'int',
            'not null' => TRUE,
            'default' => 0,
        ),
    ),
    'unique keys' => array(
        'id' => array('id')
    ),
    'primary key' => array('id'),
    );

    return $schema;
}
4

1 回答 1

1

您所拥有的是单个数据库表的定义;Drupal 在此之上没有为文件提供任何层,因此如果您想存储文件,则必须手动进行。

您可以举的最好的例子是核心用户实体。它定义了picture属性,这是一个引用表中条目的 ID file_managed(顺便说一下,这是 Drupal 核心默认处理所有永久文件存储的方式)。

这是该 db 列的架构定义(来自user_schema()):

'picture' => array(
  'type' => 'int',
  'not null' => TRUE,
  'default' => 0,
  'description' => "Foreign key: {file_managed}.fid of user's picture.",
)

这与您的定义需要的外观非常相似。

从那里,查看user_account_form()函数(定义picture属性的表单元素)和user_validate_picture()函数,它将向您展示如何执行文件上传、将文件保存在表中以及更改字段file_managed的提交值picture到相关的文件 ID(以便它自动保存在实体上)。

您将主要从这两个函数中复制代码,因此不会那么棘手。

于 2012-08-31T16:50:47.700 回答