命名空间没有注册路径 [Symfony 4.3]

Posted

技术标签:

【中文标题】命名空间没有注册路径 [Symfony 4.3]【英文标题】:There are no registered paths for namespace [Symfony 4.3] 【发布时间】:2019-10-17 11:20:50 【问题描述】:

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

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

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

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

这里是a screenshot of my files structure & the return of "bin/console debug:twig"

编辑1

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

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

/EDIT1

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

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

提前致谢!

EDIT2

由@Cerad 解决

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

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

对于这种重构有问题的人,不要忘记在你的 composer.json 中添加这样的内容:

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

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

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

/EDIT2

【问题讨论】:

你是否将你的 bundle 添加到 config/bundles.php 中? Wups,缺少关键信息,是的,我做到了:“App\Paul\ContentEditableBundle\ContentEditableBundle::class=> ['all' => true]” 除了这个 Twig 命名空间之外,这个包似乎一切正常...... 【参考方案1】:

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

src\Paul\ContentEditableBundle\Resources\views

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

您也可以register your own custom twig namespace:

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

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

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

src/
srcx/Paul/ContentEditableBundle/ContentEditableBundle.php

【讨论】:

哇,谢谢!那成功了。是的,这有点不一致,似乎是祖先版本的剩余部分:)感谢命名空间的建议,我将尝试使用 Paul 作为所有自制的根命名空间;)(我关注了这个页面 symfony.com/doc/current/bundles.html 过程,也许它不是最新的?) 我只是在查看包命名约定。您显示的链接确实建议 App\Paul\ContentEditableBundle,而 "best practices" 暗示 Paul\ContentEditableBundle。因此,当前文档中存在不一致之处。我从未见过使用 App 命名空间的实际共享包。当然,制作捆绑包的唯一原因是与多个应用共享。 是的,我认为您是对的,而官方文档是错误的!干杯队友!

以上是关于命名空间没有注册路径 [Symfony 4.3]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Symfony 1.4 的自动加载器加载命名空间类?

Symfony2名称空间的文档

Symfony2 和 Google Ads API PHP 客户端库

Symfony 自定义配置 - 命名空间问题

PHPUnit、接口和命名空间 (Symfony2)

symfony2:试图从命名空间加载类“Memcache”