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。
在我的默认 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。