簡単な質問
Zend_File_Filterは、彼らのクラス名(文字列)に追加のフィルタを再マッピングして、内部の配列からそれらを呼び出すように思われます。異なるパラメータの同じフィルタクラスを追加することは可能ですか〜Zend_File_Transfer
の2回ですか?はいの場合、どうですか?Zend_File_Transferは同じクラスの2つの異なるフィルタを扱うことができますか?
説明とテストの状況
私は、画像をアップロードするZend_File_Transfer
を使用しています。今度は、画像のサイズを変更して、それらをある場所に保存する2つのフィルタを追加したかったのです(基本的にサムネイル表示)。私はそれを1回だけ加える(サムネイルサイズを1つにする)限り、すべてが完璧に機能します。
しかし、私はそれを2回追加したいときは、Zend_File_Transfer
は最初のインスタンスを忘れてしまい、それを2番目のインスタンスに置き換えているようです。
私はこのようなルックスを使用していますコード:
$uploadPhotoForm->getElement('photo')->addFilter('Rename', array(
'target' => $article->getUrl() . '.' . $extension,
'overwrite' => true
));
$uploadPhotoForm->getElement('photo')->addFilter(new Skoch_Filter_File_Resize(array(
// no directory given means: use the default directory
'width' => 600,
'height' => 300,
'keepRatio' => true,
)));
$uploadPhotoForm->getElement('photo')->addFilter(new Skoch_Filter_File_Resize(array(
'directory' => '/default/path/thumbnail',
'width' => 300,
'height' => 100,
'keepRatio' => true,
)));
私のインスタンスが(私はコンストラクトのデバッグ)が正しく作成されます。
call to Skoch_Filter_File_Resize::filter()
array(5) { [0]=> int(300) [1]=> int(100) [2]=> bool(true)
[3]=> string(79) "/some/long/default/path/thumbnail..." [4]=> bool(true) }
call to Skoch_Filter_File_Resize::filter()
array(5) { [0]=> int(300) [1]=> int(100) [2]=> bool(true)
[3]=> string(79) "/some/long/default/path/thumbnail..." [4]=> bool(true) }
ですから、両方のインスタンスが、私は600x300と300×100画素分の1のための1つのインスタンスを追加していても、まったく同じであることを確認できます。しかし、filter()
への実際の呼び出しをデバッグすると、次につながります。 Zend_File_Transfer_Abstract
以内に私のインスタンスをデバッグしようとすると
私はそれが_filter()
内クラス名の文字列を使用するように思われること、が分かった:
foreach ($content['filters'] as $class) {
// Comment by the author: $class is a string of my classname, checked with var_dump
$filter = $this->_filters[$class];
try {
$result = $filter->filter($this->getFileName($name));
$this->_files[$name]['destination'] = dirname($result);
$this->_files[$name]['name'] = basename($result);
} catch (Zend_Filter_Exception $e) {
$this->_messages += array($e->getMessage());
}
}
がZend_File_Transfer
が同じクラスの複数のインスタンスを扱うことができないということが本当に可能ですか?フィルタをエイリアスにすることができます。