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()のフォーム要素を定義する)と、ファイルのアップロード、テーブルへのファイルの保存、およびフィールドの送信値の変更の方法を示す関数を確認します。関連するファイルIDに(エンティティに対して自動的に保存されるように)。pictureuser_validate_picture()file_managedpicture

ほとんどの場合、これら2つの関数からコードを複製するので、それほど難しいことはありません。

于 2012-08-31T16:50:47.700 に答える