示例#1
0
 /**
  * Add a dependency where the value in one field can change settings for the other field
  *
  * Dependencies are processed in the order they are added
  *
  * @param mixed $dependency \MUtil\Model\Dependency\DependencyInterface or string or array to create one
  * @param mixed $dependsOn Optional string field name or array of fields that do the changing
  * @param array $effects Optional array of field => array(setting) of settings are changed, array of whatever
  * the dependency accepts as an addEffects() argument
  * @param mixed $key A key to identify the specific dependency.
  * @return int The actual key used.
  */
 public function addDependency($dependency, $dependsOn = null, array $effects = null, $key = null)
 {
     if (!$dependency instanceof DependencyInterface) {
         $loader = \MUtil_Model::getDependencyLoader();
         if (is_array($dependency)) {
             $parameters = $dependency;
             $className = array_shift($parameters);
         } else {
             $parameters = array();
             $className = (string) $dependency;
         }
         $dependency = $loader->createClass($className, $parameters);
     }
     if (null !== $dependsOn) {
         $dependency->addDependsOn($dependsOn);
     }
     if (is_array($effects)) {
         $dependency->addEffecteds($effects);
     }
     if (null === $key) {
         $keys = array_filter(array_keys($this->_model_dependencies), 'is_int');
         $key = ($keys ? max($keys) : 0) + 10;
     }
     $dependency->applyToModel($this);
     $this->_model_dependencies[$key] = $dependency;
     return $key;
 }