TYPO3 Composer 模式 PSR-4 未加载 类

TYPO3 Composer mode PSR-4 not loading classes

我在 ext/my_ext 下有一个分机。我的 viewhelper 位于 /ext/my_agarar_template/Classes/ViewHelpers/TestViewHelper.php.

当我尝试调用我的 viewhelper 时,我的模板显示我的 class 不存在。

我的模板是这样的:

{namespace p=ext\my_ext\ViewHelpers}
h1>ViewHelper-Test</h1>
<p><p:HelloWorld /></p>

这是我的错误信息:

Oops, an error occurred! Fluid parse error in template Standard_action_my_ext_slide_db2750e6ca45c0832d4fc312cf0618afbe9329d0, line 11 at character 5. Error: The ViewHelper "" could not be resolved. Based on your spelling, the system would load the class "ext\my_ext\ViewHelpers\TestViewHelper", however this class does not exist. (error code 1407060572). Template source chunk: More information regarding this error might be available online.

我通过 Composer 加载它,我的 PSR-4 看起来像这样:

"autoload": {
    "psr-4": {
      "myext\MyExt\": "web/typo3conf/ext/my_ext/Classes"
    }
}

我不知道为什么我的 classes 没有加载。

希望有人能帮助我,

提前致谢。

如前所述,您的自动加载部分在 composer.json 中看起来很奇怪。但是,您的自动加载似乎可以正常工作,否则我想您可能不会走到这一步。

我会检查以下内容:

  • 检查composer.json 自动加载部分
  • 检查文件和 class 名称的拼写:ViewHelper class 应该在 Classes/ViewHelpers 中并且应该是相同的文件名 + class 名称 HelloWorldViewHelper.php和 class HelloWorldViewHelper(从您的示例代码来看这看起来没问题)
  • ViewHelper 中的名称空间是否正确class?
  • 只是为了确定:您的模板代码是否有效 XML? (h1 中少了一个 '<')
  • 为什么class 名为TestViewHelper 但名称是HelloWorld?应该是 HelloWorldViewHelper 和 <p:helloWorld>。注意大小写。
  • 清除整个缓存(再次)并转储自动加载(再次)composer dump-autoload
  • 您可以检查文件 vendor/composer/autoload_psr4.php 以查看名称空间到文件名的映射是否正确。

一般来说,我会远离带有下划线 ('_') 的扩展键。这也是recommended in the documentation。问题是:拼写、使用正确的大小写、是否使用供应商名称等都具有足够的挑战性。在扩展键中使用下划线会使这变得更加困难。如果您知道规则或知道在哪里看,这不是问题,但会给初学者带来不必要的困难。

提示:请查看 bootstrap_package。它的名称中带有下划线并包含 ViewHelpers。