私はこの CakePHP アプリ (バージョン 1.2) を持っています。これは、特定のページをロードするときに内部サーバー エラーを生成する奇妙な動作を開始しました。
次に、ローカルの Mamp 環境に xDebug をインストールしたところ、このページにアクセスするとアプリがループすることがわかりました。残念ながら、これを解釈する方法がわかりません。おそらく、私を助けて方向性を示すことができます (ここでコードを公開する前に)。
どうもありがとう!
編集 - 写真の 14 行目は、次の要求を含むファイル mmenu.ctp を参照しています。
$menus = $this->requestAction('/menus/reto');
MenusController には、次のアクションが含まれます。
クラス
MenusController extends AppController {
var $name = 'Menus';
var $helpers = array('Html', 'Form');
function reto(){
$this->Menu->recursive = 2;
return $this->Menu->find('all', array('conditions' => array("parent_id" => 0), 'order' => 'Menu.order asc'));
}
...
}
それが役立つことを願っています。
編集 2: わかりました、さらにテストを行いました。ロードされるページには、3 つの requestActions があります。1. データベースからナビゲーションをロードします。2. と 3. は GalleryController を呼び出します。どちらの場合も同じコントローラー関数ですが、引数が異なります。
1 つまたは 2 つのギャラリー リクエストを削除すると、サイトは問題なく読み込まれます。
requestAction がメモリを使いすぎているのではないでしょうか? しかし、cakephp が無限ループを開始する理由は、私にはまだ奇妙です。
firebug の net タブには、使用可能な情報が表示されませんでした。私が読み込もうとしている特定のサイトへのリクエストが記載されているだけです。
編集3:
ナンサーさん、お返事ありがとうございます!beforeRender 関数内の app_controler ファイルにメニュー関数を追加しました。
$this->loadModel('Menu');
if (!isset($this->viewVars['mainMenu']))
{
$this->set(
'mainMenu', $this->Menu->find('all',
array('conditions' => array("parent_id" => 0), 'recursive' => '2', 'order' => 'Menu.order asc')
)
);
}
ただし、recursive=2 は削除しませんでした。メニュー テーブルから、たとえば URL などの追加情報が保存されているコンテンツ テーブルに結合する必要があるためです。結果の配列は次のようになります。
[0] => Array
(
[Menu] => Array
(
...
)
[Content] => Array
(
[url] => urlhere
...
)
[Child] => Array
(
[0] => Array
(
[Content] => Array
(
[url] => url here...
)
)
...
)
)
recursive=-1 でこれを取得する方法がわかりません。Containableを調べましたが、うまくいきませんでした。
とにかく、もっと興味深いのは 2. と 3. の requestAction です。
echo $this->requestAction('/galleries/sidegal');
<?php
class GalleriesController extends AppController {
var $name = 'Galleries';
var $helpers = array('Html', 'Form');
function sidegal() {
return 'testString';
}
}
?>
私はループを取得します。これに関するアイデアはありますか?
編集 4: すっごく長い時間の後、GalleryModel を試し始めました。最初は次のようになりました。
var $hasMany = array(
'Gimage' => array(
'className' => 'Gimage',
'foreignKey' => 'gallery_id',
'dependent' => true,
'conditions' => '',
'fields' => '',
'order' => 'Gimage.order asc',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => '' ),
'Child' => array('className' => 'Gallery',
'foreignKey' => 'parent_id',
'order' => 'Child.order asc'
),
);
そのとき、「子」配列が問題を引き起こすことに気付きました。そこで、Child という単語を Children に変更すると、突然機能しました。解決策は次のとおりです。
var $hasMany = array(
'Gimage' => array(
'className' => 'Gimage',
'foreignKey' => 'gallery_id',
'dependent' => true,
'conditions' => '',
'fields' => '',
'order' => 'Gimage.order asc',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => '' ),
'Children' => array('className' => 'Gallery',
'foreignKey' => 'parent_id',
'order' => 'Children.order asc'
),
);
今はそれが機能することを嬉しく思います。Nunser のサポートに感謝します。