Получить изображение по ссылке (Symfony) - PullRequest
0 голосов
/ 11 января 2012

У меня проблема с загрузкой изображения с помощью Symfony.

У меня есть форма, где я получаю ссылки на баннеры, эти баннеры размещаются на разных сайтах.

Но мне нужночтобы сохранить их на моем сервере, как это сделать в классе действий в Symfony?

Спасибо

1 Ответ

1 голос
/ 11 января 2012

Не используйте действие, используйте форму!

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

Вот мой собственный пример кода:

<?php

/**
 * myValidatorWebFile simule a file upload from a web url (ftp, http)
 * You must use the validation options of sfValidatorFile
 * 
 * @package    symfony
 * @subpackage validator
 * @author     dalexandre
 */
class myValidatorWebFile extends sfValidatorFile
{
  /**
   * @see sfValidatorBase
   */
  protected function configure($options = array(), $messages = array())
  {
    parent::configure($options, $messages);
  }

  /**
   * Fetch the file and put it under /tmp
   * Then simulate a web upload and pass through sfValidatorFile
   * 
   * @param url $value
   * @return sfValidatedFile
   */
  protected function doClean($value)
  {
    $file_content = file_get_contents($value);
    if ($file_content) 
    {
      $tmpfname = tempnam("/tmp", "SL");
      $handle = fopen($tmpfname, "w");
      fwrite($handle, $file_content);
      fclose($handle);

      $fake_upload_file = array();
      $fake_upload_file['tmp_name'] = $tmpfname;
      $fake_upload_file['name']     = basename($value);

      return parent::doClean($fake_upload_file);
    }
    else
    {
      throw new sfValidatorError($this, 'invalid');
    }
  }

  /**
   * Fix a strange bug where the string was declared has empty...
   */
  protected function isEmpty($value)
  {
    return empty ($value);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...