未找到ViewHelper

问题描述 投票:0回答:5

我折腾了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”。但是在前端调用页面会产生以下错误消息:

糟糕,出现错误!

无法分析类:VendorName\Extname\ViewHelpers\SomeViewHelper 可能未加载或没有自动加载器?”

关于这里可能出现问题的任何提示吗?

干杯 迈克尔

namespaces typo3 fluid extbase
5个回答
6
投票

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


4
投票

您的viewHelper源文件路径错误。

正确的路径应该是(不带供应商名称):

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;
    }
}

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 中,因此在这种情况下您不需要在命令行上运行该命令。

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

    • 您在类中正确使用命名空间吗:
      <?php namespace VendorName\Extname\ViewHelpers\SomeViewHelper;
    • 路径(包括Camelcase类名)是否正确:
      /Classes/ViewHelpers/SomeViewHelper.php
  4. 之后,清除系统缓存并重新启动自动加载,如上所述。

为了自动启动自动加载,您可能需要更新 ext_emconf.php(如果您不使用 Composer 模式)或 Composer.json(如果您使用 Composer 模式)。


0
投票

只是一些问题:

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

如果您使用的是类 UNIX 系统,您确定您的网络服务器有权读取该文件吗?


0
投票

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

在 Composer 模式下,所有类加载信息必须由每个已安装的扩展或根包提供。如果作曲家未安装 TYPO3 扩展,例如因为它们直接提交到根包或启动新包,所以需要提供类加载信息,否则无法为这些扩展/包加载类。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.