TYPO3: команда Symfony с аргументами и внедрением зависимостей - PullRequest
1 голос
/ 03 апреля 2019

Я сделал команду в TYPO3, которая имеет аргументы и внедрение зависимостей (DI).Как я понял в symfony DI сделан методом __construct.Но там я также должен указать аргумент, который я хочу передать команде.Так как же это сделать правильно?

Источники:

Версии: TYPO3 9.5.5, symfony 4.2.5

Скажем, я хочу передать один аргумент команде И ввестиObjectManager из TYPO3:

<?php

namespace Vendor\ExtensionName\Command;

use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
use Symfony\Component\Console\Command\Command;

class SomeCommand extends Command 
{

    /**
     * Object Manager
     *
     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
     */
    protected $objectManager;

    /**
     * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
     */
    public function __construct(
        string $cliParameter,
        \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager) 
    {
        $this->cliParameter = $cliParameter;
        $this->objectManager = $objectManager;
    }
}

Затем я вызываю это с помощью

bin/typo3 extension_name:someCommand foo

(где foo - $cliParameter)

Я получаю

Uncaught TYPO3 Exception Cannot instantiate interface TYPO3\CMS\Extbase\Object\ObjectManagerInterface

Итак, мой вопрос: что я не так сделал?Какой правильный способ сделать это?

1 Ответ

1 голос
/ 04 апреля 2019

Команды Symfony не связаны с Extbase.Таким образом, вы не можете использовать любой DI.Тем не менее, вы все равно можете получить экземпляр ObjectManager, а затем извлечь любой нужный вам объект:

$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$exampleRepository = $objectManager->get(ExampleRepository::class);

Если класс не использует Extbase или его DI, вы можете напрямую получить экземпляр с помощьюGeneralUtility::makeInstance() вместо.

...