2011-02-08 12 views
0

ユーザーがドライブから画像をアップロードできるようにしたい。ネットの周りの検索、ここで私が見つけたものです:画像をアップロードするためのフォームを作成する

形式:

class ImageForm extends BaseForm 
{ 
    public function configure() 
    { 
    parent::setUp(); 

    $this->setWidget('file', new sfWidgetFormInputFileEditable(
     array(
     'edit_mode'=>false, 
     'with_delete' => false, 
     'file_src' => '', 
     ) 
    )); 

    $this->setValidator('file', new sfValidatorFile(
     array(
     'max_size' => 500000, 
     'mime_types' => 'web_images', 
     'path' => '/web/uploads/assets', 
     'required' => true 
     //'validated_file_class' => 'sfValidatedFileCustom' 
     ) 

    )); 

    } 
} 

アクション:

public function executeAdd(sfWebRequest $request) 
    { 
    $this->form = new ImageForm(); 

    if ($request->isMethod('post')) 
     if ($this->form->isValid()) 
     { 
      //...what goes here ? 
     } 

    } 

テンプレート:

<form action="<?php echo url_for('@images_add') ?>" method="POST" enctype="multipart/data"> 
<?php echo $form['file']->renderError() ?> 
<?php echo $form->render(array('file' => array('class' => 'file'))) ?> 
<input type="submit" value="envoyer" /> 
</form> 

symfonyはありませんエラーはスローされますが、何も転送されません。私は何が欠けていますか?

答えて

2

フォームに値をバインドしているimpotant一部が欠落しYoureの:

public function executeAdd(sfWebRequest $request) 
    { 
    $this->form = new ImageForm(); 

    if ($request->isMethod('post')) 
    { 
     // you need to bind the values and files to the submitted form 
     $this->form->bind(
     $request->getParameter($this->form->getName()) 
     $request->getFiles($this->form->getName()) 
    ); 

     // then check if its valid - if it is valid the validator 
     // should save the file for you 
     if ($this->form->isValid()) 
     { 
      // redirect, render a different view, or set a flash message 
     } 

    } 
    } 

しかし、あなたが値とファイルをつかむことができるようにしてください、あなたのフォームの名前の書式を設定したいですファッションに...あなたはsetNameFormatを呼び出す必要があり、あなたのconfigureメソッドで:

public function configure() 
{ 
    // other config code 

    $this->widgetSchema->setNameFormat('image[%s]'); 
} 

またconfigureに、あなたはparent::setUp()を呼び出す必要があります...それが自動的に呼び出され、を呼び出すどのような実際にされてはいけません方法。

<form action="<?php echo url_for('@images_add') ?>" name="<?php echo $form->getName() ?>" method="POST" enctype="multipart/data"> 

は個人的に私はそれが私の目にきれいに見えるだけでなく、これを生成するために、フォームオブジェクトを使用したい:あなたは、あなたのタグからフォーム名をemissing -

最後に、あなたがマークアップ修正する必要が定義さ:

<?php echo $form->renderFormTag(
    url_for('@images_add'), 
    array('method' => 'post') // any other html attriubutes 
) ?> 

エンコードと名前の属性は、フォームの設定方法に基づいています。

+0

である。 @Manuでは、 "Jobeet" Practical Symfonyチュートリアルの第10章で、値をバインドする方法も含めて、これを行う方法の完全な例を見つけることができます。 [Propel](http://www.symfony-project.org/jobeet/1_4/Propel/en/10)または[Doctrine](http://www.symfony-project.org/jobeet/1_4/Doctrine/) ja/10) –

+0

私はどこかで間違いをして、フォームが失敗したことを検証し、ファイルが必要であると言っています。 – Manu

+0

あなたのウィジェットを投稿したものを見てください。あなたのウィジェットは 'file'で、あなたのバリデーターは' filename'です。あなたが選んだものと同じものでなければなりません。 – prodigitalson

関連する問題