Bonjour,
j'aimerai recharger le ProfileFormHundler de FosUserBundle pour ajouter la fonctionnalité de modification de la photo du profile; j'ai copié collé le ProfileFormHundler.php de FosuserBundle et j'ai ajouté le code approprié pour le traitement de l'image ainsi un bout de code pour récupérer le contenu du champs file; voici le code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
<?php
/*
* This file is part of the FOSUserBundle package.
*
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Ecommerce\UserBundle\Form\Handler;
use Symfony\Component\Form\Form;
use Symfony\Component\HttpFoundation\Request;
use FOS\UserBundle\Model\UserInterface;
use Ecommerce\UserBundle\Form\ProfileFormType;
use FOS\UserBundle\Model\UserManagerInterface;
use FOS\UserBundle\Form\Model\CheckPassword;
use FOS\UserBundle\Form\Handler\ProfileFormHandler as BaseHandler;
use Ecommerce\boutiqueBundle\services\image;
class ProfileFormHandler extends BaseHandler
{
protected $request;
protected $userManager;
protected $form;
protected $upload='upload\logo\\';
public function __construct(Form $form, Request $request, UserManagerInterface $userManager)
{
$this->form = $form;
$this->request = $request;
$this->userManager = $userManager;
}
public function setLogo($image_filename)
{
$image=$this->form->getData('logo');
$image = new Image($image);
$image->resize_to(90, 75);
$image->save_as($image_filename);
}
public function process(UserInterface $user)
{
//user form has email and repeating password fields
$this->form->setData(new CheckPassword($user));
if ('POST' === $this->request->getMethod()) {
$this->form->bindRequest($this->request);
if ($this->form->isValid()) {
$img=$this->form->getData('logo');
if($img!="" and $img!=null)
{
$this->setLogo($this->upload.uniqid().'_'.$img->getClientOriginalName());
$image=$user->setLogo(uniqid().'_'.$img->getClientOriginalName());
}
$this->onSuccess($user);
return true;
}
// Reloads the user to reset its username. This is needed when the
// username or password have been changed to avoid issues with the
// security layer.
$this->userManager->reloadUser($user);
}
return false;
}
protected function onSuccess(UserInterface $user)
{
$this->userManager->updateUser($user);
}
} |
ce code me génére l'erreur suivante:
Fatal error: Call to undefined method FOS\UserBundle\Form\Model\CheckPassword::getClientOriginalName() in /var/www/rawaje.com/Symfony277/src/Ecommerce/UserBundle/Form/Handler/ProfileFormHandler.php on line 59
et quant je remplace cette ligne :
$this->form->setData(new CheckPassword($user));
par celle là:
$this->form->setData($user);
j'obtiens cette erreur:
Expected argument of type "FOS\UserBundle\Form\Model\CheckPassword", "Ecommerce\UserBundle\Entity\User" given
500 Internal Server Error - UnexpectedTypeException
Merci pour votre aide d'avance.
Partager