symfony4.3 添加带有 类 的自定义文件夹

symfony4.3 adding custom folder with classes

在我的默认 symfony4 结构中,我想添加 lib 文件夹,其中我有额外的 classes。所以像这样:

-bin
-config
-lib
  - Importer.php
  ...(other files with classes)
-public
-src
   - Controller
      - TestController.php
   - Entity
   - Form
  ...
...

但我不知道以后如何使用我的文件(即:Importer.php)。

假设 Importer.php 内部有一个 class Importer()。如果我尝试从 TestController.php 使用它,我会得到:

Attempted to load class "Importer" from namespace "lib". Did you forget a "use" statement for another namespace?

TestController.php 有

use Importer;

在顶部指定(由 PhpStorm 自动检测)。我还尝试在 Importer.php 文件中添加名称空间,例如:

namespace lib;

然后在 TestController 中:

use lib\Importer;

但它产生相同的结果。

最后在阅读有关服务的信息后,我尝试将文件添加到 config/services.yaml

lib\:
    resource: '../lib/Importer.php'

结果相同...

做什么,怎么生活?

首先阅读php namespaces

接下来阅读 psr-4 standart

Select 文件夹的前缀,比方说 Lib。确保 lib 文件夹中的所有文件都具有正确的命名空间。例如。 Importer class 必须存储在 lib\Importer.php 并且必须有 namespace Lib;, Items\Item class 必须存储在 lib\Items\Item.php并且必须有 namespace Lib\Items\Item; 等等。

您的文件已准备就绪。只需要将它们告知 Symfony。

Symfony 使用作曲家的自动加载器,所以检查 composer's autoload section。比在 composer.json 中添加用于自动加载的新文件夹:

"autoload": {
    "psr-4": {
        "App\": "src/",
        "Lib\": "lib/"
    }
},

它说 lib 文件夹中的所有 class 都有自己的独立文件,并且在它们的命名空间中有 Lib 前缀,命名空间的其他部分类似于目录结构。

接下来您需要清除自动加载器的缓存。 运行 在控制台中:

composer dump-autoload

最后你可以使用你的 class:

use Lib\Importer;

$importer = new Importer;

您也可以将文件添加到 autowire