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。
我在 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。