正确地在extbase中自动加载/注入命名空间类

时间:2016-03-22 11:45:01

标签: dependency-injection typo3 autoload extbase typo3-6.2.x

我正在将一些php类集成到使用extension_builder创建的TYPO3 6.2扩展中。 extbase版本也是6.2。

我想我遵循https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Autoloading/Index.html

的指示
  • 命名空间类(正确吗?)

  • 由于我认为我使用的是命名空间,因此我没有以Tx_MyExtension_Utility_FooBar

  • 的形式命名这些类
  • 按照https://wiki.typo3.org/Dependency_Injection

  • 的建议,使用@inject注释注册课程

以下是相关文件:

EXT:apievents /类别/效用/ SomeClass.php:

class SomeClass {
  // do something
}

EXT:apievents /类别/控制器/ ImportCommandController.php

<?php
namespace STUBR\Apievents\Controller;

// Copyright, Package, License ...

class ImportCommandController extends \TYPO3\CMS\Extbase\Mvc\Controller\CommandController {

    /**
    * @var \namespace STUBR\Apievents\Utility\SomeClass
    * @inject
    */
    protected $SomeClass;
    // do something
 }

当我运行它时(它是一个调度程序任务)给我一个格式错误的错误

  

执行任务&#34; Extbase CommandController任务(extbase)&#34;失败   带有以下消息:无法分析类:名称空间   可能没有加载STUBR \ Apievents \ Utility \ SomeClass或没有自动加载器?

因此要加载的类必须缺少某些东西。 我错过了什么或做错了什么?

1 个答案:

答案 0 :(得分:2)

将您的注射代码更改为

/**
 * @var \STUBR\Apievents\Utility\SomeClass
 * @inject
 */
 protected $someClass;

@var注释中,您只需指定完全限定的类名。而已。没什么。确保您在实用程序类中也设置了命名空间

namespace STUBR\Apievents\Utility;