Php Symfony 4将图像与文件输入同步
我制作了一个图书馆应用程序,您可以设置一个图书图像,我的表单如下所示: 黄色的不和谐图像是我的书实体的真实图像 如果我上传一个文件,我看不到它(标签技巧上传,输入隐藏所以) 如果在我上传图像时图像可以改变,那就太完美了 例如,我正在上传blue discord图像(示例),因此该图像现在在表单上更改,并且只有在我提交表单时才会更新) 我该怎么做 我的控制器: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"}
/**
* @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初学者。