Symfony 4: загрузка файлов в папку не работает при переключении с «dev» на «prod» - PullRequest
0 голосов
/ 30 сентября 2019

Я создал функцию, чтобы пользователь мог загружать файлы для статьи / готового проекта. Эти загруженные изображения появятся на главной странице сайта.

Когда я пытаюсь загрузить файлы в определенную папку в моей среде разработки, это работает. Однако, если я попытаюсь загрузить файлы в производственной среде, они не будут перемещены в папку назначения. Есть ли кто-нибудь, кто имел подобную проблему / может помочь мне?

Код ниже Сущность называется Artikel (статья на английском языке) Afbeeldingen -> Изображения на английском языке

/**
 * @ORM\Entity(repositoryClass="App\Repository\ArtikelRepository")
 */
class Artikel
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="array")
     */
    private $afbeeldingen = [];

    public function getAfbeeldingen()
    {
        return $this->afbeeldingen;
    }

    public function setAfbeeldingen(array $afbeeldingen): self
    {
        $this->afbeeldingen = $afbeeldingen;

        return $this;
    }
}

Ниже приведен код services.yaml , в котором сконфигурирован каталог загрузки (images_directory)

parameters:
    locale: 'en'
    images_directory: '%kernel.project_dir%/www/uploads/artikelen'

Ниже приведен код Controller для объекта Artikel, называемый ArtikelController (Article и ArticleController на английском языке)

 /**
     * @Route("/admin/artikel/new", name="artikel_new", methods={"GET","POST"})
     */
    public function new(Request $request): Response
    {
        $artikel = new Artikel();
        $form = $this->createForm(ArtikelType::class, $artikel);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {

            $articleImages = $form->get('afbeeldingen')->getData();
            $images_directory = $this->getParameter('images_directory');  

            $afbeeldingen = array();
            $teller = 0;

            foreach ($articleImages as $articleImage) {
                $originalFilename = pathinfo($articleImage->getClientOriginalName(), PATHINFO_FILENAME);
                $filename = Urlizer::urlize($originalFilename) . '-' . uniqid() . '.' . $articleImage->guessExtension();

                $afbeeldingen[$teller] = $filename;
                $teller += 1;

                try {
                    $articleImage->move($images_directory, $filename);
                } catch (FileException $e) {
                }
            }

            $artikel->setAfbeeldingen($afbeeldingen);

            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($artikel);
            $entityManager->flush();
            $this->addFlash('success', 'Artikel is aangemaakt.');


            return $this->redirectToRoute('artikel_index');
        }


        return $this->render('artikel/new.html.twig', [
            'artikel' => $artikel,
            'form' => $form->createView(),
        ]);
    }

Iбыл бы рад, если бы кто-то мог помочь мне! Заранее спасибо!

1 Ответ

0 голосов
/ 30 сентября 2019

папка "www" находится вне папки "public". Вы не можете получить доступ к какой-либо папке за пределами общедоступной.

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

'% kernel.project_dir% / public / uploads / artikelen'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...