找不到 TYPO3 控制器 Class。我在哪里link呢?
TYPO3 Controller Class could not be found. Where do I link it?
我正在为 TYPO3 v9.5.9 开发一个扩展,并且已经编写了我所有的代码,但是当我尝试使用该扩展时,我收到一条错误消息说
Class Secsign\Secsign\Controller\SecsignController does not exist.
Reflection failed.
<?php
namespace Secsign\Secsign\Controller;
$apiPath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('secsign') . 'Resources/Public/SecSignIDApi/phpApi/SecSignIDApi.php';
require_once($apiPath);
use AuthSession;
use SecSignIDApi;
use \TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* SecsignController
*/
class SecsignController extends ActionController
{...}
控制器确实存在,但由于某种原因无法找到。这个错误发生在哪里?我如何解决它?欢迎任何提示。
composer.json 文件如下所示:
{
"name": "secsign/secsign",
"type": "typo3-cms-extension",
"description": "This extension allows users to authenticate using their smart phone running the SecSign App.",
"authors": [
{
"name": "SecSign Technologies Inc.",
"role": "Developer"
}
],
"require": {
"typo3/cms-core": "^9.5"
},
"autoload": {
"psr-4": {
"Secsign\Secsign\": "Classes",
"TYPO3\CMS\Secsign\": "public/typo3conf/ext/secsign/Classes/"
}
},
"autoload-dev": {
"psr-4": {
"Secsign\Secsign\Tests\": "Tests"
}
},
"replace": {
"secsign/secsign": "self.version",
"typo3-ter/secsign": "self.version"
}
}
有两种方法可以解决这个问题:
1。通过项目 composer.json
加载你的扩展
为你的自定义扩展创建一个文件夹,我在这里命名它 Extensions
并将你所有的自定义扩展移动到这个文件夹中。您的 public/typo3conf/ext/
文件夹现在应该只包含由作曲家加载的扩展,并且可以随时清除,因为一个简单的 composer i
将恢复所有扩展。
└── projectRoot
├── Extensions
│ └── secsign
│ └── Classes
├── composer.json
└── public
└── typo3conf
└── ext
└── secsign(symlink_by_composer)
将此添加到您的项目中 composer.json:
"repositories": {
"0": {
"type": "composer",
"url": "https://composer.typo3.org/"
},
"1": {
"type": "path",
"url": "./Extensions/*",
"options": {
"symlink": true
}
}
},
...
"require": {
"secsign/secsign": "*",
...
},
从扩展程序的自动加载中删除第二行 composer.json
public/Extensions/secsign/composer.json:
"autoload": {
"psr-4": {
"Secsign\Secsign\": "Classes/"
}
},
现在 composer 加载您的项目 composer.json,找到您的扩展,将其符号链接到 typo3conf/ext/ 并读取您的扩展 composer.json 并执行它。
将所有 Ext 加载到您的项目中: 当您完成所有这些更改后,只需执行 composer update
。这会将您所有的第三方扩展加载到 projectRoot/public/typo3conf/ext/
并从 secsign -> ../../../Extensions/secsign
符号链接您的自定义扩展
添加更多自定义扩展:只需将您的自定义扩展添加到 Extension/
,确保它具有有效的 composer.json
并将其包含在
composer req secsign/one-more-ext
2。将您的 类 添加到您的项目 composer.json
将您的扩展留在原处,不要关心您的扩展 composer.json 并且
只需将您的 类 添加到您的项目 composer.json:
"autoload": {
"psr-4": {
"Secsign\Secsign\": "htdocs/typo3conf/ext/secsign/Classes/"
}
},
现在作曲家从您的项目 composer.json 自动加载 类,您的扩展 composer.json 甚至没有执行。
决赛
- 似乎更容易,但选择 1 有几个原因。
我正在为 TYPO3 v9.5.9 开发一个扩展,并且已经编写了我所有的代码,但是当我尝试使用该扩展时,我收到一条错误消息说
Class Secsign\Secsign\Controller\SecsignController does not exist. Reflection failed.
<?php
namespace Secsign\Secsign\Controller;
$apiPath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('secsign') . 'Resources/Public/SecSignIDApi/phpApi/SecSignIDApi.php';
require_once($apiPath);
use AuthSession;
use SecSignIDApi;
use \TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* SecsignController
*/
class SecsignController extends ActionController
{...}
控制器确实存在,但由于某种原因无法找到。这个错误发生在哪里?我如何解决它?欢迎任何提示。
composer.json 文件如下所示:
{
"name": "secsign/secsign",
"type": "typo3-cms-extension",
"description": "This extension allows users to authenticate using their smart phone running the SecSign App.",
"authors": [
{
"name": "SecSign Technologies Inc.",
"role": "Developer"
}
],
"require": {
"typo3/cms-core": "^9.5"
},
"autoload": {
"psr-4": {
"Secsign\Secsign\": "Classes",
"TYPO3\CMS\Secsign\": "public/typo3conf/ext/secsign/Classes/"
}
},
"autoload-dev": {
"psr-4": {
"Secsign\Secsign\Tests\": "Tests"
}
},
"replace": {
"secsign/secsign": "self.version",
"typo3-ter/secsign": "self.version"
}
}
有两种方法可以解决这个问题:
1。通过项目 composer.json
加载你的扩展为你的自定义扩展创建一个文件夹,我在这里命名它 Extensions
并将你所有的自定义扩展移动到这个文件夹中。您的 public/typo3conf/ext/
文件夹现在应该只包含由作曲家加载的扩展,并且可以随时清除,因为一个简单的 composer i
将恢复所有扩展。
└── projectRoot
├── Extensions
│ └── secsign
│ └── Classes
├── composer.json
└── public
└── typo3conf
└── ext
└── secsign(symlink_by_composer)
将此添加到您的项目中 composer.json:
"repositories": {
"0": {
"type": "composer",
"url": "https://composer.typo3.org/"
},
"1": {
"type": "path",
"url": "./Extensions/*",
"options": {
"symlink": true
}
}
},
...
"require": {
"secsign/secsign": "*",
...
},
从扩展程序的自动加载中删除第二行 composer.json
public/Extensions/secsign/composer.json:
"autoload": {
"psr-4": {
"Secsign\Secsign\": "Classes/"
}
},
现在 composer 加载您的项目 composer.json,找到您的扩展,将其符号链接到 typo3conf/ext/ 并读取您的扩展 composer.json 并执行它。
将所有 Ext 加载到您的项目中: 当您完成所有这些更改后,只需执行 composer update
。这会将您所有的第三方扩展加载到 projectRoot/public/typo3conf/ext/
并从 secsign -> ../../../Extensions/secsign
添加更多自定义扩展:只需将您的自定义扩展添加到 Extension/
,确保它具有有效的 composer.json
并将其包含在
composer req secsign/one-more-ext
2。将您的 类 添加到您的项目 composer.json
将您的扩展留在原处,不要关心您的扩展 composer.json 并且 只需将您的 类 添加到您的项目 composer.json:
"autoload": {
"psr-4": {
"Secsign\Secsign\": "htdocs/typo3conf/ext/secsign/Classes/"
}
},
现在作曲家从您的项目 composer.json 自动加载 类,您的扩展 composer.json 甚至没有执行。
决赛
- 似乎更容易,但选择 1 有几个原因。