DBからデータを抽出してメインメニューとサブメニューを生成するfile/class :: method(HelperAdmin.php / HelperAdmin :: menuItem())があります。メニューの生成後にこのデータを取得する必要がありますが、このメソッドを2回呼び出したくありません。そこで、HelperAdminクラスに静的配列を作成しました。次のようになります。
class HelperAdmin {
static $arrMenuItems;
...
public static function menuItem() {
....get $items....
self::$arrMenuItems = $items;
return $items;
}
....
}
しかし、ここに問題があります。もう一度METHODを呼び出すと、次のようになります。
$items=HelperAdmin::menuItem();
...データを取得できます。一方、静的配列を介してデータを取得しようとすると、次のようになります。
$items=HelperAdmin::$arrMenuItems;
...nullを返すだけです。
私はいくつかのアイデアを見たいと思っています。結局のところ、ここで(Yiiアーキテクチャの観点から)静的変数を使用することが最善の解決策ではないとあなたの意見があれば、私はあなたのアドバイスをもらいたいです!
@ bool.dev:OK、次のスキームを想像してください:1.メインファイルがあります
/modules/admin/views/layouts/admin.php
これは本質的にバックエンドテンプレートです。2.ここにヘルパーがいます:
/modules/admin/components/HelperAdmin.php
これには、*クラスHelperAdmin、* menuItem()メソッド、および*クラス静的配列$arrMenuItemsが含まれます。HelperAdmin :: menuItem()を呼び出すことによって返されるこのARRAYのコンテンツ。HelperAdminクラスからデータを2回取得する必要があります。1。admin.phpでメニューを生成している間。2.変数$contentで取得するコンテンツの一部として、このファイルに配置します。$ contentは、別のファイルで生成されます。
/modules/admin/views/generator/index.php
ご覧のとおり、このページは、テンプレートファイル/modules/admin/views/layouts/admin.phpと/modules/admin/views/generator/index.phpから取得したデータ($ content)から合成されます。まず、メニューのデータを取得します。
HelperAdmin::menuItem();
$items=HelperAdmin::$arrMenuItems;
$this->widget(....
'items'=>$items,
...),
));
それで大丈夫です。この後、静的配列$arrMenuItemsがHelperAdminですでに生成されていることに注意してください。次に、ファイル/modules/admin/views/generator/index.phpで同じデータ(以前に生成された$ arrMenuItems)を取得して、$contentとして配置しようとしています。
$items=HelperAdmin::$arrMenuItems
そして、ここで私は上記のようにそれを得ることができません。さて、それが状況をより明確にしたことを願っています(?)。