2

私は Symfony2 を初めて使用し、ユーザー管理、ページ管理、画像ライブラリなどのさまざまなセクションを持つカスタム CMS を構築しました。CMS 内のすべてのアクティビティをログに記録したいので、集中化されたクラスを作成するのが最善だと考えました。アクティビティを保存して、どのセクションからでも呼び出せるようにします。

依存性注入とサービス コンテナーを見てきましたが、違いを理解するのに苦労していますか? もしあれば?

次のサービスをセットアップしましたが、これが最善の方法であるかどうかについてフィードバックをお願いします。

# app/config/config.yml
# AdminLog Configuration
services:
    admin_log:
        class:        xyz\Bundle\CoreBundle\Service\AdminLogService
        arguments:    [@doctrine.orm.entity_manager]

以下は私のクラスです:

<?php
namespace xyz\Bundle\CoreBundle\Service;
use xyz\Bundle\CoreBundle\Entity\AdminLog;

class AdminLogService
{
    protected $em;

    public function __construct(\Doctrine\ORM\EntityManager $em)
    {
        $this->em = $em;
    }

    public function logActivity($controller, $action, $entityName, $note)
    {
        $adminLog = new AdminLog(
            1,
            $controller,
            $action,
            $entityName,
            $note
        );
        $this->em->persist($adminLog);
        $this->em->flush();
    }

}

次に、以下を使用して、CMS 内の任意のコントローラーからこれを呼び出します。

$this->get('admin_log')->logActivity('Website', 'index', 'Test', 'Note here...');
  1. これが最善の方法ですか?
  2. 私が行ったように、クラスはバンドル内の「サービス」ディレクトリ内にある必要がありますか?
  3. DependencyInjection フォルダーとは何ですか?

ありがとう

4

1 に答える 1

3

Dependency Inction は、オブジェクトをクラスで初期化するのではなく、クラスに渡すことを意味します。サービス コンテナは、これらすべてのサービス (依存関係を持つクラス) を管理するのに役立つクラスです。

あなたの質問:

これが最善の方法ですか?

はい、名前空間を除いて。

私が行ったように、クラスはバンドル内の「サービス」ディレクトリ内にある必要がありますか?

いいえ、どの名前空間にも存在できます。などの論理名前空間に配置する必要がありますMyBundle\Logger

DependencyInjection フォルダーとは何ですか?

ExtensionConfigurationおよびコンパイラ パスの 3 種類のクラスを意味します。

于 2013-05-15T17:00:09.553 に答える