我真的很想知道为什么每当我尝试通过Symfony2中的表单上传照片时我都会收到此错误消息:
错误:在非对象上调用成员函数move()
这是我的实体文件中存在的代码( Photo.php ):
<?php
namespace Boutique\ProduitBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;
/**
* Photo
*
* @ORM\Table()
* @ORM\Entity
*/
class Photo
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="image", type="string", length=255)
*/
private $image;
/**
*
* @Assert\File(maxSize="5000k")
*/
public $file;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set image
*
* @param string $image
* @return Photo
*/
public function setImage($image)
{
$this->image = $image;
return $this;
}
/**
* Get image
*
* @return string
*/
public function getImage()
{
return $this->image;
}
public function getWebPath()
{
return null === $this->image ? null : $this->getUploadDir().'/'.$this->image;
}
protected function getUploadRootDir()
{
// le chemin absolu du répertoire dans lequel sauvegarder les photos de profil
//return __DIR__.'/../../../../web/groupe/'.$this->getUploadDir();
return __DIR__.'/../../../../web/'.$this->getUploadDir();
}
protected function getUploadDir()
{
// get rid of the __DIR__ so it doesn't screw when displaying uploaded doc/image in the view.
return 'uploads/pictures';
}
public function uploadPhotoPicture()
{
// Nous utilisons le nom de fichier original, donc il est dans la pratique
// nécessaire de le nettoyer pour éviter les problèmes de sécurité
// move copie le fichier présent chez le client dans le répertoire indiqué.
$this->file->move($this->getUploadRootDir(), $this->file->getClientOriginalName());
// On sauvegarde le nom de fichier
$this->image = $this->file->getClientOriginalName();
// La propriété file ne servira plus
$this->file = null;
}
}
控制器文件中的代码:
<?php
namespace Boutique\ProduitBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Boutique\ProduitBundle\Entity\Photo;
use Boutique\ProduitBundle\Form\PhotoType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends Controller
{
public function ajoutphotoAction(Request $request)
{
$photo = new Photo();
$form = $this->createForm(new PhotoType(), $photo);
if ($request->isMethod('POST')) {
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$photo->uploadPhotoPicture();
$em->persist($photo);
$em->flush();
$request->getSession()->getFlashBag()->add('success', 'Photo bien enregistrée.');
return new RedirectResponse($this->generateUrl('boutique_photo_ajout'));
}
}
return $this->render('BoutiqueProduitBundle:Ajoutphoto:ajout.html.twig',
array('form' => $form->createView()));
}
}
我想知道我的代码中有什么问题。有什么遗漏吗?