32

これは当然のことかもしれませんが、多くのマニュアルやブログを読んだ後でも、Symfony2 のバンドルが Web ページで何を表す必要があるのか​​、まだわかりません。そして、単純なデモ アプリケーションからそれを推測するのは困難です。

例: 私は 2 つの部分に分かれているサイトを持っています (1 つは単なる第 2 レベル ドメインのようなものexample.comで、もう 1 つは ですdom2.example.com)。これらの 2 つの部分には、それぞれ独自のセクションがあり、同じ (ニュースのように) である場合もあれば、異なる場合もあります。

これを symfony2 で正しく表現するにはどうすればよいでしょうか? 私は持っているべきですか

  • 異なるコントローラーを介して異なるセクションをバンドルして実行するMySite\site1、またはMySite\site2
  • バンドルSite1\NewsおよびSite2\News、または
  • バンドルMySite\Site1NewsなどMySite\Site2News_

...または、これですべて間違っていますか?

4

3 に答える 3

15

私はSymfonyも初めてで、この質問の結果に興味を持って従いますが、価値があるので、私の見解は次のとおりです。

バンドルとは、ファイル、アセット、PHP クラスとメソッド、テストなどのグループです。グループ化のロジックは、好きなものにすることができます。場合によっては、グループ化が何であり、なぜそれが行われたのかが非常に明白です。たとえば、Symfony2 用のブログ システムを作成し、それをリリースしたい場合は、それをバンドルにします。これは、ドキュメントで最もよく使用される例です。

しかし、1 つの小さな機能としてリリースしたいものすべてにバンドルを使用することもあります。たとえば、すべてのコントローラーのデフォルト ルートを作成するこのバンドルを考えてみましょう。これは、ブログやフォーラムのように完全に開発されたプラグイン/機能ではありませんが、プロジェクトに簡単にインポートできる小さなコードであり、他のすべてのものから完全に分離されたままのバンドルです。

最後に、プロジェクトの内部でバンドルを使用することもできます。


あなたの特定の状況に対する私の見解:

早くて簡単:

  • MySite\MyCode-- 作業は完了しますが、作成しようとしているコードを分割する論理的な方法がない可能性があります。

2 つのサイト間にさらに独自の機能があり、明確にするためにそれらを分離したい場合:

  • MySite\SharedFeatures
  • MySite\Site1Features
  • MySite\Site2Features

その場所のすべてが本当に気に入っている場合、または複雑なプロジェクトがある場合は、次のようになります。

  • MySite\MySiteMain(独自のバンドルに値しない共有機能とキャッチオールの雑多)
  • MySite\News
  • MySite\Site1FeatureSomethingOrOther
  • MySite\Site2FeatureSomethingOrOther

コードの論理グループに固執したいのは間違いないと思います-したがって、「Site1\NewsとSite2\Newsをバンドルする」と「MySite\Site1NewsとMySite\Site2News」の例は最善の方法ではないと思います。Site1 と Site2 は実装なので、各サイトのニュース ページに個別のバンドルを作成するのは逆効果に思えます。1 つのニュース コンポーネントを作成し、それをビルドして 2 つの異なる方法で使用することをお勧めします。

2 つのドメインに関する質問については、両方のドメインを同じコードに向けて、どのドメインが要求されているかをコード内でテストするか、同じコードの 2 つのコピーをチェックアウトして、構成ファイルを少し変更することができます (この1 つの場所でコードを編集し、両方のコピーを更新するため、必ずしもDRYの考え方に違反しているわけではありません)。

于 2011-05-22T07:36:21.490 に答える
11

私がバンドルを理解する方法は、Typo3 や Drupal などの CMS が「プラグイン」と呼ぶものに似ているということです。したがって、理想的には自己完結型であり、他のプロジェクトでも使用できるように記述されている必要があります。

たとえば、あなたの場合、site.com と dom2.site.com で分割された、Web サイトのすべての静的ページを含む「staticHtmlBundle」を作成します。

次に、すべてのニュース記事を含む「newsBundle」を作成します。おそらくデータベース駆動型で、それらを編集してさまざまなチャネルに割り当てることができる小さな管理セクションがあります (あなたの場合は、site.com、dom2. site.com)。staticHtmlBundle 内の静的ページは、newsBundle を呼び出し、そのデータを表示します (たとえば、ニュースの listView や detailView など)。

すべてを可能な限り抽象化して再利用できるようにしておくと、newsBunde を Symfony 2 Bundle リポジトリに公開して、コミュニティと共有することさえできます!

于 2011-04-24T14:25:00.000 に答える