4

我目前正在构建一个新包,当我尝试将该包中的视图包含到主应用程序的视图中(直接在 /templates 下)时,出现错误:

在第 27 行的 template.html.twig 中没有命名空间“ContentEditable”的注册路径。

这是 template.html.twig 的相关部分(使用 @ 和 / 语法):

{% include '@ContentEditable/content-edition.html.twig' %}

这是我的文件结构的屏幕截图和“bin/console debug:twig”的返回

编辑1

我的 /config/bundles.php 包含以下行:

App\Paul\ContentEditableBundle\ContentEditableBundle::class => ['all' => true]

/编辑1

你知道我在做什么错吗?是否有一些缓存要刷新?为什么“debug:twig”甚至不显示我的包?

如果您需要有关代码的更多信息,请告诉我!

提前感谢!

编辑2

由@Cerad 解决

我只是更改了名称空间和层次结构。

制作了一个与 src 相同级别的“Paul”repo,并制作了根命名空间“Paul”。

对于对这种重构有疑问的​​人,不要忘记在 composer.json 中添加类似的内容:

"autoload": {
    "psr-4": {
        "App\\": "src/",
        "Paul\\": "Paul/"
    }
},

并将这样的内容添加到您的“services.yaml”中:

Paul\:
        resource: "../Paul/*"
        exclude: "../Paul/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}"

/EDIT2

4

1 回答 1

8

将包的模板目录重命名为视图(而不是模板):

src\Paul\ContentEditableBundle\Resources\views

我知道自动 twig 命名空间生成器查找视图目录而不是模板有点反直觉。我知道曾经有人推动更改捆绑目录布局以匹配一些新的应用程序布局,但我想这仍然是一项正在进行的工作。

作为替代方案,您可以注册自己的自定义 twig 命名空间

# config/packages/twig.yaml
twig:
    # ...
    paths:
        '%kernel.project_dir%/src/Paul/ContentEditableBundle/templates': ContentEditable        

这可能会在未来证明您的目录布局。

虽然跑题了,但我会警告不要尝试将你的包的源代码与你的应用程序源代码混合,并且绝对避免使用 App 命名空间。很多意想不到的事情可能会发生,尤其是使用自动连线。也许是这样的:

src/
srcx/Paul/ContentEditableBundle/ContentEditableBundle.php

于 2019-10-17T13:13:44.163 回答