TYPO3: Как использовать внешние библиотеки PHP в расширении Extbase (без установки composer) - PullRequest
3 голосов
/ 22 января 2020

Я получил TYPO3 v10.2 без Composer. Я создаю расширение и хочу включить некоторые сторонние библиотеки PHP в мое расширение Extbase. Я уже читал в документах TYPO3, что они должны быть помещены в Resources/Private/PHP/ThirdPartyLibrary, но как я могу включить их там? Это все еще возможно с composer require или я должен просто скачать сторонние библиотечные ресурсы и разархивировать их там? Как я могу использовать пространство имен / классы из внешней библиотеки в контроллере или общего в моем расширении? Каков наилучший способ сделать это без AND с composer? Хотелось бы знать оба пути. Пока спасибо!

Ответы [ 2 ]

2 голосов
/ 22 января 2020

Вы можете просто использовать composer в своей локальной среде.

  1. composer init
  2. composer req <neded packages>
  3. composer u
  4. Переместите vendor/ в your_extension/Resources/Private/PHP/ThirdPartyLibrary/
  5. Настройте путь автозагрузки в vendor/, который вы только что переместили.

Вы можете взглянуть на расширение Shariff

Они поместили внешнюю библиотеку в Resources/Private/Shariff/vendor/

https://bitbucket.org/reelworx/rx_shariff/src/master/Resources/Private/Shariff/

и автоматически загрузили файлы в

https://bitbucket.org/reelworx/rx_shariff/src/master/Classes/Shariff.php

Использование библиотек в вашем контроллере

В библиотеках уже должны быть пространства имен, если вы хотите использовать их в своем контроллере.

С тех пор, как вы вошли в TYPO3 V10, вы можете использовать новое внедрение зависимостей symfony, которое теперь реализовано в TYPO3: https://usetypo3.com/dependency-injection.html

your_extension / Classes / Контроллер / ВашКонтроллер. php

/**
 * @var ThirdPartyLibrary
 */
protected $thirdPartyLibrary;

/**
 * @param ThirdPartyLibrary $thirdPartyLibrary
 */
public function __construct(ThirdPartyLibrary $thirdPartyLibrary)
{
    $this->thirdPartyLibrary = $thirdPartyLibrary;
}

your_extension / Configuration / Services.yaml

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false

    Vendor\Namespace\:
        resource: '../Resources/Private/PHP/ThirdPartyLibrary/*'
1 голос
/ 22 января 2020

Вам нужно будет загрузить класс для вашей библиотеки. Я не уверен, какую библиотеку вы используете.

Поместите приведенный ниже код в ваш ext_localconf.php

<?php

$composerAutoloadFile = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('yourExtKey') . 'Resources/Private/PHP/ThirdPartyLibrary/vendor/autoload.php';
require_once($composerAutoloadFile);

Теперь вы можете использовать библиотечный класс там, где вы хотите его использовать. Убедитесь, что вы сбрасываете кеш, а также класс автозагрузки из TYPO3 Backend!

...