php Symfony可重复使用捆绑包

a64a0gku  于 2023-01-19  发布在  PHP
关注(0)|答案(1)|浏览(132)

我使用相应的composer命令创建了默认的symfony 6.2应用程序。
然后我创建了一个“bundle-dev”目录来创建一个可重用的bundle(bundle-dev/test/plugin-bundle)。
我的文件结构:

plugin-bundle
├── config
├──── routes
├────── attributes.yaml
├──── services.yaml
├── src
├──── Controller
├────── DefaultController.php
├──── PluginBundle.php
├── composer.json (name: "test/plugin")

为了进行测试,我创建了一个defaultController,其中只有一个defaultAction。路由是非常基本的-如这里所述(请参见/blog):https://symfony.com/doc/current/routing.html#creating-routes-as-attributes
我还向我的composer.json添加了一个repository条目,以便在symfony“基础”安装的vendor文件夹中创建一个条目。
到目前为止一切正常-我在config\bundles.php中“激活”了bundle,是的,什么都没有发生。我创建的测试路由没有加载...我通过bin/console debug:router检查了路由器,路由没有列出...
我尝试通过以下方式解决问题:

  • 清除该高速缓存
  • 删除vendor文件夹(并重新安装)
  • 重新创建自动加载文件composer dump-autoload

看起来这个bundle并没有真正加载......但是调试器说它加载了--至少symfony在(调试器的)配置选项卡中列出了这个bundle
你有什么办法解决这个问题吗?

q8l4jmvw

q8l4jmvw1#

我很确定你还没有告诉你的应用程序加载你的bundle的路由。有一种自然的倾向认为bundle本身可以自动提供路由,但是不,你总是需要在应用程序级别做一些事情。我记得在什么地方阅读到过,这是因为安全性。你不希望bundle在应用程序不知道的情况下添加路由,但是我从来没有真正遵循过这个推理。
你发布的关于attributes.yaml的例子也有点误导。它更多的是一个应用程序的过渡例子。文档中显示的配置实际上存储在应用程序的config/routes.yaml文件中。只是又一个混淆的来源。
在任何情况下,您只需要将特定于bundle的文件添加到应用程序的config/routes目录:

# my_project/config/routes/plugin.yaml
controllers:
    resource:
        path: '@PluginBundle/src/Controller/'
        namespace: Test\PluginBundle\Controller
    type: attribute
    prefix: /plugin # optional but not uncommon

你应该可以走了。
下面是defining bundle routes的一个工作示例。有相当多的部分必须正确连接。
有些不相关,但你可能应该遵循bundle的命名约定。供应商成为bundle名称的一部分。比如名称空间为Corex\PluginBundleCorexPluginBundle。这样做可能会保存你的一些重构工作。

相关问题