gpt4 book ai didi

php - 方法 "_getTable"不存在且未陷入 __call()

转载 作者:搜寻专家 更新时间:2023-10-31 21:46:38 25 4
gpt4 key购买 nike

所以这是我的 Controller 中的一个方法:

private $_tables = array();

private function _getTable($table)
{
if (!isset($this->_tables[$table])) {
include APPLICATION_PATH . '/modules/'
. $this->_request->getModuleName() . '/models/' . $table . '.php';
$this->_tables[$table] = new $table();
}
return $this->_tables[$table];
}

我在 Controller 操作中像这样使用它:

public function pageAction()
{
$request = $this->getRequest();
$pages = $this->_getTable('Pages');

$p = $pages->getSingle($request->getParam('id'));

// increment number of views in the database
// it only gets incremented when IP is not the same
// as last viewer's IP
$pages->viewIncrement($p->id);

$this->view->headTitle($p->title
. ' - Some cool title');
$this->view->p = $p;
}

在我的 PC 上测试时,它在本地主机上运行良好。它也适用于我的旧 Web 主机,但最近我已将我的 ZF 应用程序移至新的 Web 托管提供商,并且在查看某些页面时出现此错误:

Method "_getTable" does not exist and was not trapped in __call()

显示的就是这些,没有别的。虽然有些页面有效,但有些页面显示此错误,所以我完全迷路了。可能是什么问题?

所有必需的 PHP 扩展都已正确安装和配置,数据库连接工作正常(因为某些页面工作正常)。我真的不知道。如果至少错误更具描述性。

最佳答案

您确定不起作用的操作正在扩展实现此方法的自定义 Controller 吗?在这个例子中:

class MyController extends Zend_Controller_Action
{
protected functoin _getTable($table)
{
// implementation
}
}


class ProductController extends MyController
{
public function indexAction()
{
$this->_getTable('sometable'); // calls MyController::_getTable
}
}

您所有的 Controller 都在扩展 MyController

正如 Nazariy 所说,您需要将方法的可见性访问器设置为 protectedpublicprivate 访问器不允许您从扩展类中调用此方法。

编辑:既然你说你在每个 Controller 中实现了 _getTable 方法,那么你在实现时拼错方法名称的可能性有多大?也许像 __getTable(双下划线)或 _getTalbe(倒置字母)?

我知道这是一件基本的事情,但有时您过于专注于问题而没有看到共同的解决方案(这种情况经常发生在我身上)。

即使这不是问题,您也应该考虑创建您的基础 Controller 并从中扩展,以避免代码重复。

关于php - 方法 "_getTable"不存在且未陷入 __call(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2311302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com