2016-11-19 11 views
2

私は、CakePHPフレームワークの開発のベストプラクティスに従っているかどうかを知りたいと思います。あなたはたとえば請求書テーブルを持っている、とあなたが請求書のステータスを表示したい場合はこれはCakePHPの正しい開発アプローチですか?

、あなたは、このような請求書のステータスの緑色のラベルをしたいとしましょう:

<span class="green">Paid</span> 

何I doは次のとおりです。私はvirtuallabelという名前のモデル上に仮想フィールドを作成します。その仮想フィールドでは、要素を表示するヘルパーを呼び出します。

ので、それはそれはそのモデルからフィールドだったと私はstatuslabelになるだろうような方法どこでも自分のアプリケーションでは、私はstatuslabelを呼び出すことができるモデル - >ヘルパー>要素

だろう。

私の大きな質問は、これが正しい方法であるか、それともすべて間違っているかです。

+1

私はtinyint2と["enums"](http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/)と単純なフォーマットヘルパーを表示します。ここではモデルレイヤーを変更しません。 – mark

答えて

0

コードのMVC原則に違反しないようにする必要があります。この場合は、具体的にはモデルコードにプレゼンテーションロジックが含まれている必要があります。これは、CakePHPや他のMVCフレームワークにも同様に当てはまります。

その他のエンティティフィールドに基づいて請求書のステータスを計算できるstatusという名前の仮想フィールドを作成することもできます。ステータスがデータベースに既に通常のエンティティフィールドとして格納されている場合は、仮想フィールドをスキップできます。

ビューレイヤーでは、すべてのプレゼンテーションコードが必要です。ビューで直接実行することも、ロジックをヘルパーに移動することもできます。ヘルパーの適切な機能はステータスフィールドを入力として受け取り、ステータス値に基づいて適切なクラスをテンプレートに出力します。

ビュー層(CakePHPのテンプレートとヘルパークラス)にプレゼンテーションコードを保存する利点は、後でテンプレートを更新することで簡単に置き換えることができることです。 CakePHP 3では、プラグイン経由でthemesを作成するオプションも提供されています。これは、アプリケーションのUIを簡単に変更できる方法ですが、MVCの設計原則に固執している場合に限ります。

+0

さて、htmlはヘルパーから呼び出されたテンプレートファイルにあります。私のモデルからヘルパーにデータを渡すのは、MVCの原則に違反しているのですか? –

+2

モデルからヘルパーにデータを渡すことはできません。私はあなたがひどく自分自身を表現していると思います。コントローラはデータを取り出してビューに渡し、テンプレート自体がヘルパーを呼び出し、モデルデータを渡します。それはすべて大丈夫です。 – mark

+0

ここでの問題は、データだけでなく、プレゼンテーションロジックも渡すように見えることです。ステータスを文字列値として渡すと問題ありません。 ''有料 ''。データはコントローラからモデルから取得され、ビューに配置されます。あなたのヘルパークラスでは、論理を記述する必要があります: – Petronius

0

通常、仮想フィールドを使用することは悪い考えではありません。時には単純な答えの背後にあるロジックは非常に複雑であるため、SQLまたは合理的な量のSQLで行うことはできません。

ほとんどの場合、クエリを直接使用することは、余分なPHP処理なしではるかに高速であることを覚えておくことが重要です。あなたの質問には、(SQL式の生成以外に)PHPロジックがない場合、私はそれと一緒に行くと言うでしょう...

...データベース設計についての議論もあります。

質問の背後にあるあなたのデータベーススキーマについては、私は本当に言うことはできませんが、私にとっては請求書のステータスよりも簡単なことは、データベースとint型のフィールドに間違いなくあるはずです。だから何が請求書発行システムについての私の経験になると、データベーススキーマのようなものが考えられます。

請求書

  • ID
  • invoice_status_id

invoice_statuses

  • IDを
  • タイトル:

モデルの関連付けを作成してデータベースに正しく照会すると、結果が請求結果になり、説明どおりに使用することができます。

Btw。ほとんどの場合、再利用可能な要素を使用するのが良い方法です。少ないコードで維持する:D

関連する問題