2

コードが正しく機能しない理由がわかりません。フォームから画像をアップロードしてディレクトリに保存しようとしましたが、そこにありません。テストでは、フォームからファイルオブジェクトをエコーし​​て、ファイルの名前と拡張子、およびその正しいものを表示しましたが、保存されませんでした。

これが私のコードです:

形:

class WgrajForm extends sfForm
{
  public function configure()
  {
    $this->setWidgets(array(
      'zdjęcie' => new sfWidgetFormInputFile(),
      'nazwa'   => new sfWidgetFormInput(),
    ));

     $this->setValidators(array(
        'zdjęcie'    =>  new sfValidatorFile(array(
          'mime_types' => 'web_images',
          'path'       => '/projektSymfony/web/images',
        ),array(
          'mime_types' => 'Plik może być tylko zdjęciem'
        )
      ),
      'nazwa' => new sfValidatorString(array(), array('required' => 'pole wymagane')),
    ));

    $this->getWidgetSchema()->setNameFormat('wgraj[%s]');
  }
}

アクション:

public function executeDodaj(sfWebRequest $request)
{
  $this->form= new WgrajForm();

  if ($request->isMethod('post'))
  {
    $this->form->bind(
    $request->getParameter('wgraj'),
    $request->getFiles('wgraj'));

    if ($this->form->isValid())
    {
      $wgrane       = $this->form->getValues();
      $plik         = $wgrane['zdjęcie'];
      $pliknazwa    = $wgrane['nazwa'];
      $rozszerzenie = $plik->getExtension($plik->getOriginalExtension());
      $plik->save('/projektSymfony/web/images/'.$pliknazwa.$rozszerzenie);
      //$this->redirect('galeria/index');
    }
  }
}
4

1 に答える 1

0

あなたが使用するとき、またはあなたのケースでは、pathパラメーターはより良いです。sfConfig::get('sf_upload_dir')sfConfig::get('sf_web_dir')

save()アクション内でウィジェットを使用する必要はありません。フォームを保存するだけで、画像が保存されます。

if ($this->form->isValid())
{
  $this->form->save();

  $this->redirect('galeria/index');
}

ドキュメントを見ると、多くの情報、特にForm に関する Jobeet チュートリアルの一部が見つかります。

于 2013-01-10T08:34:15.150 に答える