我正在使用symphony 3和FOSUserBundle创建一个应用程序 我用其他礼物创建了我的User类,其中一个是个人资料图片 这是我的用户类:
#src/UserBundle/Entity/User.php
<?php
namespace 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;
/**
* @ORM\Entity
* @ORM\Table(name="users")
* @ORM\HasLifecycleCallbacks()
*/
class User extends BaseUser {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
* @ORM\Column(name="first_name", type="string", length=255)
* @Assert\NotBlank()
*/
private $first_name;
/**
* @var string
* @ORM\Column(name="last_name", type="string", length=255)
* @Assert\NotBlank()
*/
private $last_name;
/**
* @var string
* @ORM\Column(name="address", type="string", length=255, nullable=true)
*/
private $address;
/**
* @var string
* @ORM\Column(name="post", type="string", length=255, nullable=true)
*/
private $post;
/**
* @var string
* @ORM\Column(name="city", type="string", length=255, nullable=true)
*/
private $city;
/**
* @var \DateTime
* @ORM\Column(name="birth_date", type="datetime", nullable=true)
*/
private $birth_date;
/**
* @var string
* @ORM\Column(name="gender", type="string", length=1)
*/
private $gender;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $path;
/**
* @Assert\File(
* maxSize = "5M",
* mimeTypes = {"image/jpeg", "image/gif", "image/png", "image/tiff"},
* maxSizeMessage = "The maximum allowed file size is 5MB.",
* mimeTypesMessage = "Only the file types image are allowed.")
*/
public $file;
public function __construct() {
parent::__construct();
}
/**
* @return string
*/
public function getAddress() {
return $this->address;
}
/**
* @return string
*/
public function getFirstName() {
return $this->first_name;
}
/**
* @param string $first_name
*/
public function setFirstName($first_name) {
$this->first_name = $first_name;
}
/**
* @return string
*/
public function getLastName() {
return $this->last_name;
}
/**
* @param string $last_name
*/
public function setLastName($last_name) {
$this->last_name = $last_name;
}
/**
* @param string $address
*/
public function setAddress($address) {
$this->address = $address;
}
/**
* @return string
*/
public function getPost() {
return $this->post;
}
/**
* @param string $post
*/
public function setPost($post) {
$this->post = $post;
}
/**
* @return string
*/
public function getCity() {
return $this->city;
}
/**
* @param string $city
*/
public function setCity($city) {
$this->city = $city;
}
/**
* @return \DateTime
*/
public function getBirthDate() {
return $this->birth_date;
}
/**
* @param \DateTime $birth_date
*/
public function setBirthDate($birth_date) {
$this->birth_date = $birth_date;
}
/**
* @return string
*/
public function getGender() {
return $this->gender;
}
/**
* @param string $gender
*/
public function setGender($gender) {
$this->gender = $gender;
}
/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function preUpload() {
if (null !== $this->file) {
$this->path = uniqid('', true) . '.' . $this->file->guessExtension();
}
}
/**
* @ORM\PostPersist()
* @ORM\PostUpdate()
*/
public function upload() {
if (null === $this->file) {
return;
}
$this->file->move($this->getUploadRootDir(), $this->path);
unset($this->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';
}
/**
* @param string $path
* @return User
*/
public function setPath($path) {
$this->path = $path;
return $this;
}
/**
* @return string
*/
public function getPath() {
return $this->path;
}
public function setEmail($email) {
$email = is_null($email) ? '' : $email;
parent::setEmail($email);
$this->setUsername($email);
return $this;
}
}
然后我有了ProfileFormType类:
#src/UserBundle/Form/Type/ProfileFormType.php
<?php
namespace UserBundle\Form\Type;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class ProfileFormType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->remove('username');
$builder->remove('current_password');
$builder->add('first_name', TextType::class, array('label' => "First Name", 'invalid_message' => 'Please enter your First Name'));
$builder->add('last_name', TextType::class, array('label' => "Last Name", 'invalid_message' => 'Please enter your Last Name'));
$builder->add('address', TextType::class);
$builder->add('post', TextType::class, array('label' => "Post Code"));
$builder->add('city', TextType::class);
$builder->add('gender', ChoiceType::class, array('choices' => array('Male' => 'm', 'Female' => 'f'), 'choices_as_values' => true));
$builder->add('birth_date', DateType::class, array('label' => "Birth Date", 'widget' => 'single_text', 'invalid_message' => 'Please enter a valid date'));
$builder->add('file', FileType::class, array('label' => "Profile Picture", 'data_class' => null));
}
public function getParent() {
return 'FOS\UserBundle\Form\Type\ProfileFormType';
}
}
我的表单看起来像:
#src/UserBundle/Resources/views/Profile/edit_content.html.twig
{{ form_start(form, { 'action': path('fos_user_profile_edit'), 'attr': { 'class': 'fos_user_profile_edit' } }) }}
<div class="col-md-12">
<span class="btn btn-default btn-file"> Browse {{ form_widget(form.file) }}</span>
</div>
<div class="col-md-12">
<input type="submit" id="_submit" name="_submit" value="{{ 'profile.edit.submit'|trans }}" class="btn btn-success" />
</div>
{{ form_end(form) }}
表单已正确提交,如果存在错误则显示错误。
但是在数据库中,'path'为空,文件夹(具有读/写权限)为空
当我在表单中添加{{ form_enctype(form) }}
时出现错误:Unknown "form_enctype" function in FOSUserBundle:Profile:edit_content.html.twig
我的问题是:我该如何解决这个问题?
我看不出任何错误,一切看起来都不错,但它不起作用。
答案 0 :(得分:1)