0

私はZend Framework 1.11.12バージョンに取り組んでいます。file upload (for photo upload)フィールドを配置する必要がある私の追加フォームではvalidations as required, file extensions and size specific criteria、以下のように言及されているものはほとんどありません。これは、私のzendフォームで宣言されています。

    // part of my form class (Default_Form_Photo::init)
    $photo = new Zend_Form_Element_File('photo', '', array('required'   => true));
    $photo->setLabel('Photo')
          ->setDestination('/var/www/zendframework/public/uploads/');
    // ensure its mandatory
    #$photo->addValidator('required', true);
    // ensure only one file
    $photo->addValidator('Count', false, array('min' => 1));
    // max 2MB
    $photo->addValidator('Size', false, 2097152)
          ->setMaxFileSize(2097152);
    // only JPEG, PNG, or GIF
    $photo->addValidator('Extension', false, 'jpg,jpeg,png,gif');
    $photo->setValueDisabled(true);
    $this->addElement($photo, 'photo');

新しい画像がアップロードされていない場合は、現在の画像名が返されhidden fieldます。edit page

    // hidden element for edit time photo save
    $this->addElement('hidden', 'photo_uploaded', array( ));

これをで設定しhidden element value from controllerました$form->photo_uploaded->setValue($result['photo'])

ここで問題となるのは、ユーザーが情報を編集するときに、新しい画像がアップロードされていないため保存できませんfile upload field is blankが、私の場合は、非表示の要素からコントローラーに渡す既存の現在の画像を使用する必要があります。

したがって、検証はここで問題を引き起こします。ユーザーが情報を編集しているときに、ユーザーが毎回新しい画像をアップロードする必要がない編集ページの検証を削除するにはどうすればよいですか。

早めの対応をお願いします。

ありがとう !

4

1 に答える 1

2

これを解決するには、フォームに isValid と getValues の 2 つの関数を追加する必要があります。isValid でこれを確認するため、最初に photo 要素から required を削除します。

/**
 * Check if a photo has been submitted. If not, set the form element as required.
 * @param $data Array of values
 * @return Boolean true if all form element requirements are mets
 */
public function isValid($data)
{
 //A photo has not been uploaded this time, nor previously.
 if(!$data['photo'] AND !$data['photo_uploaded'])
 {
  $this->photo->isRequired(TRUE);
 }
 return parent::isValid($data);
}

/**
 * Return an array of form element values
 * @return Array of values
 */
public function getValues()
{
 $values = $this->getValues();

 //if photo has been uploaded, but no previous photos have been uploaded, then set photo_uploaded value.
 if($values['photo'] AND !$values['photo_uploaded'])
 {
  $values['photo_uploaded'] = $values['photo'];
 }

 //if previous photo has been uploaded, but photo has not been uploaded this time, set photo value
 if($values['photo_uploaded'] AND !$values['photo'])
 {
  $values['photo'] = $values['photo_uploaded'];
 }

 return $values;
}
于 2012-08-21T09:50:43.440 に答える