尝试使用文件系统创建文件

jea*_*hel 0 php symfony

当我提交表单时,我会使用表单中的信息创建一个 json。然后我尝试将这些信息写入一个文件中,但我有一些困难。
我使用Symfony\Component\Filesystem\Filesystem然后我使用 dumpFile :
$filesystem->dumpFile('%kernel.project_dir%/src/Json/file.json', $jsonContent)
文件夹 Json 已经存在,如果我转储 $jsonContent 我得到了信息,但从未创建该文件。

我做错了什么?

yol*_*yer 5

Filesystem组件不会像%kernel.project_dir%. 您必须从依赖项注入中检索项目目录,然后使用它来构建整个路径:

// Get the project directory in a way or another:
$projectDir = $kernel->getProjectDir();

// Store your file:
$fs = new Filesystem();
$fs->dumpFile("$projectDir/src/Json/file.json", 'Hello World');
Run Code Online (Sandbox Code Playgroud)

获取项目目录的一些方法

1.通过使用services.yaml

将此添加到您的 services.yaml 中:

// Get the project directory in a way or another:
$projectDir = $kernel->getProjectDir();

// Store your file:
$fs = new Filesystem();
$fs->dumpFile("$projectDir/src/Json/file.json", 'Hello World');
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过$projectDirectory在服务/控制器的构造函数中命名参数来注入您的项目目录:

<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Filesystem\Filesystem;

class HomeController
{
    public function index(string $projectDirectory): Response
    {
        // Store your file:
        $fs = new Filesystem();
        $fs->dumpFile("$projectDirectory/src/Json/file.json", 'Hello World');

        return new Response();
    }
}
Run Code Online (Sandbox Code Playgroud)

2.通过注入 KernelInterface

在我们这个时代,建议较少:

<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpKernel\KernelInterface;

class HomeController
{
    public function index(KernelInterface $kernel): Response
    {
        $projectDirectory = $kernel->getProjectDir();

        // Store your file:
        $fs = new Filesystem();
        $fs->dumpFile("$projectDirectory/src/Json/file.json", 'Hello World');

        return new Response();
    }
}
Run Code Online (Sandbox Code Playgroud)