开发者

Create a form for uploading images

开发者 https://www.devze.com 2023-02-09 12:52 出处:网络
I want to let users upload images from their drives. Searching around the net, here\'s what I\'ve found :

I want to let users upload images from their drives. Searching around the net, here's what I've found :

The form :

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'
        )

    ));

  }
}

the action :

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

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

  }

the template :

<fo开发者_JAVA技巧rm 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 doesn't throw any errors, but nothing is transfered. What am I missing ?


Youre missing an impotant part which is binding the the values to the form:

  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
      }

    }
  } 

However, you want to make sure you set the name format for your form so you can grab a the values and files in the fashion... In your configure method you need to call setNameFormat:

public function configure()
{
   // other config code

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

Also in configure you dont need to call parent::setUp()... That is called automatically and is actually what invokes the configure method.

LAstly, you ned to have to correct markup - your emissing the form name from your tag:

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

Personally I like to use the form object to generate this as well as it looks cleaner to my eyes:

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

It will work out the encoding and name attributes based on how youve configured the form.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号