2016-09-30 10 views
0

こんにちは:)私はsymfony 3を使用する必要があるエクササイズに固執しています。私はサービスがどのように機能するのか理解できないと思います...私はエクササイズのコードただ論理部分exerciceの目的は何のビューがsymfonyでのサービスの使用

を必要としない(私の場合は、データベース内の日数を削除するかを決定するためのパラメータとなりますx)のデータベースhttp://localhost/purge/xでいくつかの要素を削除することです

をさて、私は削除する必要があるすべての要素の結果を与えるためにリポジトリのメソッドを呼び出すコントローラへのルートを実行します。それだけです!

しかし、エクササイズではリポジトリ+サービスでメソッドを使用するように頼んではいませんが、サービスで何ができるのかわかりません。私はそれを呼び出すサービスを行う方法を知っています...しかし、この場合、私は私のサービスに与えることができるものを理解していない...そしてなぜ私の最初のアイデアを使用するよりも良いですか?

が、それは明らかだホープ、感謝:)

+0

私にとって過度のようなものにサービスを使用しています。あなたが言うように、単にエンティティにエンティティを与えるためにリポジトリメソッドを使用してから、コントローラでエンティティを削除しないでください。 – DevDonkey

+1

あなたのコントローラが現在行っていることは、あなたが言ったようにすべきだと思います:*削除する必要があるすべての要素の結果をリポジトリ内のメソッドに渡して呼び出します。それ以外はDBからも削除する必要があります。私の意見では、このエクササイズは他のサービスに依存するサービスを作成することに関するものです。 –

+0

リポジトリは結果を取得し、この結果を使用してデータベースから削除します。 –

答えて

0

のようなおそらく何か:

class Purger 
{ 
    public function __construct(EntityRepository $repository) 
    { 
     $this->repository = $repository; 
    } 
    public function purge($days) 
    { 
     // Do what needs to be done 
     $itemsToPurge = $this->repository->whatever... 
    } 
} 
// Controller Action 
$purger = $this->get('purger'); 
$purger->purge($days); 

# services.yml 
my_repository: 
    class: MyBundle\Doctrine\MyRepository 
    factory: ['@doctrine.orm.entity_manager', 'getRepository'] 
    arguments: ['MyBundle\Entity\MyEntity'] 
purger: 
    class: MyBundle\Purger 
    arguments: ['@my_repository'] 

、余分な信用のためには、サービスとしてあなたのコントローラーを定義し、直接パージャーを注入します。それはあなたにサービスの力とそのレッスンがなぜ存在するのかをよりよく理解できるかもしれません。

+0

私はあなたが説明したことを理解していますが、関数構造を構築する方法を見たことがありませんでした...私はそれを使うべきだとは思わない(services.ymlの工場でも同じです)シンプルなサービスなので、私のサービスが何をすることができるのか分かりません:) –

+0

あなたのインストラクターから明確に説明してください。私が投稿したものはかなり標準です。 – Cerad

+0

これは最終的な答えです: - 削除する広告をキャッチするためのリポジトリ内のメソッドを作成します - このメソッドを使用して広告を削除するサービスを作成します サービスの目的は、広告以外のものをパージすることができます –

関連する問題