Hi,

Are there someone can point out why I cannot save the upload file path
into database by default.

I customize my form showing as below.

At the Form class:
class AdvertisementForm extends BaseAdvertisementForm
{
  public function configure()
  {

    parent::configure();
    $this->offsetUnset('advertisement2photo_list');


    $this->setWidgets(
    array(
                        'title'           => new sfWidgetFormInput(),
                        'category_id'     => new
sfWidgetFormPropelChoice(
                                                   array('model' =>
'category',
                                                         'add_empty'
=> ' Select category ',
                                                   )),
                        'logo_path'       => new sfWidgetFormInputFile
(
                                                   array('label' =>
'Company logo',
                                                    )),
                        'message'      => new sfWidgetFormInput()
    )
    );

    $this->validatorSchema['category_id'] = new sfValidatorPropelChoice
(array
    ('model' => 'category', 'column' => 'id', 'required' => true)
    );


    $this->widgetSchema->setLabels(array(
      'category_id'    => 'Category',
      'message'        => 'Weclome Message',
      'announcement'   => 'Ads Details',
    ));

    $this->validatorSchema['logo_path'] = new sfValidatorFile(array(
      'required'   => false,
      'path'       => sfConfig::get('sf_upload_dir').'/ads/',
      'mime_types' => 'web_images',
    ));


    $this->getWidgetSchema()->setNameFormat('data[%s]');
    $this->defineSfsListFormatter();

  }

  protected function doSave($con = null)
  {

    if (file_exists($this->getObject()->getLogoPath()))
    {
      unlink($this->getObject()->getLogoPath());
    }
    return parent::doSave($con);
  }

At the action class:

  protected function processForm(sfWebRequest $request, sfForm $form)
  {
      /* bind, validate and save form */
    $form->bind($request->getParameter($form->getName()), $request-
>getFiles($form->getName()));
    if ($form->isValid())
    {
      $advertisement = $form->save();
      $this->redirect('@advertise?action=show');
    }
  }


When I used the above code, I saw the file was uploaded to the web
folder, the database logo_path field is empty.

I don't know why it don't save the absoluted file path to database.

When I modified the function of doSave()

  protected function doSave($con = null)
  {
    if (file_exists($this->getObject()->getLogoPath()))
    {
      unlink($this->getObject()->getLogoPath());
    }

    $file = $this->getValue('logo_path');
    $filename = sha1($file->getOriginalName()).$file->getExtension
($file->getOriginalExtension());
    $file->save(sfConfig::get('sf_upload_dir').'/ads/'.$filename);
    $this->getObject()->setLogoPath($filename);
    $this->getObject()->save();
    return parent::doSave($con);
  }


Then , I saw the file path had been saved into database.

Can someone point my code's problem?

By the way , I must mention one issue I met it is very wired.

When I use the
    $this->getWidgetSchema()->setNameFormat('advertisement[%s]');

At the Firefox 2.0.0.20. the form fields cannot been show up. At the
IE 7, the form fields is normal.

so I must change the form name format to

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

It spent my several hours to figure out. I think there are some
forbidden words in Firefox.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"symfony users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to