私はsymfony2を使うことを学んでいますが、私はサービス層とそれがどこで使用できるのかを学ぶのに苦労しています。 Dependency Injection:symfony2のサービス層をもっと理解するには
どのように私はより良いSymfony2の
私はsymfony2を使うことを学んでいますが、私はサービス層とそれがどこで使用できるのかを学ぶのに苦労しています。 Dependency Injection:symfony2のサービス層をもっと理解するには
どのように私はより良いSymfony2の
私はサービスを説明するために最善を尽くすつもりですが、Symfony2 docsは私よりも優れた仕事をしています。
コアでは、サービスは単なるクラスです。 Symfony2のDependency Injection Container
(または単にContainer
)に登録されると、クラスはサービスになります。この時点で、クラスはアプリケーションのサービスレイヤの一部です。
サービスは依存関係を持つことがあります(しばしばそうなりますが、必須ではありません)。サービスは、他のサービスの依存関係としてよく使用されます。あなたは電子メールを送信するために使用されるクラスを持っている
EmailSender
SmtpTransport
EmailSender
と呼ばれる:私はあなたに例を挙げましょう依存関係はSmtpTransport
の形である。つまり、EmailSender
がそのジョブを実行できるようにするには、SmtpTransport
というインスタンスを注入する必要があります。 (EmailSender
が依存しているものの、SmtpTransport
にはないことに注意してください。)アプリでEmailSender
5内の異なる場所を使用する必要が言います。 (EmailSender
は一つだけ依存しているため)コードの多くではありませんが、あなたの代わりにSMTPを使用しての、EmailSender
はトランスポートを使用する必要があると判断したときに何が起こる
$emailSender = new EmailSender(new SmtpTransport());
$emailSender->send($email)
:各スポットでは、次のようなコードを有していても良いですsendmail
のクラス?それを更新するには、コードの各ブロックを編集する必要があります。
代わりに、EmailSender
とその依存関係をサービスとして登録することもできます。
// YourApp/YourBundle/Resources/config/services.yml
services:
smtp_transport:
class: YourApp\YourBundle\Email\SmtpTransport
email_sender:
class: YourApp\YourBundle\Email\EmailSender
arguments:
- @smtp_transport
さて、(container
意識コンテキストから)それを使用する:それは実際に電子メールを送信するためにクラスを使用する方法をはるかに簡単かつきれい
$container->get('email_sender')->send($email);
お知らせ
登録は次のようになります?確かに、まずサービスを登録する必要がありますが、これは簡単で一度だけ行う必要があります。
EmailSender
に1つではなく3つの依存関係があるとします。サービスを使用することで、実装コード(電子メールの送信に使用されたコード)を変更することなく、サービス登録を変更するだけで済みます。
要するに、サービスレイヤーは、a)1つ以上の依存関係b)を「グローバル」スコープで使用する必要があるクラスの中央リポジトリとして機能します。Dependency Injection Container
からこれらのサービスクラスをフェッチすることで、冗長コードが少なくなり、幅広い変更を行うための簡単な方法になります。
私は間違っているかもしれませんが、Symfony2は依存性注入コンテナを実装する最初のPHPフレームワークだと思います。そのため、多くのPHP開発者がサービスの概念に精通していない可能性があります。非常に強力なツールだと分かるので、完全に理解しておくことをお勧めします。さらに、サービスのコンセプトはSymfony2やPHPに限定されるものではなく、さまざまなフレームワークや言語でこのコンセプトを活用することができます。
におけるサービス層について理解することができますは、件名に記事のファビアンのシリーズをお試しください。
DIを理解しましたが、サービスのことを理解できませんでした – user825904
同じことです。サービスはDICで指定されたクラスです – MDrollette
私はこのリンクからsymfony2を学んでいますhttp://tutorial.symblog.co.uk/docs/customising-the-view-more-with-twig.html、誰でもこのサービスレイヤーが何であるか、またはこのチュートリアルでサービスレイヤーを使用する方法を教えてもらえますか – user825904