9

データベースから実行されるすべてのページにメニューを表示したいと考えています。ダウンして汚れた php を使用するのは簡単ですが、MVC システムを使用して cakephp と統合したいと考えています。今私の質問は、これを行うための最良の方法は何ですか?

私の考えでは、レイアウトを使用して要素を作成し、次にすべてのロジックのコンポーネントまたはコントローラーを作成することです。これに関する提案はありますか?または、私が使いたいのはヘルパーですか?

また、データベース内の複数のテーブルからすべてのデータを取得する必要があります。すべてのデータ収集ロジックを 1 つのモデルで実行するのが最善ですか? それとも、ほとんどをメニュー コントローラー (またはコンポーネント) で実行し、各テーブルのモデルを使用しますか?

ありがとうございました、

ウォルター

4

6 に答える 6

7

モデルは、モデル化するテーブルからデータを取得して処理する必要があるため、そのモデルの各モデルのメニュー データを取得します。

コンポーネントは、複数のコントローラーで共有されるロジックを格納することを目的としているため、すべてのコントローラーで使用されるメニュー コンポーネントは、モデルからメニュー データを取得して組み合わせるコードを配置するのに適しているように思えます。

メニューは通常、ネストされたリストです。これがメニューにも当てはまる場合、このマークアップを出力する最も簡単な方法は、一度に 1 つのレベルを出力する再帰関数 (それ自体を呼び出す関数) です。そこに menu() メソッドを含むヘルパーを作成し、それをレイアウトから直接呼び出します。

于 2009-03-05T09:40:57.480 に答える
4

neilcrooksの回答に同意しますが、明確にするためにいくつか追加したいと思います。

ヘルパーと要素は非常に単純ですが、ヘルパーはもう少し堅牢にすることができます (少なくとも、それが私が考える方法です ;) )。したがって、ヘルパーを使用すると、その場でモデルの関連付けをバインドおよびバインド解除できます。これにより、(一時的に) 関連付けられたモデルからデータを取得できます。

個人的には太めのモデルと細身のコントローラーが好きなので、もし自分がこういう状況だったらヘルパーを使ってモデルを一時的にバインドすると思います。既存のモデルから取得する必要があるデータには、Model1->fetchMenuPart(...) タイプの呼び出しを介してアクセスします。

次に、レイアウト ファイルからヘルパーを呼び出すことができます。

于 2009-03-05T16:54:06.017 に答える
1

これは、インターネットでまさにこのことを検索しているときに発見した優れたソリューションです。

http://articles.classoutfit.com/cakephp-dynamic-navigation-bars/

于 2010-08-28T18:32:53.827 に答える
0

ここで良い記事を見つけました http://www.milestree.com/webdev/cakephp/dynamic_menu

于 2009-12-06T00:35:53.817 に答える
0

メニューのhtmlを保持する要素を作成してから、メニューをレイアウトにレンダリングすると思います。

echo $this->element('your menu');

動的にするには、おそらくコントローラーの配列として、メニューリンクを設定します。

于 2009-03-13T07:30:01.537 に答える