Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TYPO3 tutorial extension, controller does not exist

Tags:

typo3

extbase

I'm trying to get started with TYPO3 extensions and was following this tutorial to get to see the basics.

In the backend everything works fine, but on the front end I get an error:

Oops, an error occurred! Code: 20170209104827c3b58d58 - {"exception":"exception 'ReflectionException' with message 'Class Tx_Inventory_Controller_InventoryController does not exist'

My files are exactly the same as in the tutorial. I have no idea what is causing this. I assume I made some dumb mistake with namespaces, but they seem to be all correct.

The controller class can be found below and is located in typo3conf/ext/inventory/Classes/Controller/

<?php
   namespace \MyVendor\Inventory\Controller;
   use \TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
   use \TYPO3\CMS\Core\Utility\GeneralUtility;
   use \MyVendor\Inventory\Domain\Model\Repository\ProductRepository;

   class InventoryController extends ActionController {
        public function listAction() {
                $productRepository = GeneralUtility::makeInstance(ProductRepository::class)
                $products = $productRepository->findAll();
                $this->view->assign('products', $products);
        }
   }
?>
like image 342
Woeler Avatar asked Feb 09 '17 09:02

Woeler


2 Answers

When developing a new extension in a composer installed TYPO3 V9 (here: 9.4) the autoload part has to be added to the central root composer.json. Found it here (German). Following the steps in the OPs mentioned tutorial leads to a core exception:

Core: Exception handler (WEB): Uncaught TYPO3 Exception: #1278450972:
  Class MyVendor\StoreInventory\Controller\StoreInventoryController does not exist.
  Reflection failed.

As long as the extension is not installed via composer, e.g because it's newly developed, composer does not find the appropriate composer.json file in the extensions directory. Hence TYPO3 does not find any classes in the new extensions Classes directory. To resolve the issue the autoload configuration has to be added to the root composer.json. Just put the following lines into composer.json within the installations base directory:

{
    "repositories": [
        { "type": "composer", "url": "https://composer.typo3.org/" }
    ],
    ...
    "autoload": {
        "psr-4": {
            "MyVendor\\StoreInventory\\": "public/typo3conf/ext/store_inventory/Classes/"
        }
    }
}

Then regenerate the autoload configuration:

composer dumpautoload

You possibly have to clear the cache as well in the backend.

like image 151
Holger Böhnke Avatar answered Oct 05 '22 21:10

Holger Böhnke


It looks like your class is not autoloaded. If you don't use composer to make your autoload, take a look in your typo3conf/autoload/autoload_classmap.php file.

You should find an entry corresponding to your file. You will see if you have a path error.

like image 27
Pierre Fru Avatar answered Oct 05 '22 20:10

Pierre Fru