Utiliser la Magie des Méthodes du module personnalisé
-
12-12-2019 - |
Question
Je veux faire de la Magie Méthodes dans mon Module Personnalisé.
J'ai créé un nouveau Modèle avec différentes variables membres (variable1, variable2) et je veux obtenir comme getVariable1.
Comment ai-je besoin de déclarer les variables de membre?Puis-je les mettre sur le privé?De quoi d'autre ai-je raté?
J'ai lu quelque part j'ai besoin de les enregistrer dans $_data['variable1']
, mais cela ne fonctionne pas.
Merci!
La solution
La magie des méthodes sont mises en œuvre par Varien_Object
classe.
public function __call($method, $args)
{
switch (substr($method, 0, 3)) {
case 'get' :
//Varien_Profiler::start('GETTER: '.get_class($this).'::'.$method);
$key = $this->_underscore(substr($method,3));
$data = $this->getData($key, isset($args[0]) ? $args[0] : null);
//Varien_Profiler::stop('GETTER: '.get_class($this).'::'.$method);
return $data;
case 'set' :
//Varien_Profiler::start('SETTER: '.get_class($this).'::'.$method);
$key = $this->_underscore(substr($method,3));
$result = $this->setData($key, isset($args[0]) ? $args[0] : null);
//Varien_Profiler::stop('SETTER: '.get_class($this).'::'.$method);
return $result;
case 'uns' :
//Varien_Profiler::start('UNS: '.get_class($this).'::'.$method);
$key = $this->_underscore(substr($method,3));
$result = $this->unsetData($key);
//Varien_Profiler::stop('UNS: '.get_class($this).'::'.$method);
return $result;
case 'has' :
//Varien_Profiler::start('HAS: '.get_class($this).'::'.$method);
$key = $this->_underscore(substr($method,3));
//Varien_Profiler::stop('HAS: '.get_class($this).'::'.$method);
return isset($this->_data[$key]);
}
throw new Varien_Exception("Invalid method ".get_class($this)."::".$method."(".print_r($args,1).")");
}
Vous aurez besoin de prolonger la classe ou une autre classe qui s'étend de Varien_Object
comme Mage_Core_Model_Abstract
par exemple.Vous n'êtes pas obligé de définir des variables ou des méthodes dans votre modèle en tant que votre méthode, on commence par get
, set
, uns
et has
, c'est en supposant que vous voulez qu'ils fonctionnent comme les méthodes magiques.
De sorte que vous pouvez écrire quelque chose comme ceci:
$model = Mage::getModel('namespace_module/sample');
$model->setSomeData('Hello');
echo $model->getSomeData();
Si vous ne Zend_Debug::dump($model);
vous remarquerez que vos données sont stockées dans _data
la propriété, qui est déclarée dans Varien_Object
classe.
Exemple:
object(Namespace_Module_Model_Sample)#128 (7) {
["_data":protected] => array(1) {
["some_data"] => string(5) "Hello"
}
["_hasDataChanges":protected] => bool(true)
["_origData":protected] => NULL
["_idFieldName":protected] => NULL
["_isDeleted":protected] => bool(false)
["_oldFieldsMap":protected] => array(0) {
}
["_syncFieldsMap":protected] => array(0) {
}
}