2016-04-22 9 views
0

一般に、TYPO3 Flowsドメイン駆動型MVCシステムには、ActionController、Repositories、Models und Viewsがあります。私たちのプロジェクトでは、Ressourceを含む一般的なFileモデルを使用します。私はここに必要なMVCは?

ここで、特定のURLアクションを聞かないアクションコントローラのような特別な「エキスパート」PHPスクリプトが必要です。そのようなFileオブジェクトを取得する必要があります、何かの内部のようなものを記録するか、特別な手順の後にオブジェクトを操作し、情報/戻り値を返す。

私はそれに必要なものは何ですか?インターフェース?マネージャー?それをどのように呼び出すのですか?TYPO3 Flowでどのように初期化しますか?それとも、FileController(アクションコントローラ)は私がそのために使用しなければならないものですか?

この「専門家」のアクションをURLに聞くべきではなく、

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

のようなアクションコントローラのように使用しなければならないと使用することができなければならない(注射によって、またはとにかく)PersistenceManagerのように考えています。

ありがとうございます。

答えて

2

私はServiceと言いますが、私が正しくあなたを理解しているかどうかはわかりません。私はあなたには、いくつかのFileControllerを持っていて、そこcreateFileActionを持って、アップロードされたリソースから新しいFileモデルを作成する、いくつかの検証を行う、変換、リネームして使用してそれを保存推測

FileRepositoryを注入し...そして、あなたは途中で何かをしたいです。

私は​​のためにFileServiceを作成します。そこにリポジトリやその他のサービスを注入します。そして、アクションやコマンドコントローラで、私はそれらのサービスを注入して、彼らはそのように、(と私は、コードを複製する必要はありません)、「専門家」のものを実行します。

// 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のために - それは、 (FileFactoryを使用して)新しいファイルモデルを作成し、ImageServiceのような他のサービスを使用して変換を行い、リポジトリとロガーを挿入します(しかし、ログのような場合にはAspectsを使用できます)。

FileServiceはFileServiceInterfaceを実装している可能性があります。このインターフェイスをコントローラに注入し、使用するサービスをObjects.yamlで定義します(より柔軟にするため、他の誰かがそれを実装して、それ)。

この「サービス」のアプローチは少し古いかもしれませんので、誰かがより良い解決策を提案します。フロールールに従うことを望むなら、公式パッケージのようなものをどのように扱うかチェックしてください。

+0

私はまだその状況で苦労しています。しかし、入力のおかげで。これまでのところ、私には多くの意味があります。 – Pete

関連する問題