找不到ViewHelper

时间:2015-03-28 09:34:23

标签: namespaces typo3 fluid extbase

我摆弄了8个多小时而没有得到解决。 我想要的只是在Fluid模板中调用ViewHelper。之前我做过,我从来没有遇到类似的问题。

我的ViewHelper文件位于

EXTDIR/VendorName/Classes/ViewHelpers/SomeViewHelper.php.

在我的流体模板中,我使用命名空间

{namespace k=VendorName\Extname\ViewHelpers}.

模板中的某处我用

调用ViewHelper
{k:some()}.

ViewHelper脚本" SomeViewHelper.php"包含以下代码:

class SomeViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
    public function initializeArguments() { }

    public function render() {
        return 7;
    }
}

正如您所看到的,整个过程非常简单,页面上的预期输出应为" 7"。但是在前端调用页面会产生以下错误消息:

Oops, an error occurred!

Could not analyse class:VendorName\Extname\ViewHelpers\SomeViewHelper maybe not loaded
or no autoloader?"

这里有什么可能错误的提示?

干杯 迈克尔

5 个答案:

答案 0 :(得分:6)

如果所有内容拼写正确,甚至在删除系统/配置缓存后,ViewHelper也无法启动(无法分析.. /可能未加载或没有自动加载器),请尝试在扩展管理器中重新安装扩展程序!

答案 1 :(得分:4)

viewHelper源文件的路径错误。

正确的路径应该是(没有vendorname):

EXTDIR/Classes/ViewHelpers/SomeViewHelper.php

您还需要确保为viewHelper使用正确的命名空间(如果您使用的是TYPO3 6+,请不要使用旧的Tx_类,而是使用命名空间)。

<?php
namespace VendorName\Extname\ViewHelpers;

class SomeViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
    public function initializeArguments() { }

    public function render() {
        return 7;
    }
}

答案 2 :(得分:1)

错误消息似乎表明找不到该类。

如果没有更多信息,我可能会怀疑某个地方有拼写错误(双关语无意)。

以下假设您使用的是TYPO3 7而不是作曲家模式:

  1. 首先,请检查您的viewhelper类是否已自动加载。这将有助于缩小问题范围。在htdocs目录的命令行中:grep SomeViewHelper typo3temp/autoload/autoload_classmap.php如果ViewHelper类包含在自动加载文件中,这应该会给你一个命中。

  2. 如果类没有自动加载,您可能需要手动进行自动加载:在htdocs目录的命令行中:php typo3/cli_dispatch.phpsh extbase extension:dumpclassloadinginformation 有关详细信息,请参阅:https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Autoloading/Index.html。有关更深入的信息,请参阅:http://insight.helhum.io/post/130876393595/how-to-configure-class-loading-for-extensions-in您可以在TYPO3 8的安装工具中找到自动加载的此功能,因此在这种情况下,您无需在命令行上运行该命令。

    < / LI>
  3. 如果这也不起作用,请检查以下内容:

    • 您是否在课程中正确使用了命名空间:<?php namespace VendorName\Extname\ViewHelpers\SomeViewHelper;
    • 路径(包括Camelcase类名称)是否正确:/Classes/ViewHelpers/SomeViewHelper.php
  4. 之后,清除系统缓存并重新启动自动加载,如上所述。
  5. 为了自动启动自动加载,您可能必须更新ext_emconf.php(如果您没有使用composer模式)或composer.json(如果您使用的是composer模式)。

答案 3 :(得分:0)

只是一些问题:

您是否将扩展的TypoScript模板添加到静态包含?

如果你使用的是类似unix的系统,你确定你的网络服务器有权阅读这些文件吗?

答案 4 :(得分:0)

如果TYPO3以编曲模式安装且您的扩展未通过composer安装(例如FluidTYPO3的ProviderExtension),则必须在主要composer.json文件中为您的扩展提供自动加载信息,如TYPO3-composer-documentation中所述:

  

在Composer Mode中,所有类加载信息必须由每个已安装的扩展或根包提供。如果作曲家没有安装TYPO3扩展程序,例如因为它们直接提交到根包或者一个新的包是kickstarted,所以需要提供类加载信息,否则不能为这些扩展/包加载类。

     

E.g。如果您的站点扩展名直接提交到您的根包,则必须在根包中包含类加载信息,如下所示:

让我疯狂地让我的ViewHelpers自动加载。在composer.json或扩展的ext_emconf.php中提供自动加载信息并重新安装它并不起作用。