我正面临一条错误消息:
Fatal error: Call to a member function isUploaded() on a non-object in /www/htdocs/nether/http/123factuur/application/controllers/Helpers/ImportXls.php on line 30
由于我正在调用对象中不存在的方法,因此弹出此错误消息。但我确信isUploaded()确实存在。
函数isUploaded
在类Zend_Form_Element_File
中定义。要检查$xls
是Zend_Form_Element_File
的实例,我是否调试了$xls
变量。
Zend_Debug::dump($xls); //OUTPUT: object(Zend_Form_Element_File)#141 (29) {
exit;
第30行看起来像这样:
if ( $xls->isUploaded() ) {
我做的第一件事就是检查表达式值。
Zend_Debug::dump($xls->isUploaded()); //the output was: bool(true)
exit;
然后我检查了$xls
变量的类型。
echo gettype($xls); //the output was object
exit;
我不完全理解错误。也许,我没有解释错误消息,因为它应该被解释。无论如何,需要援助。
代码段: 在控制器:
public function importAction() {
$form = $this->getImportFrom();
$this->view->form = $form;
$this->view->allowedHeaders = array();
$this->importInvoices($form);
$this->importInvoiceArticles($form);
$this->importInvoiceServices($form);
foreach ($this->_lookupIssues as $issue) {
$this->_flashMessenger->addMessage($issue);
}
}
public function importInvoiceArticles($form) {
$model = 'Invoice_article';
$config = Zim_Properties::getConfig($model);
$Model = new Zim_Model($model, $config->model);
$headerMapping = array_flip(array_intersect_key($Model->getHeaders(true), array_flip($this->_allowedArticleImportHeaders)));
$this->getHelper('ImportXls')->handleImport($form, $headerMapping, $Model->getName(), $this->_modelName, null, null, array($this, 'saveImportedArticleData'), 'invoiceArticle');
}
帮助者:
class F2g_Helper_ImportXls extends Zend_Controller_Action_Helper_Abstract {
public function handleImport($form, $allowedHeaders, $tableName, $modelName, $onDuplicateImportCallback, $importMethod = null, $saveMethod = null, $name = 'xls') {
if ($this->getRequest()->isPost()) {
$xls = $form->getElement($name);
if ( $xls->isUploaded() ) {
//some code
}
}
}
}
答案 0 :(得分:3)
我非常确定handleImport()方法被多次调用,可能在循环内,可能具有$ name参数的不同值。你回调变量并死掉它以便调试它,如果$ name的提供值在第一次运行时是正确的 - 这完全有效 - 但是因为你杀了脚本 - 你不能得到关于后续调用的任何调试信息。
在调用之前确保对象具有该方法。您可以调用method_exists()或instanceof来进行确定。
代码:
if ($xls instanceof Zend_Form_Element_File) {
// object of correct type - continue (preferred version)
}
// or
if (method_exists($xls, 'isUploaded')) {
// avoids the error, but does not guarantee that
// other methods of the Zend_Form_Element_File exist
}
答案 1 :(得分:1)
将此添加到您的条件中以避免致命错误:
if ( !empty($xls) && is_object($xls) && $xls->isUploaded() ) {
// do your job with serenity :)
}