В общем, в системе MVC, управляемой доменом TYPO3 Flows, есть ActionController, репозитории, модели и представления. В нашем проекте мы используем общий File
модель, которая содержит Ressource.
Теперь нам нужен специальный «экспертный» php-скрипт, такой как контроллер действий, который не слушает определенные действия URL. Должно получиться такое File
объект, сделать что-то внутреннее, например, занести в журнал что-нибудь или манипулировать объектом после специальной процедуры и вернуть информацию / возвращать значение.
Что мне нужно для этого? Интерфейс? Менеджер? Как вы это называете и как мне инициализировать это в TYPO3 Flow? Или FileController (контроллер действий) — это то, что я должен использовать для этого?
Этот «эксперт» не должен прослушивать действия URL, но должен использоваться как контроллер действий, например
$expertyThing = new ../../Expertything();
$expertyThing->doCoolStuff($file);
и следует использовать мысли, как PersistenceManager (путем инъекции или в любом случае).
Спасибо за любой вклад для этого.
я бы сказал Service
но я не уверен, правильно ли я вас понял.
Я думаю, у вас есть некоторые FileController
и у тебя есть createFileAction
там, что создает новое File
модель из загруженного ресурса, выполнить некоторую проверку, преобразование, переименование и сохранить его с помощью введенного FileRepository
.. И вы хотите что-то посередине.
Итак, я создаю FileService
для этого My/FileManager/Domain/Service/FileService.php
— залить туда репозиторий и другие сервисы. И в контроллерах действий или команд я внедряю эти сервисы, и они делают «экспертные» вещи (и мне не нужно дублировать код), вот так:
// FileController
public function createFileAction(Resource $resource) {
try {
$file = $this->fileService->processAndSaveFile($resource);
} catch (\Exception $e) {
$this->addFlashMessage($e->getMessage(), '', Message::SEVERITY_ERROR);
$this->forwardToReferringRequest();
}
$this->addFlashMessage('File created');
$this->redirect('fileList');
}
Так что для меня FileService делает экспертные вещи для File — он создает новую модель File (возможно, с использованием FileFactory), выполняет преобразования с использованием других сервисов, таких как ImageService, имеет встроенный репозиторий и регистратор (но вы можете использовать аспекты для случаев, таких как ведение журнала) .. и если что-то идет не так, он генерирует исключение FileException.
И, конечно, FileService может реализовать некоторый FileServiceInterface, и вы можете внедрить этот интерфейс в свой контроллер и определить в Objects.yaml
какой сервис следует использовать (это делает его более гибким, чтобы кто-то другой мог реализовать его и заменить ваш FileService, не касаясь его).
Этот подход «Сервис» может быть немного устаревшим, поэтому, возможно, кто-то предложит лучшее решение. Если вы хотите следовать правилам Flow, просто проверьте, как они обрабатывают подобные вещи в официальных пакетах.
Других решений пока нет …