从magento中的模型返回值



我正在学习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;
    }
}

在控制器中,我使用validate方法如下:

public function indexAction() {
    $this->loadLayout();
    $validator = Mage::getSingleton('test/validator');      
    if ($this->getRequest()->isPost()) {
        $validator->validate($this->getRequest()->getPost());
    }
    $this->renderLayout();
}

我调用块中的模型(从Mage_Core_Block_Template扩展),如下所示:

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数组,而不是一个对象。所以,当你在_construct中调用它时,getErrors返回一个空数组。

然而,在_construct被调用和你调用getError之间,一些关于系统状态的变化(可能是你试图验证的形式和/或信息被创建),所以一个新的调用

$this->validator->getErrors();

返回一个新的PHP数组,其中填充了错误消息。但是,下面的代码

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

只引用_construct期间填充的空数组。PHP数组不完全是对象——它们的行为更像是原始值。它将而不是自动更新自身。

最新更新