从表单上传图像到symfony 3

时间:2017-05-21 01:31:40

标签: symfony web

我正在尝试制作销售商品页面。表单和页面呈现 我不完全确定我做错了什么,但当我点击提交时出现错误500.可能存在语法错误,我没有抓到

我将参数设置为image_directory:'%kernel.root_dir%/ .. / web / images'

class SellPage extends Controller
    {
        /**
         * @Route("/SellItem", name="Sell_Item")
         */
        public function goToSellPage(Request $request)
        {
            $item = new Item();

            $sellForm = $this->createFormBuilder($item)
                ->setMethod("POST")
                ->add('name', TextType::class, array('label' => 'Item Name: ', 'attr' => array('class' => 'form-control form-group')))
                ->add('price', TextType::class, array('label' => 'Price: ', 'attr' => array('class' => 'form-control form-group')))
                ->add('image', FileType::class, array('label' => 'Image Upload Click Here', 'attr' => array('class' => 'btn btn-lg form-group')))
                ->add('description', TextareaType::class, array('label' => 'Description', 'attr' => array('class' => 'form-control form-group')))
                ->add('category', EntityType::class, array('class' => 'AppBundle\Entity\Category', 'choice_label' => 'name', 'label' => 'Category', 'attr' => array('class' => 'form-control form-group')))
                ->add('seller', EntityType::class, array('class' => 'AppBundle\Entity\User', 'choice_label' => 'userName', 'label' => 'Seller', 'attr' => array('class' => 'form-control form-group')))
                ->add('save', SubmitType::class, array('label' => 'Submit', 'attr' => array( 'class' => 'btn btn-lg btn-success form-group')))
                ->getForm();

            $sellForm->handleRequest($request);
            if ($sellForm->isValid())
            {
                $formData = $request->request->get('sellForm');
                $item->setName($formData['name']);
                $item->setPrice($formData['price']);
                $item->setDescription($formData['description']);
                $repository = $this->getDoctrine()->getManager()->getRepository('AppBundle:User');
                $item->setSeller($repository->getUserByName($item->getSeller()));
                $item->setBuyer($repository->find(2));

                $fileName = 'http://sfsuse.com/~sp17g01/sp17g01/web/images/'.md5(uniqid()).$sellForm['image']->getData()->guessExtension();

                $sellForm['image']->getData()->move(
                    $this->getParameter('image_directory'),
                    $fileName);





                $item->setImage($fileName);



                $catRepository = $this->getDoctrine()->getManager()->getRepository('AppBundle:Category');
                $item->setCategory($catRepository->find(1));

                $em = $this->getDoctrine()->getManager();
                $em->persist($item);
                $em->flush();



            }

            return $this->render('default/SellItem.html.twig',['sellForm' => $sellForm->createView(),]);
        }
    }

2 个答案:

答案 0 :(得分:0)

在你的parameters.yml文件中使用:

image_directory: images

而且我还认为你需要像这样更改$filename

$fileName = 'images/'.md5(uniqid()).$sellForm['image']->getData()->guessExtension();

如果您遇到错误,最好将app_dev.php附加到您的symfony应用URL(调试网址)。例如,在localhost上使用:

https://bloggeek.me/twilio-acquires-kurento/

然后通过附加路线指向路线,例如:

http://localhost/app_dev.php

然后您将获得更多调试信息。我建议使用deubg URL进行开发使用。

答案 1 :(得分:0)

尝试使用这种结构:

       if ($form->isSubmitted()) {
            if ($form->isValid()) {
                $img = $user->getImg();
                if ($img !== null) {
                    $img = $user->getImg();
                    $fileName = md5(uniqid()).'.'.$img->getExtension();
                    $img->move(
                        $this->getParameter('user_images'),
                        $fileName
                    );
                    $user->setImg($fileName);
                }
            }
       }