Как загрузить файл в каталог, содержащий идентификатор записи на Symfony - PullRequest
0 голосов
/ 03 октября 2011

У меня есть форма загрузки файла в веб-интерфейсе.

В момент создания новой записи файл загружается на

%sf_data_dir%/files/

но из-за некоторой бизнес-логики мне нужен файл для загрузки в

%sf_data_dir%/files/%record_id%/

Поэтому загруженный файл должен быть сохранен ПОСЛЕ создания записи.

Как мне этого добиться?

1 Ответ

2 голосов
/ 03 октября 2011

Если вы используете загрузку файлов, ваша форма обязательно использует sfValidatorFile (если нет, то это неправильно):

$this->validatorSchema['image'] = new sfValidatorFile(array(
                                    'required' => true,
                                    'mime_types' => 'web_images',
                           ));

Этот валидатор возвращает экземпляр sfValidatedFile, который можно сохранить в любом месте (это безопаснее)чем move_uploaded_file, есть проверка на каталог, имя файла ...).

В вашем действии (или в форме, как вы хотите / нуждаетесь), теперь вы можете сделать это:

protected function processForm(sfWebRequest $request, sfForm $form)
{
  $form->bind(
    $request->getParameter($form->getName()),
    $request->getFiles($form->getName())
  );

  if ($form->isValid())
  {
    $job = $form->save();
    // Saving the file to filesystem
    $file = $form->getValue('my_upload_field');
    $file->save('/path/to/save/'.$job->getId().'/myimage.'.$file->getExtension());
    $this->redirect('job_show', $job);
  }
}

Не стесняйтесь открыть sfValidatedFile, чтобы посмотреть, как он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...