php - symfony4.3 添加带有类的自定义文件夹
问题描述
在我的默认 symfony4 结构中,我想添加lib文件夹,其中有其他类。所以是这样的:
-bin
-config
-lib
- Importer.php
...(other files with classes)
-public
-src
- Controller
- TestController.php
- Entity
- Form
...
...
但我不知道以后如何使用我的文件(即:Importer.php)。
假设 Importer.php 内部有一个类 Importer()。如果我尝试从 TestController.php 使用它,我会得到:
试图从命名空间“lib”加载类“Importer”。您是否忘记了另一个名称空间的“使用”语句?
TestController.php 有
use Importer;
在顶部指定(由 PhpStorm 自动检测)。我还尝试在 Importer.php 文件中添加命名空间,例如:
namespace lib;
然后在TestController中:
use lib\Importer;
但它产生相同的结果。
最后,在阅读了有关服务的信息后,我尝试将文件添加到 config/services.yaml
lib\:
resource: '../lib/Importer.php'
这给出了相同的结果......
做什么,怎么生活?
解决方案
首先阅读有关php 命名空间的信息。
接下来阅读有关psr-4 标准的内容。
为您的文件夹选择一个前缀,比如说Lib
. 确保文件lib
夹中的所有文件都具有正确的命名空间。例如,Importer
类必须存储在lib\Importer.php
并且必须具有namespace Lib;
,Items\Item
类必须存储在lib\Items\Item.php
并且必须具有namespace Lib\Items\Item;
等等。
您的文件已准备就绪。只需要通知 Symfony 就可以了。
Symfony 使用 composer 的自动加载器,所以检查composer 的自动加载部分。比添加用于自动加载的新文件夹composer.json
:
"autoload": {
"psr-4": {
"App\\": "src/",
"Lib\\": "lib/"
}
},
它表示lib
文件夹中的所有类在其命名空间中都有自己独立的文件和Lib
前缀,命名空间的其他部分类似于目录结构。
接下来您需要清除自动加载器的缓存。在控制台中运行:
composer dump-autoload
最后你可以使用你的类:
use Lib\Importer;
$importer = new Importer;
您也可以将文件添加到autowire。
推荐阅读
- azure-blob-storage - Azure 流分析未加载第二个参考数据文件
- react-native - react native 我想指定一张图片作为默认
- html - 更高分辨率的媒体查询看起来不太好
- python - 无法手动重现 CCA 加载
- android - 仅当视图在 Android Compose 中可见时才执行 LaunchedEffect
- javascript - 获取自定义时区中自定义日期的毫秒数
- confluence - 寻找性能更好的 Confluence 离线工具
- html - 使用 Node 和 Hapi 将 HTML 字符串输出到新的浏览器窗口
- swiftui - 为 SwiftUI 中的预览提供 Environment managedObjectContext
- android - 如何从 android 设备或谷歌地图 api 获取卫星数量