我在 Symfony 项目中使用了许多私有的自定义包。在 Symfony 3 下,它们位于 src 的子目录中:
src/
DSL/
DSLLibraryBundle/
DSLTelnetBundle/
...
SiteBundle/ # (or AppBundle)
Run Code Online (Sandbox Code Playgroud)
在 Symfony 4 下,特定于应用程序的包消失了,我不清楚我的自定义包应该放在什么地方。
关于捆绑包的文档(https://symfony.com/doc/current/bundles/best_practices.html#bundles-naming-conventions)没有提供放置自定义捆绑包的具体建议。
我曾尝试将我的 DSL 目录直接放在项目目录和 src/ 下。无论哪种方式,我最终都会遇到未定义的类错误。
我目前有:
src/
DSL/
LibraryBundle/
DSLLibraryBundle.php
Run Code Online (Sandbox Code Playgroud)
捆绑文件:
// src/DSL/DSLLibrary/DSLLibraryBundle.php:
namespace DSL\LibraryBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class DSLLibraryBundle extends Bundle
{
}
Run Code Online (Sandbox Code Playgroud)
bundles.php 中的条目:
DSL\LibraryBundle\DSLLibraryBundle::class => ['all' => true],
Run Code Online (Sandbox Code Playgroud)
运行控制台命令时的当前错误:
PHP 致命错误:未捕获的 Symfony\Component\Debug\Exception\ClassNotFoundException:尝试从命名空间“DSL\LibraryBundle”加载类“DSLLibraryBundle”。
几个注意事项:
- 我的自定义包不是通过 Composer 安装的
- 一旦我开始工作,实际的 DSL/ 目录将是一个符号链接
2019 年 4 月 12 日更新:最终,我采取了与最初尝试完全不同的方法。
简而言之,我现在使用 Composer 来包含我的自定义包。
我的自定义包位于它们自己的目录树中。
每个捆绑包必须有一个定义该捆绑包的有效的composer.json 文件。例如:
{
"name": "dsl/base-bundle",
"description": "Base bundle required by all other DSL bundles",
"type": "symfony-bundle",
"version": "2.1.0",
"license": "proprietary",
"authors": [{"name": "David M. Patterson", "email": "dpatterson@example.com"}],
"minimum-stability": "stable",
"require": {
},
"require-dev": {
},
"autoload": {
"psr-4": {
"Dsl\\BaseBundle\\": "src/"
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在项目的composer.json文件中定义自定义存储库:
"repositories":[
{
"type": "path",
"url": "/full/path/to/DslBaseBundle"
},
], ...
Run Code Online (Sandbox Code Playgroud)
然后做一个composer require dsl/base-bundle
Composer将在vendor/中创建一个到bundle的符号链接,从那里开始一切都按预期工作。
我的个人库是一个常规的 Symfony 项目,有一个包含我的包的 lib 子目录,每个包都位于 lib/ 下面的自己的子目录中。
Symfony 应用程序为我提供了一个方便的测试平台。请注意,与任何其他 Symfony 项目一样,自定义捆绑包必须包含在其中。
@Stnaire,希望有帮助。
| 归档时间: |
|
| 查看次数: |
1254 次 |
| 最近记录: |