2013-03-06 4 views
0

내 사용자가 "아바타"필드에 대한 이미지를 업로드 할 수있게 해주는 프로젝트가 심포니에 있습니다. 나는 아래의 스키마를 가지고있는 테이블 "확장"하는 방법에 대한 많은 글 발견 :Symfony Add Avatar 필드를 sfGuardUser 모델

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

열이 잘 테이블에 추가하지만, 얻을를 나는 sfWidgetFormInputFileEditable에 위젯을 변경 갈 때 휴식.

$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>', 
)); 

양식의 기능을 "저장":

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

: 나는 양식을 제출하면

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()); 
     } 
    } 

, 나는이 오류 메시지를 여기에 Form.class 파일입니다

+0

양식을 '묶는'장소를 볼 수 있습니까? 그건 그렇고,'extend'가 sfGuardUser에 가치를 더하는 가장 좋은 방법은 아니라고 생각합니다. sfGuardUser에 프로파일을 추가 할 수있는 내장 기능을 살펴 보았습니까? ([this] (http://jmather.com/2010/10/09/customize-sfguarduser-sfdocrineguard/) 또는 [this] (http://trac.symfony-project.org/browser/plugins/sfGuardPlugin/ 참조) 분기/1.3/README # L225)) – j0k

+0

j0k 답장을 보내 주셔서 감사합니다. sfGuardUser에 "프로필"을 추가하려고 시도했지만 테이블을 설정할 수 있었지만 추가 필드를 "등록"양식에 추가하여 사용자에게 매끄럽게 표시하고 동일한 필드에 모두 표시되도록하는 방법 형태? 나는이 튜토리얼 [여기] (http://symfony.com/blog/call-the-expert-customizing-sfdoctrineguardplugin)을 따라 시도했지만 백엔드와 만 작동하는 것으로 보인다. 프론트 엔드 "등록"페이지가 아닙니다. sfGuardUserForm.class.php에 "아바타"위젯을 추가하려했지만 양식을 제출할 때 아무 값도 저장하지 않습니다. – djcloud23

+0

'sfGuardRegisterForm'을 사용하면'sfGuardUserAdminForm'을 확장하는'BasesfGuardRegisterForm'을 확장합니다. 그리고 여러분의 프로필은'sfGuardUserAdminForm' 안에 정의되어 있습니다. 그래서 그것은 효과가있을 것입니다. – j0k

답변

1

양식을 바인딩 할 때 다음과 같이 사용해야합니다.

따라서 업로드 된 파일을 bind 메소드의 두 번째 매개 변수로 전달해야합니다.