Какая вещь MVC мне нужна здесь?

В общем, в системе MVC, управляемой доменом TYPO3 Flows, есть ActionController, репозитории, модели и представления. В нашем проекте мы используем общий File модель, которая содержит Ressource.

Теперь нам нужен специальный «экспертный» php-скрипт, такой как контроллер действий, который не слушает определенные действия URL. Должно получиться такое File объект, сделать что-то внутреннее, например, занести в журнал что-нибудь или манипулировать объектом после специальной процедуры и вернуть информацию / возвращать значение.

Что мне нужно для этого? Интерфейс? Менеджер? Как вы это называете и как мне инициализировать это в TYPO3 Flow? Или FileController (контроллер действий) — это то, что я должен использовать для этого?

Этот «эксперт» не должен прослушивать действия URL, но должен использоваться как контроллер действий, например

$expertyThing = new ../../Expertything();
$expertyThing->doCoolStuff($file);

и следует использовать мысли, как PersistenceManager (путем инъекции или в любом случае).

Спасибо за любой вклад для этого.

0

Решение

я бы сказал 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, просто проверьте, как они обрабатывают подобные вещи в официальных пакетах.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]