バンドルシステム


バンドルは他のソフトウェアのプラグインに似ていますが、それより優れています。主な違いは、フレームワークのコア機能や作成したプログラム コードを含む、Symfony のすべてがバンドルであるということです。バンドルは、Symfony システムの第一級市民です。これにより、サードパーティ バンドルから事前に構築された機能を使用したり、独自のバンドルを公開したりできる柔軟なアーキテクチャが提供されます。バンドルを使用すると、アプリケーションで有効にする機能を簡単に選択し、希望どおりに最適化できます。

この記事では、バンドルの基本を学ぶことができます。「ベスト プラクティス」には、bundle の構成とベスト プラクティスに特化した大きな章があります。

バンドルは、「独立した機能を実装するために使用される」ディレクトリに保存されている構造化されたファイルのセットです。 BlogBu​​ndle、ForumBundle、またはユーザーを管理するバンドルを作成できます (多くの同様のバンドルがオープン ソース プロジェクトとしてすでに存在しています)。各ディレクトリには、php ファイル、テンプレート、css、js ファイル、テストなど、その機能に関連するすべてのものが含まれています。各機能のサブアイテムはバンドル内に存在し、各機能はバンドル内に存在します。

プログラムでバンドルを使用するには、AppKernel クラスの registerBundles() メソッドを通じてバンドルを登録して使用する必要があります:

// app/AppKernel.phppublic function registerBundles(){
    $bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Symfony\Bundle\MonologBundle\MonologBundle(),
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
        new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
        new Symfony\Bundle\AsseticBundle\AsseticBundle(),
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new AppBundle\AppBundle(),
    );     if (in_array($this->getEnvironment(), array('dev', 'test'))) {
        $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
        $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
        $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
    }     return $bundles;

registerBundles() メソッドを使用すると、プログラムでどのバンドル (Symfony のコア バンドルを含む) を使用するかを完全に制御できます。

バンドルは、(app/autoload.php で設定されたオートローダーを通じて) 自動的にロードできる限り、どこにでも存在できます

バンドルの作成

Symfony の標準バージョンには、フル機能のバンドルの作成に役立つ非常に使いやすいコマンドが組み込まれています。もちろん、バンドルを手動で作成するのも同様に簡単です。

単純なバンドル システムをデモンストレーションするために、新しい AcmeTestBundle を作成して開きます。

Acme の部分は単なる仮名です。実際には、あなたまたはあなたの組織を表す「ベンダー」名に置き換える必要があります (例: ABCTestBundle は、ABC)

という名前の特定の A 会社を表します。まず、新しい src/Acme/TestBundle/ ディレクトリを作成し、 new AcmeTestBundle.php ファイル:

// src/Acme/TestBundle/AcmeTestBundle.phpnamespace Acme\TestBundle; 
use Symfony\Component\HttpKernel\Bundle\Bundle; 
class AcmeTestBundle extends Bundle
{
}

AcmeTestBundle はバンドルの命名規則に従います。クラス名を TestBundle に変更する (そしてファイル名 TestBundle.php を変更する)

ことで、バンドル名を TestBundle に簡略化することを選択できます。

新しいバンドルを作成するときに必要なのは、この空のクラスだけです。通常は空ですが、このクラスは特に強力で、特にバンドルのさまざまな動作をカスタマイズするために使用されます。

バンドルを作成したので、AppKernel クラスでバンドルを有効にします。

// app/AppKernel.phppublic function registerBundles(){
    $bundles = array(
        // ...         // register your bundle / 注册你的bundle
        new Acme\TestBundle\AcmeTestBundle(),
    );
    // ...     return $bundles;}

まだ何も行われていませんが、AcmeTestBundle を使用する準備ができています。

それはとても簡単です。symfony は、基本的なバンドル スケルトンを生成するためのコマンド ライン インターフェイスも提供します:

$  php bin/console generate:bundle --namespace=Acme/TestBundle

バンドル スケルトンには、コントローラー、テンプレート、ルーティング リソースなどが含まれており、すべてカスタマイズすることができます。 Symfony コマンドラインツールに関する後のセクションで詳細を学ぶことができます。

新しいバンドルを作成する場合でも、サードパーティのバンドルを使用する場合でも、バンドルが registerBundles() によって開かれていることを確認する必要があります。 generate:bundle コマンドを使用すると、Symfony が登録を完了します。

バンドル ディレクトリの構造

バンドル ディレクトリはシンプルで柔軟です。デフォルトでは、バンドル システムは一連の命名規則に従い、すべての Symfony バンドル間でコードの一貫性を維持します。 AcmeDemoBundle を見てください。これには、バンドルの最も一般的な要素のいくつかが含まれています:

  • Controller/
  • これには、バンドルのコントローラーが含まれます ( `RandomController .php` など)。
  • DependencyInjection/
  • サービス構成情報のインポート、コンパイラ パスの登録などに使用される特定の依存性注入拡張クラスがあります (このディレクトリは必要ありません)。
  • Resources/config/
  • ルーティング設定 (`routing.yml` など) を含む設定情報を保存します。
  • リソース/ビュー/
  • ストレージ テンプレート。サブフォルダーをコントローラー名ごとに整理します (例: `Hello/index.html.twig`)。
  • Resources/public/
  • Web アセット リソース (画像、CSS など) を保存します。これらは、プロジェクトの `web/` ディレクトリにインポートされます。ハードコピーまたはシンボリックリンク コンソールコマンド「assets:install」が実装されています。
  • Tests/
  • このバンドルのすべてのテスト クラスを保存します。

バンドルは、実装する機能に応じて小さい場合も大きい場合もあります。必要なファイルのみが含まれており、他には何も含まれていません。

中国語のガイドを読み進めると、オブジェクトをデータベースに保存する方法、フォームの作成と検証方法、プログラムへの翻訳機能の追加方法、テストの作成方法などを学びます。これらはすべてバンドルに基づいており、独自のディレクトリと機能があります。