8

古いコードベースをSymfony2.2フレームワークに移動します。

私の古いコードでは、ArticleエンティティにgetUrl()メソッドがあり、現在の記事のURLを返していました。

Symfonyでは、ルーターサービスを使用してそのようなURLを生成する必要があります。

エンティティ内からルーターにアクセスできません。これは悪い習慣であり、フレームワークで実際にサポートされていないためです。

Twigヘルパーpath()を使用してTwigテンプレート自体からルーターを呼び出し、URLの構築に必要なすべての引数(Articleインスタンスから)を提供できます。しかし、このアプローチはあまり良くありません。URLフォーマットルールを変更することにした場合、この呼び出しをすべて見つけて書き直す必要があります(DRYではありません)。

私は本当にビジネスロジックのカプセル化をここに保存し、すべての内臓をビューレイヤーに引き込まないようにしたいのです。

この状況でどのように進めればよいですか?

4

1 に答える 1

11

ArticleManagerサービス層にクラスを作成し、そこでビジネスロジックを処理します。依存性注入を介してルーターをルーターに渡すことができます。

たとえば、ルーターインスタンス(注入しArticleManagerたメソッドまたは別のセッターメソッド)を使用して、のプロパティに基づいてUrlを生成し、それを返すメソッドがあります。 getUrl(Article $article)__construct$article

この方法により、ビジネスロジックがビューまたはコントローラーレイヤーを汚染しないようになります。

必ずサービスコンテナのドキュメントを読んでください。

于 2013-03-15T13:16:32.293 に答える