0

多くの質問をして申し訳ありませんが、私は Symfony を初めて使用します。フォームを作成しましたが、すべてうまく機能しています。写真用のフィールドがいくつかあります (Picture1、Picture2、Picture3 など)。私は te sfWidgetFormInputFile を使用しましたが、すべてがうまく機能しています。必要な場所にファイルをアップロードし、一意の名前を付けます。

私が抱えている問題は、これらのフィールドが mySQL で "no-pic.png" のデフォルト値を持つように設定されているため、ユーザーが画像をアップロードしない場合でも、投稿に表示されるものがあることです。しかし、誰かが写真をアップロードするたびに、私の no-pic.png ファイルが削除され、写真のない投稿には空白の四角が表示されます。サーバー上の余分な未使用の写真を減らすために、新しい画像をアップロードする前に「前の画像を削除する」に設定されているためだと思います。

フォルダーから削除する前に、値が「no-pic.png」であるかどうかを確認する方法があるかどうか疑問に思っています。参考までに、これは form.class ファイルで使用しているコードです。

      $this->widgetSchema['picture1'] = new sfWidgetFormInputFile(array('label' => 'Pictures', ));
  $this->validatorSchema['picture1'] = new sfValidatorFile(array('required' => false, 'path' => sfConfig::get('sf_upload_dir').'/car', 'mime_types' => 'web_images', ));
  $this->widgetSchema['picture1'] = new sfWidgetFormInputFileEditable(array(
    'label' => 'Pictures',
    'file_src' => '/uploads/car/'.$this->getObject()->getPicture1(),
    'is_image' => true,
    'edit_mode' => !$this->isNew(),
    'template' => '<div>%file%<br />%input%<br />%delete%%delete_label%</div>',
    ));
  $this->validatorSchema['picture_delete'] = new sfValidatorPass();
4

2 に答える 2

1

参考までに、私が使用したコードをここに示します。

$this->setWidget('logo_image', new sfWidgetFormInputFileEditable(array(
  'file_src'  => 'uploads/logos/'.$this->getObject()->getFilename(),
  'edit_mode' => !$this->isNew()
)));

$validatorOptions = array(
  'max_size'           => 1024*1024*10,
  'path'               => sfConfig::get('sf_upload_dir').'/logos',
  'mime_type_guessers' => array(),
  'required'           => false
);

if ($this->isNew())
{
  $validatorOptions['required'] = true;
}

$this->setValidator('logo_image', new sfValidatorFile($validatorOptions));
$this->setValidator('logo_image_delete', new sfValidatorString(array('required' => false)));
于 2012-07-09T18:44:39.403 に答える
0

回避策を見つけました。ページが no-pic.png に設定されているかどうかを確認し、別の場所に no-pic.png を表示するようにしました。そうすれば、写真をアップロードするときに削除されません。:) 助けてくれてありがとう。

于 2012-07-09T01:59:41.800 に答える