使用FOSUserBundle
时,我在注册过程中遇到问题。而不是我尝试上传的图像的真实路径,而是在数据库中,它总是在initial
列下保存path
值,并且图像不会上传到我定义的目录中。 / p>
namespace Session\UserBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Security\Core\Util\SecureRandom;
/**
* User
*
* @ORM\Table(name="User")
* @ORM\Entity(repositoryClass="Session\UserBundle\Entity\UserRepository")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
public $path;
/**
* @Assert\File(maxSize="6000000")
*/
public $file;
/* * *************************************************************** */
/**
* @ORM\PostRemove()
*/
public function removeUpload()
{
if ($this->file == $this->getAbsolutePath()) {
unlink($this->file);
}
}
public function getAbsolutePath()
{
return null === $this->path ? null : $this->getUploadRootDir() . '/' . $this->path;
}
public function getWebPath()
{
return null === $this->path ? null : $this->getUploadDir() . '/' .
$this->id . '/' . $this->path;
}
protected function getUploadRootDir()
{
return __DIR__ . '/../../../../web/' . $this->getUploadDir() . '/' . $this->id;
}
protected function getUploadDir()
{
return 'uploads/users';
}
/**
* Set path
*
* @param string $path
* @return User
*/
public function setPath($path)
{
$this->path = $path;
return $this;
}
/**
* Get path
*
* @return string
*/
public function getPath()
{
return $this->path;
}
/**
* @param UploadedFile $file
* @return object
*/
public function setFile(UploadedFile $file = null)
{
$this->upload();
return $this;
}
/**
* Get the file used for profile picture uploads
*
* @return UploadedFile
*/
public function getFile()
{
return $this->file;
}
/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function preUpload()
{
if (null !== $this->getFile()) {
// a file was uploaded
// generate a unique filename
$filename = $this->generateRandomProfilePictureFilename();
$this->setPath($filename . '.' . $this->getFile()->guessExtension());
}
}
/**
* Generates a 32 char long random filename
*
* @return string
*/
public function generateRandomProfilePictureFilename()
{
$count = 0;
do {
$generator = new SecureRandom();
$random = $generator->nextBytes(16);
$randomString = bin2hex($random);
$count++;
} while (file_exists($this->getUploadRootDir() . '/' . $randomString . '.' . $this->getFile()->guessExtension()) && $count < 50);
return $randomString;
}
/**
* @ORM\PostPersist()
* @ORM\PostUpdate()
*/
public function upload()
{
if (null === $this->file) {
return;
}
$this->getFile()->move($this->getUploadRootDir(), $this->getPath());
if (isset($this->tempPath) && file_exists($this->getUploadRootDir() . '/' . $this->tempPath)) {
unlink($this->getUploadRootDir() . '/' . $this->tempPath);
$this->tempPath = null;
}
$this->file = null;
}
}
数据库行预览:
有什么问题?