Labelヘルパー
Labelヘルパーは、ファイルの画像、リンク、URLを出力します。find()がファイルのフィールドに入れて返したファイルの情報を、そのままヘルパーに渡します。
ヘルパーを追加する
Ringコンポーネントは、Filebinder.Labelヘルパーをコントローラーに追加します。Ringコンポーネントを使わない場合は、ヘルパーを自分で追加してください。
public $helpers = ['Filebinder.Label'];画像、リンク、URL
image()はimgタグを出力します。
echo $this->Label->image($post['Post']['image'], ['alt' => 'Photo', 'noFile' => 'No image']);link()はファイルへのリンクを出力します。
echo $this->Label->link($post['Post']['image'], ['title' => 'Download']);url()の戻り値はファイルのURLです。
echo $this->Label->url($post['Post']['image']);ファイルがないとき、3つのメソッドはnoFileオプションの値を返します。noFileがなければ空文字列を返します。
オプション
| オプション | 説明 |
|---|---|
prefix | ファイル名の接頭辞。たとえば、ファイルの隣に保存したサムネイルならthumb_です。 |
noFile | ファイルがないときに返す値。 |
title | link()のリンクのテキスト。デフォルトはファイル名です。 |
S3またはs3 | ローカルのファイルではなく、S3のファイルのURLを返します。 |
url_prefix | S3と一緒に使うキーの接頭辞。デフォルトはフィールドのurlPrefix、なければFilebinder.S3.urlPrefixです。 |
ほかのオプションは、HtmlHelper::image()、link()、url()にそのまま渡します。
ファイルのURL
URLは、ファイルの置き場所によって変わります。
| ファイル | URL |
|---|---|
| webrootの下のローカルのファイル | webrootの下のパス。たとえば/files/Post/1/image/photo.jpgです。誰でも開けます。 |
| webrootの外のローカルのファイル | プラグインのloaderアクションのURL。セッションに結び付けて署名され、Filebinder.expireの時間で期限が切れます。 |
確認画面でアップロードした、tmpPathにあるファイル | 上と同じくloaderアクションのURL。 |
公開のACLのpublic-readやpublic-read-writeを付けたS3のファイル | オブジェクトのURL。たとえばhttps://<bucket>.s3.<region>.amazonaws.com/<key>です。 |
privateなどそれ以外のACLを付けたS3のファイル | オブジェクトの署名付きURL。Filebinder.expireの時間で期限が切れます。 |
ヘルパーがS3のURLを出力するのは、S3オプションを指定したときだけです。
echo $this->Label->image($post['Post']['image'], ['S3' => true]);S3のURLは、S3クライアントが設定のリージョンやエンドポイントに合わせて組み立てます。バケット、ACL、キーの接頭辞、リージョンには、モデルの$bindFieldsにあるフィールドの設定を使います。フィールドになければFilebinder.S3の設定を使います。S3のファイルにはloaderアクションを使いません。
S3のファイルを非公開にするには、フィールドのaclかFilebinder.S3.aclをprivateにします。ヘルパーは有効期間の短い署名付きURLを出力します。署名はS3が確認し、ファイルのデータはアプリケーションを通りません。
loaderによるファイルの保護
loaderアクションは、webrootの外にあるローカルのファイルを送ります。送る前に、URLの次の2点を確認します。
keyパラメーターの署名- 有効期限
loaderアクションは、ユーザーがそのレコードを見てよいかどうかを確認しません。署名がこの確認の代わりになります。どのファイルをユーザーに見せるかは、アプリケーションが決めます。コントローラーやビューで認可を確認してから、LabelヘルパーでURLを出力してください。
署名は、アプリケーションのSecurity.saltを鍵にしたHMAC-SHA256です。モデル、ID、フィールド、ファイル名、有効期限、セッションIDから計算します。そのため、使えるのは、アプリケーションがそのセッションのために出力したURLだけです。URLのモデル、ID、フィールド、ファイル名を書き換えると、loaderは404を返します。
次の点に注意してください。
- 認可は、リンクを出力する前に確認してください。
- URLは、それを出力したセッションで、期限が切れるまで使えます。そのセッションを持っている人なら誰でも使えます。
- URLの有効期間は
Filebinder.expireで決まり、デフォルトは1分です。ページに合わせて'+10 minutes'のように長くできます。 - ログインなどでセッションIDが変わると、それまでのURLは使えなくなります。
Security.saltはランダムな値にし、外部に漏らさないでください。Security.saltかセッションがないと、LabelヘルパーはCakeExceptionを投げ、loaderは404を返します。
Filebinder.S3.secretは別の設定です。これは非推奨になったAWSのシークレットアクセスキーです。
