我有这个 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. 从数据库加载一个 Navigation。2. 和 3. 调用 GalleryController。两次都是相同的控制器功能,但具有不同的参数。
现在,当我摆脱 1. 或两个画廊请求时,网站加载没有任何问题。
可能是那个 requestAction 占用了太多内存?但是,为什么 cakephp 启动无限循环对我来说仍然很奇怪。
firebug 的 net 选项卡没有显示任何可用信息。它只是向我尝试加载的特定站点说明了请求。
编辑 3:
感谢您的回复Nunser!我确实在 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. 对 GalleriesController 的 requestAction:即使我有一个非常基本的控制器,在调用时也只返回一个字符串
echo $this->requestAction('/galleries/sidegal');
<?php
class GalleriesController extends AppController {
var $name = 'Galleries';
var $helpers = array('Html', 'Form');
function sidegal() {
return 'testString';
}
}
?>
我得到一个循环。对此有什么想法吗?
编辑 4:Soooo,经过很长时间后,我开始尝试使用我的 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' 数组会导致问题。所以我把孩子这个词改成了孩子,它突然起作用了。解决方案如下:
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 的支持,非常感谢。