設定
Filebinderの設定は3種類あります。
- ファイルのフィールド: モデルの
$bindFieldsに、ファイルのフィールドごとに1つずつ書きます - ビヘイビアの設定:
$actsAsでFilebinder.Bindableビヘイビアに渡します - アプリケーションの設定:
ConfigureにFilebinderの設定として書きます
ファイルのフィールド
$bindFieldsの要素1つが、ファイルのフィールド1つに対応します。1つのモデルに複数のファイルのフィールドを持たせることもできます。
public $bindFields = [
['field' => 'image', 'filePath' => WWW_ROOT . 'files' . DS],
['field' => 'document', 'filePath' => ROOT . DS . 'files' . DS],
];各要素には次のキーを書けます。
| キー | デフォルト | 説明 |
|---|---|---|
field | フィールドの名前。必須です。 | |
tmpPath | CACHE | RingComponent::bindUp()がアップロードされたファイルを移動するディレクトリ。 |
filePath | ビヘイビアのfilePath設定 | 保存したファイルを置くディレクトリ。falseにするとローカルに保存しません。 |
bucket | Filebinder.S3.bucket | ファイルを置くS3のバケット。 |
acl | Filebinder.S3.acl、なければpublic-read | S3に置くファイルの既定ACL。 |
urlPrefix | Filebinder.S3.urlPrefix | S3のキーの接頭辞。たとえばfiles/。 |
region | Filebinder.S3.region、なければプラグインの設定 | バケットのAWSリージョン。 |
S3のキーを使うのは、S3のストレージを使うときだけです。Amazon S3を参照してください。
ビヘイビアの設定
ビヘイビアの設定は$actsAsで渡します。
public $actsAs = [
'Filebinder.Bindable' => [
'storage' => [BindableBehavior::STORAGE_DB, BindableBehavior::STORAGE_S3],
'filePath' => WWW_ROOT . 'files' . DS,
],
];ビヘイビアには次の設定があります。
| 設定 | デフォルト | 説明 |
|---|---|---|
model | 'Attachment' | 添付ファイルのテーブルのモデル。 |
filePath | WWW_ROOT . 'img' . DS | filePathのないフィールドで、保存したファイルを置くディレクトリ。falseにするとローカルに保存しません。 |
storage | BindableBehavior::STORAGE_DB | ローカルのファイルとは別に、ファイルのコピーを置く場所。値は下の表を参照してください。 |
restoreFromStorage | true | ローカルのファイルがないときや、ファイルがレコードより古いときに、find()がストレージからファイルを復元します。 |
withObject | false | find()がファイルの内容をBase64でfile_objectに入れて返します。S3のストレージでは、データベースに内容がなければS3からダウンロードします。 |
exchangeFile | true | 新しいファイルで差し替えたとき、古いファイルを削除します。falseにすると古いファイルのレコードだけを削除します。 |
beforeAttach | null | アップロードされたファイルを保存する前に呼ぶコールバック。 |
afterAttach | null | ローカルに保存したファイルに対して呼ぶコールバック。 |
dirMode | 0755 | ビヘイビアが作るディレクトリのパーミッション。 |
fileMode | 0644 | ビヘイビアが保存、復元するファイルのパーミッション。 |
dbStorage | 古い設定です。trueかfalseを指定すると、データベースのストレージを使うかどうかを上書きします。 |
storageに指定できる値は次のとおりです。
| 値 | ストレージ |
|---|---|
BindableBehavior::STORAGE_DB、つまり'Db' | データベースのfile_objectカラム。 |
BindableBehavior::STORAGE_S3、つまり'S3' | Amazon S3。 |
[BindableBehavior::STORAGE_DB, BindableBehavior::STORAGE_S3] | 両方。 |
false | なし。ローカルのファイルだけを残します。 |
ストレージごとの動き、ファイルの復元や差し替えについてはストレージで説明します。
コールバック
ビヘイビアは、アップロードされたファイルを保存する前に、そのパスを渡してbeforeAttachを呼びます。コールバックが偽とみなされる値を返すと、保存を中止します。
ビヘイビアは、ローカルに保存したファイルのパスを渡してafterAttachを呼びます。find()がローカルのファイルを復元したときも呼びます。コールバックが偽とみなされる値を返すと、afterSave()やfind()はそこで処理をやめます。
コールバックには次のいずれかを指定します。
- 関数の名前
- モデルのメソッドの名前
[$object, 'method']や['ClassName', 'method']のような呼び出し可能な配列
実行時に設定を変える
setSettings()は、モデルの現在の設定に新しい設定をマージします。
$this->Post->setSettings(['restoreFromStorage' => false]);getSettings()は現在の設定を返します。
$settings = $this->Post->getSettings();withObject()でwithObject設定を切り替えられます。
$this->Post->withObject(true);アプリケーションの設定
アプリケーションの設定はConfigure::write()で書きます。たとえばconfig/bootstrap.phpに次のように書きます。
Configure::write('Filebinder.expire', '+10 minutes');次の設定があります。
| 設定 | デフォルト | 説明 |
|---|---|---|
Filebinder.expire | '+1 minute' | loaderのURLとS3の署名付きURLの有効期間。strtotime()の書式で指定します。 |
Filebinder.S3.client | 読み込んだプラグインのクライアント | S3クライアント。'AsyncAws'か'Aws'を指定します。 |
Filebinder.S3.bucket | bucketのないフィールドで使うS3のバケット。 | |
Filebinder.S3.acl | public-read | aclのないフィールドで使う既定ACL。 |
Filebinder.S3.urlPrefix | urlPrefixのないフィールドで使うS3のキーの接頭辞。 | |
Filebinder.S3.region | 非推奨。regionのないフィールドで使うリージョン。 | |
Filebinder.S3.key、Filebinder.S3.secret | 非推奨。AWSのアクセスキー。 |
S3の設定と非推奨の設定はAmazon S3で説明します。
Labelヘルパーとloaderには、アプリケーションのSecurity.saltも必要です。loaderによるファイルの保護を参照してください。
