在 src/ 之外创建一个 Bundle

Creating a Bundle outside src/

我用 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

有人可以帮助我吗?我真的被它困住了。 提前致谢。

完全按照评论说的去做:

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

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

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

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

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

中,这是我们必须做的

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

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

新 YourProject\NameprojectBundle\YourProjectNameprojectBundle(),

2- 确保您已向 app/config/routing 添加路由并且 'routing.yml' 已添加新的捆绑路由,就像这样(您可以向 url 添加前缀,在这个案例 fuentes):

your_project_name:
资源:“@YourProjectNameprojectBundle/Resources/config/routing.yml”
前缀:/fuentes

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

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

最后我们可以使用命令行更新资产: php app/console assets:install 网页

希望对大家有所帮助。
最好的问候。

如果我们不想弄乱 composer.json 文件,下面是如何在您的 Symfony 项目 之外简单地添加 另一个包。

前两点与 Michael J. 的回答相同。现在到第3点:

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

所以我们以这种方式将这个包添加到 CurrentProject 应用程序中:

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

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

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

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