Класс контроллера TYPO3 не найден. Где я могу связать это? - PullRequest
0 голосов
/ 21 октября 2019

Я разрабатываю расширение для TYPO3 v9.5.9 и написал весь свой код, однако, когда я пытаюсь использовать расширение, я получаю сообщение об ошибке, говорящее

Class Secsign \ Secsign \ Controller\ SecsignController не существует. Отражение не удалось.

enter image description here

<?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 Ответ

2 голосов
/ 29 октября 2019

Есть 2 способа, как вы можете решить эту проблему:

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 автоматически загружает классы из ваших проектов composer.json, ваши расширения composer.json даже не выполняются.

Final

кажется проще, но есть несколько причин, по которым стоит 1.
...