Php Symfony 4将图像与文件输入同步

Php Symfony 4将图像与文件输入同步,php,symfony,file-upload,symfony-forms,symfony4,Php,Symfony,File Upload,Symfony Forms,Symfony4,我制作了一个图书馆应用程序,您可以设置一个图书图像,我的表单如下所示: 黄色的不和谐图像是我的书实体的真实图像 如果我上传一个文件,我看不到它(标签技巧上传,输入隐藏所以) 如果在我上传图像时图像可以改变,那就太完美了 例如,我正在上传blue discord图像(示例),因此该图像现在在表单上更改,并且只有在我提交表单时才会更新) 我该怎么做 我的控制器: /** * @Route("/{id}/edit", name="book_edit", methods={"GET","POST"}

我制作了一个图书馆应用程序,您可以设置一个图书图像,我的表单如下所示:

黄色的不和谐图像是我的书实体的真实图像

如果我上传一个文件,我看不到它(标签技巧上传,输入隐藏所以)

如果在我上传图像时图像可以改变,那就太完美了

例如,我正在上传blue discord图像(示例),因此该图像现在在表单上更改,并且只有在我提交表单时才会更新)

我该怎么做

我的控制器:

/**
 * @Route("/{id}/edit", name="book_edit", methods={"GET","POST"})
 */
public function edit(Request $request, Book $book, BookRepository $bookRepository, ClientRepository $clientRepository): Response
{
    $form = $this->createForm(BookType::class, $book);

    $image_source = $book->getImage()->getSrc();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $image = new Image();

        if($request->files->get('book')['image']['src'] !== null && $request->files->get('book')['image']['src'] !== 'no_change')
        {
            $file = $request->files->get('book')['image']['src'];
            $name = $file->getClientOriginalName('src');
            $fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();
            $alt = $book->getImage()->getText();

            $image->setSrc($fileName);
            $image->setText($alt);

            $book->setImage($image);


            $fileSystem = new Filesystem();

            try {
                $fileSystem->remove(array('symlink', $this->getParameter('Cover_directory'), $image_source));
            } catch (IOExceptionInterface $exception) {
                echo "An error occurred while creating your directory at ".$exception->getPath();
            }

            try {
                $file->move($this->getParameter('Cover_directory'), $fileName);
            } catch(FileException $e) { 
                // die($e); 
            }
        }
        else {
            $image = $book->getImage();
            $image->setSrc($image_source);
            $image->setText($image->getText());
            $book->setImage($image);
        }

        if($request->request->get('client'))
        {
            $client = $clientRepository->find($request->request->get('client'));
            $book->setClient($client);
        }

        $this->getDoctrine()->getManager()->persist($image);
        $this->getDoctrine()->getManager()->persist($book);
        $this->getDoctrine()->getManager()->flush();

        return $this->redirectToRoute('book_index', ['id' => $book->getId()]);
    }
    $clients = $clientRepository->findAll();
    // dump($clients);die;
    return $this->render('book/edit.html.twig', [
        'book' => $book,
        'form' => $form->createView(),
        'clients' => $clients,
    ]);
}

这不是一个简单的问题。如果您想在上传之前在浏览器中查看img,请阅读此答案


如果您希望在提交表单之前上载图像并查看预览,则需要创建新路由,该路由处理上载图像并返回上载图像的路径作为响应

PHP是厨师,页面源是菜肴,就餐者是浏览器。一旦这道菜被交给服务员[HTTP]并送到就餐者手中,厨师就不能改变它的排列方式。用餐者可以用手[Javascript]移动它,向服务员索要厨房里的一点额外酱汁[AJAX请求],或者干脆把整个东西送回厨师重新制作。[页面刷新]Sammitch用一个比喻来概括它。@AdibAroui是的,当然,但我不知道如何使用ajax+js,我是一个Symfony初学者听起来你也应该开始成为Javascript初学者。