Php 从magento中的模型返回值

Php 从magento中的模型返回值,php,magento,model,Php,Magento,Model,我正在学习magento。我有一个模型,如下所示 class Kaushikamdotcom_Test_Model_Validator extends Varien_Object { private $errors = array(); public function validate($_post) { $validator = new Zend_Validate_NotEmpty(); $validator->setMessages(

我正在学习magento。我有一个模型,如下所示

class Kaushikamdotcom_Test_Model_Validator extends Varien_Object {

    private $errors = array();

    public function validate($_post) {
        $validator = new Zend_Validate_NotEmpty();
        $validator->setMessages(
            array(
                Zend_Validate_NotEmpty::IS_EMPTY => "This field cannot be empty"
            )
        );
        if(isset($_post['save'])) {
            if(! $validator->isValid($_post['title'])) {
                $this->errors['title'] = "This field cannot be empty";      
            }
            if(! $validator->isValid($_post['filename'])) {
                $this->errors['filename'] = "This field cannot be empty";
            }
        }
    }

    public function getErrors() {
        return $this->errors;
    }
}
在控制器中,我使用验证方法,如下所示:

public function indexAction() {
    $this->loadLayout();
    $validator = Mage::getSingleton('test/validator');      
    if ($this->getRequest()->isPost()) {
        $validator->validate($this->getRequest()->getPost());
    }
    $this->renderLayout();
}
我调用块中的模型(从Mage\u Core\u block\u模板扩展而来),如下所示:

public function _construct() {
   $this->validator = Mage::getSingleton('test/validator');
   $this->errors = $this->validator->getErrors();
   parent::_construct();
}
下面的代码给出了返回值

public function getError($_key) {
   $errors = $this->validator->getErrors();
   return (isset($errors[$_key])) ? $errors[$_key] : '';
}
如果使用以下代码,则不提供任何返回值,而使用上述代码

public function getError($_key) {
   return (isset($this->errors[$_key])) ? $this->errors[$_key] : '';
}

由于我们已经在构造函数中初始化了
$this->errors
,为什么它不返回任何值?

问题中没有足够的信息来提供具体的答案,但一般来说,它不会返回任何值,因为在填充数组时,
errors
数组没有传递的键

这只是猜测,但你的决定

$this->validator->getErrors();
看起来它返回的是一个PHP数组,而不是一个对象。因此,当您在
\u construct
中调用它时,
getErrors
返回一个空数组

但是,在调用
\u construct
和调用
getError
之间,系统状态发生了一些变化(可能是创建了您试图验证的表单和/或信息),因此需要对

$this->validator->getErrors();
返回一个新的PHP数组,其中填充了错误消息。但是,下面的代码

public function getError($_key) {
   return (isset($this->errors[$_key])) ? $this->errors[$_key] : '';
}

仅引用在构造期间填充的空数组。PHP数组并不完全是对象——它们的行为更像是原语值。它不会自动更新自身

构造前面只有一个下划线:_construct而不是u construct。它在这里工作,因为在Mage_Core_Block_模板中有一个同名函数。@BennyHill Magento块和模型对象有一个内部的
\u construct
方法,该方法的功能类似于PHP的本机构造函数。@kaushik,Zend_Debug::dump($this->errors)的输出是什么?它是否如预期的那样是一个数组,它是否包含可以搜索的键?kaushik-抱歉,我不熟悉Magento,我不知道_构造方法名称@AlanStorm-感谢您指出:-)当我将验证后的loadlayout放入控制器时,它可以工作。谢谢你的回答。我一直在读你的文章。他们太棒了。