【问题标题】:Symfony add Avatar field to sfGuardUser modelSymfony 将 Avatar 字段添加到 sfGuardUser 模型
【发布时间】:2013-03-06 03:54:43
【问题描述】:

我在 symfony 中有一个项目,我想让我的用户为他们的“头像”字段上传一张图片。我发现了很多关于如何使用以下架构“扩展”我拥有的表的帖子:

Member:
  inheritance:
    type:             column_aggregation
    extends:          sfGuardUser  
columns:
    idmember:    { type: integer }
    birthday:    { type: date }
    avatar:      { type: string(255) }
    bio:         { type: string(255) }

列添加到表中就好了,但是当我将小部件更改为sfWidgetFormInputFileEditable 时,它会中断。这是 Form.class 文件:

  $file_src = $this->getObject()->getAvatar();
  if ($file_src == '')
  {
    $file_src = 'default_image.png';
  }

  $this->widgetSchema['avatar'] = new sfWidgetFormInputFileEditable(array(
    'label'     => ' ',
    'file_src'  => '/uploads/avatar/'.$file_src,
    'is_image'  => true,
    'edit_mode' => true,
    'template'  => '<div>%file%<br />%input%</div>',
  ));

表格的“保存”功能:

if($this->isModified())
    {
      $uploadDir = sfConfig::get('sf_upload_dir');
      $thumbnail = new sfThumbnail(150, 150);
      $thumbnail2 = new sfThumbnail(800, 800);
      if($this->getAvatar())
      {
        $thumbnail->loadFile($uploadDir.'/avatar/'.$this->getAvatar());
        $thumbnail->save($uploadDir.'/avatar/thumbnail/'. $this->getAvatar());
        $thumbnail2->loadFile($uploadDir.'/avatar/'.$this->getAvatar());
        $thumbnail2->save($uploadDir.'/avatar/big/'. $this->getAvatar());
      }
   }  

当我提交表单时,我收到以下错误消息:

This form is multipart, which means you need to supply a files array as the bind() method second argument.

【问题讨论】:

  • 我们能看到你bind你的表单的地方吗?顺便说一句,我认为 extends 不是为 sfGuardUser 添加价值的最佳方式,您是否研究过将配置文件添加到 sfGuardUser 的内置功能? (见thisthis
  • j0k 感谢您的回复。我试图向 sfGuardUser 添加一个“配置文件”,并且能够设置表格,但是如何将额外的字段添加到“注册”表单中,以便对用户来说是无缝的,并且它们都显示在同一个形式?我尝试按照本教程HERE 进行操作,但它似乎只适用于后端。不是前端“注册”页面。我尝试向 sfGuardUserForm.class.php 添加一个“头像”小部件,但在提交表单时它不会将值保存在任何地方。
  • 如果你使用sfGuardRegisterForm,它扩展BasesfGuardRegisterForm,扩展sfGuardUserAdminForm。您的个人资料在sfGuardUserAdminForm 中定义。所以它可能会起作用。

标签: symfony-1.4 image-uploading sfguard


【解决方案1】:

在您绑定表单的 action 中,您应该使用如下内容:

$form->bind($request->getParamater($form->getName()), $request->getFiles($form->getName()));

所以你需要将上传的文件作为第二个参数传递给bind方法。

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2011-11-15
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2015-05-16
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多