symfony - Symfony 4 中的私有(private)、自定义 bundle 在哪里?

标签 symfony symfony4

我在我的 Symfony 项目中使用了许多私有(private)的自定义包。在 Symfony 3 下,它们位于 src 的子目录中:

src/
    DSL/
      DSLLibraryBundle/
      DSLTelnetBundle/
      ...
    SiteBundle/      # (or AppBundle)

在 Symfony 4 下,特定于应用程序的包消失了,我不清楚我的自定义包应该放在哪里。

捆绑包的文档 (https://symfony.com/doc/current/bundles/best_practices.html#bundles-naming-conventions) 没有提供放置自定义捆绑包的具体建议。

我尝试将我的 DSL 目录直接放在项目目录和 src/下。无论哪种方式,我都会遇到未定义的类错误。

我目前有:
src/
    DSL/
        LibraryBundle/
            DSLLibraryBundle.php

捆绑文件:
// src/DSL/DSLLibrary/DSLLibraryBundle.php:

namespace DSL\LibraryBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class DSLLibraryBundle extends Bundle
{

}

bundles.php 中的条目:
DSL\LibraryBundle\DSLLibraryBundle::class => ['all' => true],

运行控制台命令时的当前错误:

PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\ClassNotFoundException: Attempted to load class "DSLLibraryBundle" from namespace "DSL\LibraryBundle".



几点注意事项:
- 我的自定义包不是通过 Composer 安装的
- 一旦我得到这个工作,实际的 DSL/目录将是一个符号链接(symbolic link)

最佳答案

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/"
    }
  }
}

然后在项目的 composer.json 文件中定义一个自定义仓库:
"repositories":[
  {
    "type": "path",
    "url":  "/full/path/to/DslBaseBundle"
  },
 ], ...

然后做一个 Composer 需要 dsl/base-bundle
Composer 将在 vendor/中创建一个符号链接(symbolic link)到捆绑包,然后一切都按预期工作。

我的个人库是一个常规的 Symfony 项目,它有一个包含我的包的 lib 子目录,每个包都在 lib/下的自己的子目录中。

Symfony 应用程序为我提供了一个方便的测试平台。请注意,自定义包必须像任何其他 Symfony 项目一样包含在其中。

@Stnaire,希望对您有所帮助。

关于symfony - Symfony 4 中的私有(private)、自定义 bundle 在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48433984/

相关文章:

交响乐2 : 302 http status and exception

php - symfony 4 : Request. getScheme() 返回带有 X_FORWARDED_PROTO https 的 http

php - Symfony 4以表单类型获取当前用户?

command - 如何使 symfony 4 命令仅在开发环境中注册并在产品中禁用?

forms - 在 Symfony 2 表单中自定义数据原型(prototype)属性

git - 如何在没有完整项目的情况下测试共享的 Symfony 2 Bundle

php - Doctrine2 - 类型时间戳 - 默认值

jquery - 如何将数据表与 Symfony 4 和 Webpack Encore 一起使用?

symfony - 无法在 symfony 4.3 中解决覆盖 FOS Controller 的参数 $token

ios - Mac 和 IOS 14 上的 Safari 无法播放 HTML 5 MP4 视频