Skip to content
これは pieceofcake2/filebinder のドキュメントです。pieceofcake2/cakephp 用の CakePHP 2.x プラグインです。 このフォークについて

Labelヘルパー ​

Labelヘルパーは、ファイルの画像、リンク、URLを出力します。find()がファイルのフィールドに入れて返したファイルの情報を、そのままヘルパーに渡します。

ヘルパーを追加する ​

Ringコンポーネントは、Filebinder.Labelヘルパーをコントローラーに追加します。Ringコンポーネントを使わない場合は、ヘルパーを自分で追加してください。

php
public $helpers = ['Filebinder.Label'];

画像、リンク、URL ​

image()はimgタグを出力します。

php
echo $this->Label->image($post['Post']['image'], ['alt' => 'Photo', 'noFile' => 'No image']);

link()はファイルへのリンクを出力します。

php
echo $this->Label->link($post['Post']['image'], ['title' => 'Download']);

url()の戻り値はファイルのURLです。

php
echo $this->Label->url($post['Post']['image']);

ファイルがないとき、3つのメソッドはnoFileオプションの値を返します。noFileがなければ空文字列を返します。

オプション ​

オプション説明
prefixファイル名の接頭辞。たとえば、ファイルの隣に保存したサムネイルならthumb_です。
noFileファイルがないときに返す値。
titlelink()のリンクのテキスト。デフォルトはファイル名です。
S3またはs3ローカルのファイルではなく、S3のファイルのURLを返します。
url_prefixS3と一緒に使うキーの接頭辞。デフォルトはフィールドの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オプションを指定したときだけです。

php
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のシークレットアクセスキーです。

著作権とライセンスについては LICENSE を参照してください。Cake Software Foundation とは関係ありません。