Symfony 4 синхронизирует изображение с вводом файла - PullRequest
0 голосов
/ 12 января 2019

Я делаю приложение для библиотеки, вы можете установить изображение книги, и моя форма будет выглядеть так:

enter image description here

Желтое изображение разногласия - это фактическое изображение моей Книги.

Если я загружаю файл, я не вижу его (трюк с ярлыком для загрузки, поэтому ввод скрыт).

Было бы идеально, если бы изображение могло измениться ТОЛЬКО, КОГДА я загружаю изображение.

Например, я загружаю синее изображение разногласий (пример), поэтому изображение изменяется прямо сейчас в форме, и оно будет обновляться только в случае отправки формы).

Как я могу это сделать?

Мой контроллер:

/**
 * @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,
    ]);
}

1 Ответ

0 голосов
/ 12 января 2019

Это не вопрос Symfony. Если вы хотите увидеть img в браузере перед загрузкой, прочитайте этот ответ Предварительный просмотр изображения перед его загрузкой .

Если вы хотите загрузить изображение и просмотреть предварительный просмотр перед отправкой формы, вам необходимо создать новый маршрут, который обрабатывает загрузку изображения и возвращает путь загруженного изображения в ответ.

...