【问题标题】:Creating a Bundle outside src/在 src/ 之外创建一个 Bundle
【发布时间】:2017-02-21 21:41:47
【问题描述】:

我用 symfony 2.3 创建了一个包,但在这种情况下(因为我的老师问我)在src/ 文件夹之外,所以我有../symfony/fuentes/NameBundle 而不是../symfony/src/NameBundle。新行出现在 AppKernel 中,我的新包出现在 routing.yml 上,但是当我尝试启动服务器时

Bundle generation

Generating the bundle code: OK
Checking that the bundle is autoloaded: FAILED
Confirm automatic update of your Kernel [yes]?
Enabling the bundle inside the Kernel: OK
Confirm automatic update of the Routing [yes]?
Importing the bundle routing resource: OK

The command was not able to configure everything automatically.
You must do the following changes manually.

- Edit the composer.json file and register the bundle
  namespace in the "autoload" section:

我已经编辑自动加载并尝试了很多东西(在这里寻找),但总是出现相同的错误。

C:\Users\Akenateb\Documents\UOC\AULAMENTOR\Symfony>php app/console server:run 127.0.0.1:8080
PHP Fatal error:  Class 'AulaMentor\ExdosBundle\AulaMentorExdosBundle' not found in C:\Users\Akenateb\Documents\UOC\AULAMENTOR\Symfony\app\AppKernel.php on line 20

有人可以帮助我吗?我真的很坚持。 提前致谢。

【问题讨论】:

  • 他为什么要问这样的问题?
  • 您似乎也在运行 app/console generate:bundle 命令?
  • i.am.michiel - 因为我正在做运动
  • Cerad - 是的,我使用 generate:bundle 命令没有问题
  • @i.am.michiel 想象一下,您自己制作了一个孤立的本地捆绑包,但您至少不希望将其放入 git 存储库中。

标签: symfony bundle src


【解决方案1】:

首先我要感谢那些回答的人。如果我们想在 'src' 文件夹之外创建一个包,例如在 'fuentes' > '..Symfony/fuentes' 中,我们必须这样做。

如果您使用 'generate:bundle' 创建,我建议您在生成器询问您是否要创建完整结构时接受,如果您使用生成器创建包,请转到第 3 步。

1- 确保你已经在 AppKernel 中注册了 bundle 并且它存在这样一行:

新建 YourProject\NameprojectBundle\YourProjectNameprojectBundle(),

2- 确保您已将路由添加到您的 app/config/routing 并且“routing.yml”为您提供了新的捆绑路由,如下所示(您可以为您的 url 添加一个前缀,在这种情况下为 fuentes):

您的项目名称:
资源:“@YourProjectNameprojectBundle/Resources/config/routing.yml”
前缀:/fuentes

3- 我们编辑 'app/autoload.php' 并添加这一行:

$loader->add('YourProject',realpath(__DIR__.'/../fuentes'));

最后我们可以使用命令行更新资产: php 应用程序/控制台资产:安装网络

希望对某人有所帮助。
最好的问候。

【讨论】:

  • 对于最近的 Symfony 版本,使用 'generate:bundle' 命令时必须添加 --shared 参数。
【解决方案2】:

完全按照评论中说的做:

Edit the composer.json file and register the bundle namespace in the "autoload" section

src 文件夹是使用 PSR 约定自动加载的。如果您在 src 文件夹之外设置类,它们也必须被声明。

【讨论】:

  • i.am.michiel - 我已经尝试过(当然)编辑 symfony/composer.json 它不起作用 4me,事实上我已经尝试了很多东西,但它确实不解决这个问题。你说“它们也必须被声明。”好的,但是如何?
【解决方案3】:

在您的composer.json 文件中,您可以在autoload 部分添加另一个元素。这是一个我认为适用于您的用例的示例:

"autoload": {
    "psr-0": {
      "NameBundle\\": "fuentes/",
      "": "src/"
    }
},

【讨论】:

    【解决方案4】:

    当我们不想弄乱 composer.json 文件时,这里是简单地添加在 Symfony 项目之外的另一个包的方法。

    前两点与迈克尔 J. 的答案相同。现在到第三点:

    假设我们需要添加一个 OurCompany/SomeBundle 驻留在另一个项目中,其相对路径为 ../../OtherProject/src/OurCompany/SomeBundleCurrentProject/app 目录。

    所以我们以这种方式将此捆绑包添加到 CurrentProject 应用程序:

    $loader->add('OurCompany\\SomeBundle', realpath(__DIR__.'/../../OtherProject/src'));
    

    请注意应该如何使用斜杠和反斜杠(最后剩下的 / 或 \ 无关紧要,它足够聪明,可以弄清楚)。

    对于要加载的整个命名空间(CurrentProject 中可用的其他项目中的所有捆绑命名空间):

    $loader->add('OurCompany', realpath(__DIR__.'/../../OtherProject/src'));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 2017-10-05
      • 2011-09-30
      相关资源
      最近更新 更多