Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated Sep 6, 2024

Maintenance ModeYou are viewing Amplify Gen 1 documentation. Amplify Gen 1 has entered maintenance mode and will reach end of life on May 1, 2027. New project should use Amplify Gen 2. For existing Gen 1 projects, a migration guide and tooling are available to help you upgrade. Switch to the latest Gen 2 docs →

特別な入力の設定

リレーションシップを持つオートコンプリートフィールド

リレーションシップを持つデータモデルに連動した接続フォームがある場合、フォームビルダーは送信を処理するための特別なフィールドを使用します。オートコンプリートフィールドを使用すると、フォーム送信者は関連するデータモデルから 1 つ以上のレコードを選択できます。これらの接続されたオートコンプリートフィールドには、いくつかの特別な設定があります。

フォームビルダーは現在、競合解決のない GraphQL API へのデータ連動をサポートしています。GraphQL と競合解決の詳細はこちらをご覧ください

フォーム内のリレーションシップフィールドを有効化する

データモデルにリレーションシップがあるが、接続フォームに関連フィールドがない場合は、リレーションシップフィールドが有効になっていない可能性があります。リレーションシップサポートを有効にするには...

  1. Studio アプリケーションにログインします
  2. 左側のバーでUI ライブラリを選択します
  3. 右上隅でUI ライブラリ設定を選択します
  4. リレーションシップフィールドを選択して有効化します

レコードラベルをカスタマイズする

フォーム送信者がフォーム内のオートコンプリートフィールドを選択すると、関連するレコードのリストが入力されます。デフォルトでは、これらのレコードはデータモデルの最初のフィールド、ハイフン、およびレコードの ID でラベル付けされます。

リレーションシップのデフォルトラベル付けを示す入力設定バー

この例では、フォームは新しい著者を作成し、ユーザーが関連する本を検索できるようにします。Book モデルの最初のフィールドは ISBN なので、ラベルは次のように表示されます:

ISBN と本の ID が表示されるラベルのスクリーンショット。ユーザーが読みにくい

これをフォーム送信者にとってより有用にするために、モデル内の任意のフィールドと文字列連結でラベルをカスタマイズできます。この例では、本の name フィールド、カンマ、year フィールドの方が理にかなっています。

本のタイトルと年が表示されるラベルのスクリーンショット。ユーザーが読みやすい

コード内でリレーションシップを持つフォームを使用する

フォーム設定とスタイルに満足したら、フォームをローカルプロジェクトで生成できます

GraphQL API が DataStore を使用していない場合、リレーションシップを持つフォームはクエリコードジェン深度 4 が必要であり、そうでなければ期待通りに機能しません。クエリ深度を更新するには:

  1. ターミナルを開き、Amplify プロジェクトのルートディレクトリに移動します
  2. amplify configure codegen を実行します
  3. Query Depth の入力を求められたら、4 に変更します。その他のオプションはお好みで設定できます
  4. すべての設定を確認した後、amplify codegen を実行してプロジェクトのクエリ生成を更新します

ファイルアップローダー

ファイルアップローダーフィールドを使用すると、フォームがファイルアップロードを受け入れることができます。ファイルは Amplify アプリに接続された Amazon S3 バケットに保存されます。アップロード後、ファイルの S3 キーはデータモデルに保存され、Amplify JS ライブラリを使用したシステムティックな取得が可能になります。

前提条件

ファイルアップローダーフィールドを使用するには、Amplify アプリが次の前提条件を満たす必要があります:

動作方法

フォームビルダーのファイルアップローダー入力により、フォーム送信者はローカルデバイスからファイルを選択し、S3 バケットにアップロードできます。ファイルアップローダーは Amplify Storage の一部として追加された S3 バケットに自動的に接続し、同じファイルレベルアクセスの概念を使用して、デフォルトで private に設定されます。

ファイルは選択時に即座にアップロードされ、S3 キーが生成されます。デフォルトでは、ファイルアップローダーはアップロードされたファイルに基づいて一意の S3 キーを生成します。フォーム送信時に、ファイルアップローダーは文字列としてアップロードされたファイルの S3 キーを返します。

ファイルアップローダーフィールドがデータモデル内のフィールドに接続されている場合、S3 キーは GraphQL API 経由でデータベースに書き込まれます。フィールドがデータモデルに接続されていない場合、onSubmit フックを使用して S3 キーを手動で処理できます。

接続フォームを持つファイルアップローダー

ファイルアップローダーフィールドが接続フォームの一部としてデータモデルに連動している場合、フォーム送信時にバインドされたデータモデルにレコードが作成または更新されます。

接続フォームにファイルアップローダー入力フィールドが追加されると、アップロードされたファイルの S3 キーが接続されたデータモデルの String フィールドに書き込まれます。

前提条件:

接続フォームにファイルアップローダーを追加...

  1. Studio アプリにログインして、UI ライブラリを選択します
  2. 接続フォームを選択し、右上隅の設定を選択します
  3. ファイルアップローダーフィールドに変換する string フィールドを選択します
  4. 入力設定サイドバーの表示セクションで、タイプドロップダウンを選択して StorageField を選択します

テキストフィールドがファイルアップローダーフィールドに変換されているスクリーンショット

String 型フィールドのみを StorageField 型に変換できます。タイプドロップダウンに StorageField がない場合は、データモデルを確認してください

接続されていないフォームを持つファイルアップローダー

接続されていないフォームにファイルアップローダーフィールドを追加...

  1. Studio アプリにログインして、UI ライブラリを選択します
  2. 接続されていないフォームに移動するか、新しい空白フォームを作成します
  3. 青いプラス記号をクリックしてフォームに新しいフィールドを追加します
  4. StorageField 入力要素を選択します

接続されていないフォームにストレージフィールドが追加されているスクリーンショット

接続されていないすべてのフォームでは、フォーム送信を手動で設定する必要があります。onSubmit フックと fields オブジェクトを使用して、送信をコード内で処理します。

ファイルアップローダーの設定

ファイルアップローダーには、右側のツールバーで適用できる複数の固有の設定があります。

  • ファイルレベルアクセス: アップロードされたファイルにアクセスできるユーザーを決定します。ファイルアップローダーはデフォルトで「プライベート」に設定されます。
    • プライベート: アップロード者のみがアクセス可能
    • 保護: 認証されたすべてのユーザーがアクセス可能
    • パブリック: 誰でもアクセス可能
  • 受け入れるファイルタイプ: アップロードできるファイルタイプを制限します
  • 詳細設定
    • 最大ファイル数: 送信前にフォームに追加できる最大ファイル数。バインドされたデータモデルフィールドが配列でない場合、常に 1 になります
    • 最大ファイルサイズ: アップロードされた各ファイルの最大サイズ
    • 一時停止可能: ユーザーがアップロードを一時停止および再開できます
    • 画像プレビュー: アップロードされたファイルが画像の場合、画像のプレビューがフォームにレンダリングされます

ファイルレベルアクセス

ファイルアップローダーは Storage カテゴリと同じファイルレベルアクセスの概念を使用し、デフォルトで private に設定されます。private または protected ファイルレベルアクセスを選択すると、アップロードされたすべてのファイルのファイルパスに {user_identity_id} が含まれます。これにより、読み取りと書き込みアクセスが制限され、異なるユーザーがアップロードした同じファイルが一意のパスを持つことが保証されます。

一意な S3 キー

同じ S3 キーを持つファイルが同じパスにアップロードされると、S3 はこれらのファイルを上書きします。ファイルの誤った上書きを防ぐために、ファイルアップローダーは_ファイルコンテンツ_をハッシュ化して一意の S3 キーを生成します。同じ名前の異なるファイルをアップロードしても、元のファイルは上書きされません。

ただし、フォーム送信者が同じパスに 2 つの同一ファイルをアップロードする場合 - ファイル名が異なっていても - ファイルアップローダーは S3 バケット内のファイルの重複を防ぎます。

ファイルの上書きは同じパス内の_同じ S3 キー_に対してのみ発生します。ファイルアップローダーのファイルレベルアクセスprivate または protected に設定されている場合、別々のユーザーがアップロードした同一ファイルは個別に保存されます。


ファイルレベルアクセスpublic に設定されている場合、同一ファイルは相互に上書きされます。