2016-10-04 2 views
0

Я работаю над проектом с ZF2 и Zend Form. Я хотел бы добавить аватар в профиль пользователя.ZendForm: переместите изображение в папку

Проблема в том, что я получаю только имя файла и сохраняю его в БД. Я хотел бы вставить его в папку, чтобы я мог ее получить и отобразить. Остальная часть формы работает.

Я предполагаю, что мне нужно получить информацию от $ FILES, но я понятия не имею, как это сделать. Я прочитал документацию, но не могу понять, как применить ее к моему проекту.

Спасибо заранее!

Вот мой контроллер действий

public function signinAction() 
    { 
     $this->em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default'); 

     $form = new SignupForm($this->em); 

     $model = new ViewModel(array("form" => $form)); 

     $url = $this->url()->fromRoute("signin"); 
     $prg = $this->prg($url, true); 

     if($prg instanceof \Zend\Http\PhpEnvironment\Response){ 
      return $prg; 
     } 
     else if($prg === false){ 
      return $model; 
     } 

     $user = new User(); 
     $form->bind($user) ; 
     $form->setData($prg) ; 

     if($form->isValid()){ 
      $bcrypt = new Bcrypt() ; 
      $pwd = $bcrypt->create($user->getPassword()); 
      $user->setPassword($pwd); 
      $this->em->persist($user) ; 
      $this->em->flush() ; 

      return $this->redirect()->toRoute('login'); 
     } 

     return $model ; 
    } 

Вот мой файл формы:

class SignupForm extends Form 
{ 
    private $em = null; 

    public function __construct($em = null) { 
     $this->em = $em; 
     parent::__construct('frm-signup'); 

     $this->setAttribute('method', 'post'); 
     $this->setHydrator(new DoctrineEntity($this->em, 'Application\Entity\User')); 

     //Other fields 
     ... 

     //File 
     $this->add(array(
      'type' => "File", 
      'name' => 'avatar', 
      'attributes' => array(
       'value' => 'Avatar', 
      ),  
     ));  

     //Submit 
     ...   
    } 
} 

И форма, на мой взгляд:

 $form = $this->form;   
     echo $this->form()->openTag($form); 
     //other formRow 
     echo $this->formFile($form->get('avatar')); 
     echo $this->formSubmit($form->get('submit')); 
     echo $this->form()->closeTag(); 

ответ

1

Есть две вещи, которые вы можете смотреть на для получение вашего аватара для работы:

  1. Использование Gravatar помощник вида (использует gravatar.com сервис, который автоматически связывает изображения по адресам электронной почты)
    • документацию по использованию Gravatar службы можно найти here
  2. Загрузить изображения себя с классами загрузки файлов, которые поставляются с ZF2:
    • класса формы для загрузки файлов можно найти here
    • документации входного фильтра класса можно найти here

Если вы будете следовать этим документам вы должны быть в состоянии управлять тем, что вы хотите ,


Примечание: проверка особенно использование the Zend\Filter\File\RenameUpload filter в примере в документации входного фильтра. Этот фильтр переименовывает/перемещает загруженный файл аватара в нужное место.

+0

Спасибо за ваш ответ! Я, наконец, сделал это вчера, но мне больно в новой проблеме (здесь я задал новый вопрос: http://stackoverflow.com/questions/39874645/zend-form-call-to-undefined-method-zend-inputfilter- inputfiltergetfilterchai) из-за метода Zend \ InputFilter \ InputFilter :: getFilterChain(). Если у вас есть время, чтобы взглянуть, я был бы очень рад;) – KatharaDarko

Смежные вопросы