Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 4:从';切换时,将文件上载到文件夹不起作用;开发和#x27;至';产品';_Php_Symfony4 - Fatal编程技术网

Php Symfony 4:从';切换时,将文件上载到文件夹不起作用;开发和#x27;至';产品';

Php Symfony 4:从';切换时,将文件上载到文件夹不起作用;开发和#x27;至';产品';,php,symfony4,Php,Symfony4,我创建了一个函数,用户可以上传文章/完成项目的文件。这些上传的图像将出现在网站主页上 当我尝试将文件上载到开发环境中的特定文件夹时,它会起作用。但是,如果我尝试在生产环境中上载文件,这些文件将不会移动到目标文件夹。有没有人有类似的问题/可以帮我解决 下面的代码是名为Artikel(英文文章)Afbeeldingen->英文图像的实体 /** * @ORM\Entity(repositoryClass="App\Repository\ArtikelRepository") */ class A

我创建了一个函数,用户可以上传文章/完成项目的文件。这些上传的图像将出现在网站主页上

当我尝试将文件上载到开发环境中的特定文件夹时,它会起作用。但是,如果我尝试在生产环境中上载文件,这些文件将不会移动到目标文件夹。有没有人有类似的问题/可以帮我解决

下面的代码是名为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;
    }
}
 /**
     * @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(),
        ]);
    }
下面的代码是配置上载目录(images\u目录)的services.yaml文件

下面的代码是Artikel实体的控制器,称为Artikel控制器(英文为Article和ArticleController)

如果有人能帮我,我会很高兴的!提前谢谢

该“www”文件夹位于“public”文件夹之外。 您无法访问公用文件夹之外的任何文件夹

这样设置service.yaml,然后重试并仔细检查文件系统权限


“%kernel.project\u dir%/public/uploads/artikelen”

您有一个空的
catch
块。尝试输出消息
catch(FileException$e){echo$e->getMessage();die();}
我建议引用PHP catch(\Exception$e){$this->addflash('danger','e');//仅用于调试返回$this->redirectoroute('index');}我没有得到任何错误。如果我上传文件,它将继续进行。但是,当我检查他们应该移动的文件夹时,它是空的。因此,到文件夹(在域主机上)的路由是个问题。正如我在下面的snipershadys消息中提到的,由于主机的默认设置,我不得不将公用文件夹的名称更改为www。在我的domainhost上的根文件夹中有2个文件夹。“www”(公共)和“私人”。www文件夹包含“上载”文件夹。因此,我认为它必须与您的解释有所不同,对吗?您的域主机将有一个指向一个公共目录的虚拟主机,该目录就是您的Symfony项目中名为“public”的目录。您是在开发环境中还是直接从您的web主机上尝试此代码?如果我在我的开发环境中尝试,它将与以下设置一起工作:参数:区域设置:“en”images\u目录:“%kernel.project\u dir%/www/uploads/artikelen”如果我在我的生产环境/web主机中尝试,它将无法与这些设置一起工作。所以我尝试了两种环境。这可能也很重要:当我将所有代码放到web主机上时,我将公用文件夹的名称更改为www。我更改了所有设置,所以除了那一小段代码外,一切都正常工作。所以你覆盖了Symfony的默认目录结构?您是否按照建议检查了异常?是的,但这没有意义。我尝试了异常,但没有出现任何消息。
 /**
     * @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(),
        ]);
    }