0

ユーザーが「アバター」フィールドの画像をアップロードできるようにしたいsymfonyのプロジェクトがあります。以下のスキーマを使用してテーブルを「拡張」する方法に関する多くの投稿を見つけました。

Member:
  inheritance:
    type:             column_aggregation
    extends:          sfGuardUser  
columns:
    idmember:    { type: integer }
    birthday:    { type: date }
    avatar:      { type: string(255) }
    bio:         { type: string(255) }

列は問題なくテーブルに追加されますが、ウィジェットを変更するsfWidgetFormInputFileEditableと壊れます。Form.class ファイルは次のとおりです。

  $file_src = $this->getObject()->getAvatar();
  if ($file_src == '')
  {
    $file_src = 'default_image.png';
  }

  $this->widgetSchema['avatar'] = new sfWidgetFormInputFileEditable(array(
    'label'     => ' ',
    'file_src'  => '/uploads/avatar/'.$file_src,
    'is_image'  => true,
    'edit_mode' => true,
    'template'  => '<div>%file%<br />%input%</div>',
  ));

およびフォームの「保存」機能:

if($this->isModified())
    {
      $uploadDir = sfConfig::get('sf_upload_dir');
      $thumbnail = new sfThumbnail(150, 150);
      $thumbnail2 = new sfThumbnail(800, 800);
      if($this->getAvatar())
      {
        $thumbnail->loadFile($uploadDir.'/avatar/'.$this->getAvatar());
        $thumbnail->save($uploadDir.'/avatar/thumbnail/'. $this->getAvatar());
        $thumbnail2->loadFile($uploadDir.'/avatar/'.$this->getAvatar());
        $thumbnail2->save($uploadDir.'/avatar/big/'. $this->getAvatar());
      }
   }  

フォームを送信すると、次のエラー メッセージが表示されます。

This form is multipart, which means you need to supply a files array as the bind() method second argument.

4

1 に答える 1

1

フォームをバインドするアクションでは、次のようなものを使用する必要があります。

$form->bind($request->getParamater($form->getName()), $request->getFiles($form->getName()));

したがって、アップロードされたファイルを2番目のパラメーターとしてメソッドに渡す必要がありますbind

于 2013-03-06T08:52:32.573 に答える