0
/**
* @ORM\Entity
*/
class User
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="name", type="string", length=100, nullable=false)
*/
private $name;
/**
* @ORM\Column(type="string", name="picture", nullable=true)
* @Assert\Image
* @Assert\File(maxSize = "2M")
*/
private $picture;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
* @return User
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
public function setPicture($file)
{
$this->picture = $file;
return $this;
}
public function getPicture()
{
return $this->picture;
}
}
そして、ここでは私にformType
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', TextType::class, [
'label' => 'Name *',
'attr' => [
'class' => 'form-control placeholder-height'
],
'label_attr' => [
'class' => 'col-md-2 professional-attr'
],
'constraints' => [
new Assert\NotBlank(),
new Assert\Length(['min' => 3, 'max' => 50])
]
]);
$builder->add('picture', FileType::class, [
'label' => 'Profile Picture',
'attr' => [
'class' => 'form-control filestyle',
'data-iconName' => 'glyphicon glyphicon-camera',
'data-buttonText' => null,
'accept' => 'image/*'
],
'label_attr' => [
'class' => 'col-md-2 professional-attr'
],
'data_class' => null
]);
$builder->add('confirm', SubmitType::class, [
'label' => 'SUBMIT',
'attr' => [
'class' => 'submit'
]
]);
}
public function setDefaultOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'UserBundle:User'
]);
}
}
次ユーザエンティティであり、ここで私のコントローラのコードでいる
public function professionalEditAction(Request $request)
{
$em = $this->get('doctrine.orm.entity_manager');
$user = $em->getRepository('UserBundle:User')->findOneBy(['id' => $request->get('id')]);
if (!$user) {
throw $this->createNotFoundException('Invalid user or user does not exist');
}
$form = $this->createForm(Form\ProfessionalType::class, $user, [
'method' => 'POST',
'attr' => [
'class' => 'form-horizontal',
'novalidate' => 'novalidate',
'accept' => 'image/*'
]
]);
$form->handleRequest($request);
$response = [];
$response['params'] = [];
if($form->isSubmitted() && $request->isXmlHttpRequest() && !$form->isValid()) {
$data = $form->getData();
foreach ($form as $child) {
if (!$child->isValid()) {
$response['status'] = 'error';
$response['next_action'] = 'fix_error';
$response['params'] = [];
foreach ($child->getErrors() as $error) {
$response['errors'][$child->getName()][] = $error->getMessage();
}
}
}
return new JsonResponse($response);
}
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$file = $user->getPicture();
if ($file instanceof UploadedFile) {
$fileName = md5(uniqid()).'.'.$file->guessExtension();
$file->move(
$this->getParameter('profile.picture.attachment.dir'),
$fileName
);
$data->setPicture($fileName);
}
$em->persist($data);
$em->flush();
$request->getSession()->getFlashBag()->add('success', 'User created successfully!');
return $this->redirect($this->generateUrl('admin_professional_create'));
}
return $this->render('UserBundle:Admin:professional.edit.html.twig', [
'form' => $form->createView(),
'user' => $user
]);
}
それを私は新しいファイルをアップロードすると完全に動作しますが、入力フィールドを空にすると、それは私が行うDBのNULL
値に変わります私が欲しいのは、ユーザーが以前に画像をアップロードして次回は空のままにしておけば、DBの画像の値を変更しないだけです。
注:この情報が役立つかどうかはわかりませんが、AjaxとFormDataを使用してフォームを送信していますが、コードの一部を省略してシンプルにしています。
私はここで何が欠けていますか?
これは意味があります、ありがとう、それは動作します:-) –