Michael Perlbach
Michael Perlbach

Reputation: 107

ViewHelper is not found

I fiddled around with it for more than 8 hours without getting it resolved. All I want is to call a ViewHelper in a Fluid template. I did that before and I never had a similar problem.

My ViewHelper file is located in

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

In my Fluid Template I use the namespace

{namespace k=VendorName\Extname\ViewHelpers}.

Somewhere in the template I call the ViewHelper with

{k:some()}.

The ViewHelper script SomeViewHelper.php contains the following code:

class SomeViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper
{
    public function initializeArguments() { }
    
    public function render() {
        return 7;
    }
}

As you can see, the whole thing is quite simple and the expected output on the page should be "7". But calling a page in the frontend produces this error message:

Oops, an error occurred!

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

Any hints on what might be wrong here?

Cheers Michael

Upvotes: 1

Views: 5018

Answers (5)

Sybille Peters
Sybille Peters

Reputation: 3230

The error message seems to indicate that the class is not found.

Without more info, I would probably suspect a typo somewhere (pun not intended).

The following assumes you are using TYPO3 7 and not composer mode:

  1. First, please check if your viewhelper class is autoloaded. This will help to narrow down the problem. On the command line in the htdocs directory: grep SomeViewHelper typo3temp/autoload/autoload_classmap.php This should give you a hit, if the ViewHelper class is included in the autoload file.

  2. If the classes are not autoloaded, you might manually want to do the autoloading: On the command line in the htdocs directory: php typo3/cli_dispatch.phpsh extbase extension:dumpclassloadinginformation For more information see: https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Autoloading/Index.html. For more in depth info see this: http://insight.helhum.io/post/130876393595/how-to-configure-class-loading-for-extensions-in You can find this functionality of autoloading in the install tool in TYPO3 8, so in that case you would not need to run the command on the command line.

  3. If this does not work either, check the following:

    • Are you using namespace correctly in the class: <?php namespace VendorName\Extname\ViewHelpers\SomeViewHelper;
    • Is the path (including Camelcase class name) correct: /Classes/ViewHelpers/SomeViewHelper.php
  4. After that, clear the system cache and reinitiate the autoloading as described above.

In order for the autoloading to be initiated automatically, you might have to update your ext_emconf.php (if you are not using composer mode) or composer.json (if you are using composer mode).

Upvotes: 1

spackmat
spackmat

Reputation: 995

If TYPO3 is installed in composer mode and your extension is not installed via composer (e.g. a ProviderExtension of FluidTYPO3), you must provide autoload information for your extension in the main composer.json file, as described within TYPO3-composer-documentation:

In Composer Mode all class loading information must be provided by each of the installed extensions or the root package. If TYPO3 extensions are not installed by composer, e.g. because they are directly committed to the root package or a new package is kickstarted, class loading information needs to be provided, otherwise no classes can be loaded for these extensions/ packages.

E.g. if you have a site extension directly committed to your root package, you must include the class loading information in the root package like that:

Drove me crazy to get my ViewHelpers autoloaded. Providing the autoload-information within a composer.json or the ext_emconf.php of the extension and reinstalling it didn't do the trick.

Upvotes: 0

patrickzzz
patrickzzz

Reputation: 168

If everything is spelled correct, and even after deleting System/Configuration Cache the ViewHelper doesn't come up (Could not analyse.. / maybe not loaded or no autoloader), try to reinstall the extension in extension manager!

Upvotes: 6

Jay B&#246;ttcher
Jay B&#246;ttcher

Reputation: 534

Just some questions:

Did you add the TypoScript Template of the Extension to the Static Includes?

If you're using a unix-alike system, are you sure that your webserver has the permission to read that files?

Upvotes: 0

derhansen
derhansen

Reputation: 6133

Your path to the viewHelper source file is wrong.

The correct path should be (without vendorname):

EXTDIR/Classes/ViewHelpers/SomeViewHelper.php

You also need to make sure, you use the correct namespace for your viewHelper (if you're on TYPO3 6+, don't use the old Tx_ classes but namespaces).

<?php
namespace VendorName\Extname\ViewHelpers;

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

    public function render() {
        return 7;
    }
}

Upvotes: 4

Related Questions