ZendForm:将图片移动到文件夹中
ZendForm: move a picture into a folder
我正在使用 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();
要让您的头像正常工作,您可以考虑以下两点:
- 使用 Gravatar 查看助手(使用
gravatar.com
自动将图像链接到电子邮件地址的服务)
- 可以找到有关使用 gravatar 服务的文档 here
- 使用 ZF2 附带的文件上传 classes 自行上传图像:
如果您遵循这些文档,您应该能够管理您想要的内容。
注意: 请特别检查输入过滤器文档中示例中 the Zend\Filter\File\RenameUpload
filter 的使用。此过滤器 renames/moves 上传的头像文件到所需位置。
我正在使用 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();
要让您的头像正常工作,您可以考虑以下两点:
- 使用 Gravatar 查看助手(使用
gravatar.com
自动将图像链接到电子邮件地址的服务)- 可以找到有关使用 gravatar 服务的文档 here
- 使用 ZF2 附带的文件上传 classes 自行上传图像:
如果您遵循这些文档,您应该能够管理您想要的内容。
注意: 请特别检查输入过滤器文档中示例中 the Zend\Filter\File\RenameUpload
filter 的使用。此过滤器 renames/moves 上传的头像文件到所需位置。