我最近从MVC3开始学习CakePHP,我不得不说这是一个非常颠簸的旅程。我设法解决了大部分初期问题,但我正在与一个我似乎无法解决的非常烦人的问题作斗争:
我的网站地址是localhost/hogeacts/<controller>/<action>
[或者我会想到的。]
有几个文件[我把它们剥离到必要的]涉及这个问题,所以对我来说是光着的:
控制器
class FactsController extends AppController
{
var $name = "Facts";
var $helpers = array('Javascript');
function index(){}
function latest($count)
{
// Uses a blank Layout so I get the JSON out of it
$this->layout = 'ajax';
// Model defined function, I still like fat models - skinny controllers
$facts = $this->Fact->getLatest($count);
$this->set('facts', $facts);
}
视图
<div id="content"></div>
<div id="scripts">
<?php echo $javascript->link('index', false) ?>
</div>
脚本
var index_obj = {
init: function() {
$.ajax({
url: "/facts/latest/2",
success: function(r)
{
$("#content").hide();
$("#content").html(r);
$("#content").fadeIn();
}
});
}
}
$(function() {
index_obj.init();
});
'部分视图'
<?php echo $this->element('factlist', array('facts' => $facts)); ?>
还有元素,但这只是用于显示,我真的不认为它与错误有任何关系。
现在,每当我访问localhost/hogeacts/facts
时,我得到正确的结果,一切似乎都按预期工作,javascript加载,调用调用元素的局部视图,它们显示在#content div中。到目前为止一切都那么好,但如果我访问localhost/hogeacts/facts/index
哪个应该做同样的事情,我得到:
错误
Missing Method in FactsController
Error: The action facts is not defined in controller FactsController
Error: Create FactsController::facts() in file: app\controllers\facts_controller.php.
<?php
class FactsController extends AppController {
var $name = 'Facts';
function facts() {
}
}
?>
我错过了什么?
答案 0 :(得分:1)
似乎在我的JavaScript中,当我应该调用url: "/facts/latest/2"
而不重新指定控制器时,我正在调用url: "latest/2"
。它将事实解释为一个动作而不是控制器,这就是我犯错误的原因