- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
所以这是我的 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 所说,您需要将方法的可见性访问器设置为 protected
或 public
。 private
访问器不允许您从扩展类中调用此方法。
编辑:既然你说你在每个 Controller 中实现了 _getTable
方法,那么你在实现时拼错方法名称的可能性有多大?也许像 __getTable
(双下划线)或 _getTalbe
(倒置字母)?
我知道这是一件基本的事情,但有时您过于专注于问题而没有看到共同的解决方案(这种情况经常发生在我身上)。
即使这不是问题,您也应该考虑创建您的基础 Controller 并从中扩展,以避免代码重复。
关于php - 方法 "_getTable"不存在且未陷入 __call(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2311302/
我正在做一个项目,我想尝试“延迟加载”对象。 我已经使用魔术方法 __call($name, $arguments) 设置了一个简单的类。 我想要做的是传递 $arguments ,而不是作为数组,而
php 中的神奇函数 __call() 在类中使用。除了函数之外,还有类似的神奇函数吗?就像 __autoload() 用于函数一样。 例如这样的事情 function __call($name, $
我有这部分代码: class FTPClient { public function __construct() { $args_num=func_num_args();
我正在使用这两种魔术方法 _call 和 _callStatic用于我自己的 ORM/Activerow 之类的实现。它们主要用于捕获某些函数调用:__call 负责 getter 和 setter,
我正在尝试使用魔术函数进行重载 这是我的代码: 类文件1 class vLiteUser{ public function __call($methodname,$argume
我正在尝试使用魔术函数进行重载 这是我的代码: 类文件1 class vLiteUser{ public function __call($methodname,$argume
我正在使用 Mockery 通过 __call() 魔术方法模拟一个类。 问题是我的模拟对象有 __call() 与真实类的签名不同,我得到这个错误: ErrorException: Declarat
静态调用函数时是否可以使用__call魔术方法? 最佳答案 还没有,有建议的(现已有)__callStaticDocs我最后知道的管道中的方法。否则,__call 和其他 __ 魔法方法只能被对象实例
class a { public function f(&$ref1, &$ref2) { $ref1 = 'foo'; $ref2 = 'bar';
我有一个对象,它使用神奇的 __call 方法来调用不同对象的方法。 有时此方法将用于调用需要其一个或多个参数作为引用的方法。 从 php 5.3 开始,调用时按引用传递已被弃用,因此我不能依赖按引用
也许是个奇怪的问题,但是...我有一个神奇的 __call 方法,它返回某些类的实例,或者,如果没有这样的类,则在底层对象中调用相同的方法。 public function __call($name,
我正在处理的项目包含类似于 call_user_func(_array) 的包装器,它在执行前进行一些检查。其中一项检查是 method_exists(如果提供的第一个参数是类的实例,第二个是方法名称
我已经将我的项目文件移动到另一台服务器上,现在我在我的所有页面中都得到了这个,就像我错过了一些配置一样,有人知道我能做什么吗? 我正在使用 Zend Framework 1.11.11 ! 您需要哪些
我有两个模型: class Someinfo(models.Model): name = models.CharField(max_length=200) #something else class
在 PHP 中,即使方法不存在,您也可以使用“神奇”__call 函数检测何时调用该方法。 public function __call($methodName, $args) { // do
我编写了一个相当简单的延迟加载代理类,我过去曾在 http://blog.simonholywell.com/post/2072272471/logging-global-php-objects-la
我在一些 mvc 代码中使用 __call 魔法来生成一个可自动加载的表单框架,但我遇到了一个问题,我希望这里有人可以解决这个问题。 __call 魔法需要两个参数:$methodName 和 $ar
我编写了一个相当简单的延迟加载代理类,我过去曾在 http://blog.simonholywell.com/post/2072272471/logging-global-php-objects-la
假设我有以下代码: local t = {}; setmetatable(t, {__call=print}); t(3, 5, 7) 代替打印: 3 5 7 它打印: table: 0x
我认为一个简单的虚拟示例文件比长单词更能解释 t = {} t.__call = print t.__call(1) t(2) 根据documentation ,因为 t 是一个表,对 t 的调用,如
我是一名优秀的程序员,十分优秀!