cal*_*bob 1 php symfony symfony4
在我的默认symfony4结构中,我想添加lib文件夹,其中有其他类。所以像这样:
-bin
-config
-lib
- Importer.php
...(other files with classes)
-public
-src
- Controller
- TestController.php
- Entity
- Form
...
...
Run Code Online (Sandbox Code Playgroud)
但是我无法弄清楚以后如何使用我的文件(即:Importer.php)。
假设Importer.php内部只有一个类Importer()。如果我尝试从TestController.php使用它,则会得到:
尝试从名称空间“ lib”加载类“ Importer”。您是否忘记了另一个名称空间的“使用”语句?
TestController.php有
use Importer;
Run Code Online (Sandbox Code Playgroud)
在顶部指定(由PhpStorm自动检测)。我也尝试在Importer.php文件中添加名称空间,例如:
namespace lib;
Run Code Online (Sandbox Code Playgroud)
然后在TestController中:
use lib\Importer;
Run Code Online (Sandbox Code Playgroud)
但是它产生相同的结果。
最后,在阅读了有关服务的内容之后,我尝试将文件添加到config / services.yaml
lib\:
resource: '../lib/Importer.php'
Run Code Online (Sandbox Code Playgroud)
给出相同的结果...
该怎么办,如何生活?
小智 5
首先阅读有关php名称空间的信息。
接下来阅读有关psr-4标准的信息。
选择文件夹的前缀,例如Lib。确保文件lib夹中的所有文件都具有正确的名称空间。例如,Importer类必须存储在中lib\Importer.php并且必须具有namespace Lib;,Items\Item类必须存储在中lib\Items\Item.php并且必须具有namespace Lib\Items\Item;等等。
您的文件已准备就绪。只需要将它们告知Symfony。
Symfony使用作曲家的自动加载器,因此请检查作曲家的自动加载器部分。比添加新文件夹来自动加载composer.json:
"autoload": {
"psr-4": {
"App\\": "src/",
"Lib\\": "lib/"
}
},
Run Code Online (Sandbox Code Playgroud)
它说lib文件夹中的所有类都有其自己单独的文件,并Lib在其命名空间中具有前缀,而命名空间的其他部分类似于目录结构。
接下来,您需要清除自动加载器的缓存。在控制台中运行:
composer composer dump-autoload
Run Code Online (Sandbox Code Playgroud)
最后,您可以使用您的课程:
use Lib\Importer;
$importer = new Importer;
Run Code Online (Sandbox Code Playgroud)
您也可以将文件添加到autowire中。
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |