【问题标题】:Symfony 1.4 sfThumbnail not generating thumbnailsSymfony 1.4 sfThumbnail 不生成缩略图
【发布时间】:2013-05-14 13:40:48
【问题描述】:

我有一个上传表单,效果很好,照片正在上传,但问题是 sfThumbnail 插件似乎不起作用。没有生成缩略图。这是我的代码:

      // /lib/form/UploadForm.class.php

      public function configure()
      {
      $this->setWidget('photo', new sfWidgetFormInputFileEditable(
      array(
        'edit_mode' => !$this->isNew(),
        'with_delete' => false,
        'file_src' => '',
         )
      ));

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

      $this->setValidator('photo', new sfValidatorFile(
        array(
        'max_size' => 5000000,
        'mime_types' => 'web_images', 
        'path' => '/images/',
        'required' => true,
        'validated_file_class' => 'sfMyValidatedFileCustom'
            )
       ));

这里是验证器类

    class sfMyValidatedFileCustom extends sfValidatedFile{

    public function save($file = null, $fileMode = 0666, $create = true, $dirMode = 0777) 
    {
      $saved = parent::save($file, $fileMode, $create, $dirMode);
      $thumbnail = new sfThumbnail(150, 150, true, true, 75, '');
      $location = strpos($this->savedName,'/image/');
      $filename = substr($this->savedName, $location+15); 
      // Manually point to the file then load it to the sfThumbnail plugin
      $uploadDir = sfConfig::get('sf_root_dir').'/image/';
      $thumbnail->loadFile($uploadDir.$filename);
      $thumbnail->save($uploadDir.'thumb/'.$filename,'image/jpeg');
      return $saved;
    }

还有我的操作代码:

    public function executeUpload(sfWebRequest $request)
    {
    $this->form = new UploadForm();
    if ($request->isMethod('post'))
    {
      $this->form->bind(
        $request->getParameter($this->form->getName()),
        $request->getFiles($this->form->getName())
      );
      if ($this->form->isValid())
      {
           $this->form->save();
           return $this->redirect('photo/success');
      }
    }
     }

我不能 100% 确定我是否正确执行此操作,但这是我从文档和其他示例中看到的。

【问题讨论】:

    标签: php file-upload symfony-1.4 thumbnails symfony-forms


    【解决方案1】:

    您不能使用$this->savedName,因为它是来自sfValidatedFile 的受保护值。你应该改用$this->getSavedName()。

    我不明白这部分:

    $location = strpos($this->savedName,'/image/');
    $filename = substr($this->savedName, $location+15);
    

    为什么要提取文件名,最后在使用loadFile 加载时重新添加/image/?

    无论如何,我对你的班级做了一些改变。我没有测试它,但我认为它应该可以工作。

    class sfMyValidatedFileCustom extends sfValidatedFile
    {
      public function save($file = null, $fileMode = 0666, $create = true, $dirMode = 0777) 
      {
        $saved    = parent::save($file, $fileMode, $create, $dirMode);
        $filename = str_replace($this->getPath().DIRECTORY_SEPARATOR, '', $saved);
    
        // Manually point to the file then load it to the sfThumbnail plugin
        $uploadDir = $this->getPath().DIRECTORY_SEPARATOR;
    
        $thumbnail = new sfThumbnail(150, 150, true, true, 75, '');
        $thumbnail->loadFile($uploadDir.$saved);
        $thumbnail->save($uploadDir.'thumb/'.$filename, 'image/jpeg');
    
        return $saved;
      }
    

    【讨论】:

    • 非常感谢 j0k!你是一个救生员!也感谢您的详细解释。我一定会牢记这一点。
    猜你喜欢
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2011-04-02
    • 2015-01-07
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多