2012-01-18 9 views
3

簡単な質問

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が同じクラスの複数のインスタンスを扱うことができないということが本当に可能ですか?フィルタをエイリアスにすることができます。

答えて

関連する問題