当前位置: 首页 > 知识库问答 >
问题:

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

宣望
2023-03-14

我正在将一些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上的建议,用@注入注释注入类

    以下是有关文件:

    EXT:一个事件/类/实用程序/一些lass.php:

    class SomeClass {
      // do something
    }
    

    EXT:apievents/Classes/Controller/importCommand控制器。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
     }
    

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

    执行任务“Extbase CommandController任务(Extbase)”失败,并显示以下消息:无法分析类:命名空间STUBR\Apievents\Utility\SomeClass可能未加载或没有自动加载程序?

    所以要加载的类必须缺少一些东西。我错过了什么或者做错了什么?

  • 共有1个答案

    邹嘉荣
    2023-03-14

    将注入代码更改为

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

    @var注释中,您只需指定完全限定的类名。没有更多了。一点也不少。确保在实用程序类中也设置了命名空间

    namespace STUBR\Apievents\Utility;
    
     类似资料:
    • 本文向大家介绍PHP命名空间和自动加载类,包括了PHP命名空间和自动加载类的使用技巧和注意事项,需要的朋友参考一下 PHP的命名空间(namespace)是php5.3之后才有的。这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的。 为什么php中要使用namespace? 假设如果不使用namespace,那么每个类在一个项目中的名字就必须是固定的。因为php在

    • 问题内容: 当我尝试使用自动加载和命名空间时出现此错误: 致命错误:* 在 第10行的 /usr/local/www/apache22/data/public/php5.3/test.php中 找不到类’Class1’ * 谁能告诉我我在做什么错? 这是我的代码: Class1.php: test.php: 问题答案: Class1不在全局范围内。 请参见下面的工作示例: 编辑(2009-12-1

    • 我想在RStudio中安装程序包,但得到了一条错误消息。 loadNamespace中的错误(j<-i[[1L]],c(lib.loc,.libpaths()),versionCheck=vi[[j]]):已经加载了名称空间'rcpp'0.12.3,但需要>=0.12.7。 我检查了Rcpp的版本,它是0.12.13版本,但安装包时加载的版本是0.12.3。在安装软件包时,有没有办法从库路径加载0

    • 我正在开发一个使用Monolog的项目,需要Psr/log。当我通过自动加载使用Monolog时,它会抱怨缺少Psr\Log\LoggerInterface。所以我查看作曲家生成的autoload_namespaces.php,我找不到注册的Psr。 这是我的供应商/autoload_namespaces.php的内容 作曲家是否应该为composer.json文件中定义了{autoload}的所

    • thinkphp5 新手, 想写个脚本,类型下面这样的: 执行的时候,提示 Fatal error: Class 'app\stock\service\Toshare' not found 然后 application/stock/service/Toshare.php 这个文件是在的。 且 命名空间 app\stock\service 确认也正常。 要点: application目录下原来有ad

    • 我使用JAXB根据定义的模式封送/解封xml文档。我注意到的是,JAXB在编组的xml中生成了不正确的名称空间。 以下是详细信息- soap.xsd-- 方案1.xsd-- schema2.xsd-- 我为jaxbMarshaller(在我的Spring配置中)定义了一个命名空间Prefix MapperImpl,它将URI映射到我定义的前缀名称。 编组的响应xml如下所示。请注意,JAXB在命名