2016-04-04 8 views
4

記事、タグ、イベント、たくさんの関係、かなり巨大で複雑なニュースポータルバンドル "NewsBundle"を作ったとしましょう。Symfony:複数の類似バンドルが1つのマスターですか?

今、私はこれを何度もコピーして、ファッション・ニュース・ポータル、カー・ニュース・ポータル、ドッグ・ニュース・ポータルなどを作成し、それぞれ独自のドメインを利用したいと考えています。ポータルテンプレート翻訳資産が異なります。複雑なレポートを実装したいので、私はすべてのものを単一のデータベースに入れて、それぞれのポータルですべてのエンティティにフラグを立てます。

私の質問:どのようにコードを整理するのですか?

まず私は使用各ドメインで同じアプリケーションが、異なるバンドルを持っているをルーティングすることができ、考え出しました。

それから私は私のマスターバンドルを伸ばすことができることが分かった。しかし、これは一度しか動作しないようです。

注釈付きのルーティングをすべて行ったので、マスターからのルートを継承するようには見えません。

最も難しい質問の1つは、ポータルスイッチをどこに置くかです。どこかファッションや犬のポータルかどうかを示す変数を設定する必要があるので、それに応じてすべてのリポジトリのコンテンツをフィルタリングできます。

これは確かに最悪の練習であるapp.phpで行いました。

最後に、コードを重複せずに簡単に新しいポータルを公開できるようにしたいと考えています。

アイデアは大変ありがとうございます。ハンブルクから

挨拶、 ボリス

+0

私は、.yml設定ファイルをバンドルに追加できることを学びました。そこにバンドルのポータルIDを格納することができました。 私が読んだ投稿から、マスターを拡張すると、親バンドルからルートを取得できないことを意味します。だから、私は注釈からymlにすべてのルートを書き直さなければならないと思う。その後、それらを子バンドルに格納して継承することができました。右? –

+0

これらのポータルのルートは同じになりますか?どのようにそれらを区別する予定ですか? – Chausser

答えて

2

あなたの問題は、異なる環境を経由して解決することができます。それぞれのポータルは異なる環境です。要求されたdomainに応じて、異なるフロントコントローラを指すようにWebサーバーを設定できます。

例:

ドメインnews.domain.comのためにあなたのフロントコントローラがweb/app_news.phpだろう。それは自動的にapp/config/config_news.ymlから設定をロードします

$kernel = new AppKernel('news', false); 

:そしてそれは行が含まれます。この設定では、ポータルのすべての特定のパラメータを指定できます。 config_news.ymlで指定されたパスからリソースをロードする変換のようなリソースに対しては、特別なローダーを実装するだけです。

5

あなたはあなたのアプリケーションであなたのNewsBundleを保つために、それを中心バンドルの数を持っている、あなたが作成する各ポータルのいずれかが必要です。

ここでバンドル継承は本当に必要ありません。ポータルバンドルはNewsBundleに依存しますが、それを継承しません。

特定のポータルに関連するルーティング設定、テンプレート、およびその他の動作は、関連するバンドルに含める必要があります。各バンドルにはResourcesというフォルダがあります。ここでは、特定のルーティング、変換、設定、およびテンプレートを配置する必要があります。

app/config/routing.ymlは、他のすべてのrouting.ymlファイルを参照する必要がある中央ルーティングのconfファイルです。

スイッチについては、詳しくは答えられませんが、サーバーアプリケーションapacheまたはnginx(またはその他...)に設定する必要があります。

+0

それは良いアドバイスです。問題は次のとおりです。ポータルはほぼ同じで、約50のポータルになります。私は本当に新しいルートを50回追加する必要がありますか、それとも良い方法がありますか? –

+0

あなたのルートが毎回異なる場合、なぜそうですか?それらが似ている場合は、[prefixes](http:// symfony)と一緒に[annotations](http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/routing.html)をベースコントローラで使用することができます.com/doc/current/book/routing.html#prefixing-imported-routes)、各バンドルごとに異なります。もう一度、これがどれほどうまくいくかわからない - ベースコントローラーで宣言されたルートが子どもに伝わるかどうかわからない。これは正しく動作するためにはホスト構成と組み合わせる必要があります。 – Zephyr

+0

また、ルートについても、私は[this](http://symfony.com/doc/current/cookbook/routing/custom_route_loader.html)を見つけました。それが役に立てば幸い。 – Zephyr

関連する問題