【问题标题】:ZendForm: move a picture into a folderZendForm:将图片移动到文件夹中
【发布时间】:2016-10-04 13:19:38
【问题描述】:

我正在使用 ZF2 和 Zend Form 开展一个项目。我想将头像添加到用户个人资料中。

问题是我只获取文件名并将其保存在数据库中。我想把它插入一个文件夹,这样我就可以得到它并显示它。表格的其余部分正在工作。

我的猜测是我必须从 $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();

【问题讨论】:

    标签: php zend-framework zend-framework2 zend-form


    【解决方案1】:

    您可以考虑两件事来让您的头像工作:

    1. 使用 Gravatar 视图助手(使用自动将图像链接到电子邮件地址的 gravatar.com 服务)
      • 使用 gravatar 服务的文档可以在 here 找到
    2. 使用 ZF2 附带的文件上传类自行上传图片:
      • 文件上传的表单类可以找到here
      • 输入过滤器类文档可以找到here

    如果您遵循这些文档,您应该能够管理您想要的内容。


    注意:特别检查输入过滤器文档中示例中the Zend\Filter\File\RenameUpload filter 的使用。此过滤器将上传的头像文件重命名/移动到所需位置。

    【讨论】:

    • 感谢您的回答!我昨天终于做到了,但是由于 Zend\InputFilter\InputFilter::getFilterChain() 方法,我遇到了一个新问题(我在这里做了一个新问题:stackoverflow.com/questions/39874645/…)。如果你有时间看看,我会很高兴;)
    猜你喜欢
    • 2013-10-15
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    相关资源
    最近更新 更多