/** * (@fake: public static) * * @override * @throws IllegalArgumentException * */ public function __get($name) { $attr = "_{$name}"; if (property_exists($this, $attr)) { return $this->{$attr}; } parent::__get($name); // @codeCoverageIgnoreStart }
/** * acesso as referencias dos objetos ou à 'saf' ou à 'bootstrap' * * @example SIALApplication::__get * @code * <?php * use \br\gov\sial\core\exception\IllegalArgumentException; * * try { * # formato geral: $app->__VAR_NAME__ * * ... * # recupera referencia do objeto SIAL Appllication Form (SAF) * $saf = $app->saf; * * ... * # recupera referencia do objeto Bootstrat * $bootstrap = $app->bootstrap; * * } catch (IllegalArgumentException $iexc) { * # tratar illegal exception conforme necessidade * } * * # recupera referencia do objeto Bootstrap * $bootstrap = $app->bootstrap; * ?> * @endcode * * @param string $name informa o nome da referência que se deseja obter (ou 'saf' ou 'bootstrap') * @throws \br\gov\sial\core\exception\IllegalArgumentException lançada sempre que '__VAR_NAME__' não tiver disponível * */ public function __get($name) { # libera acesso somente leitura as objetos: switch ($name) { case 'saf': return $this->_isaf; case 'bootstrap': return $this->_bootstrap; } parent::__get($name); }
/** * carrega as constante do sistema/subsistema/modulo informado deve ser informado o namespace do * sistema/subsistema/modulo onde sera encontrado a pasta com as constantes e nao o local exatato da pasta de * constantes. * * @param string $namespace * @param boolean $isModule * */ public function loadModuleConstant($namespace, $isModule = FALSE) { # motivo de nao colocar: end(explode(parent::NAMESPACE_SEPARATOR, $namespace)); # eh que o php fica lancado 'Only variables should be passed by reference' $arr = explode(parent::NAMESPACE_SEPARATOR, $namespace); $file = end($arr); $namespace = parent::realpathFromNamespace($namespace) . DIRECTORY_SEPARATOR . 'constant' . DIRECTORY_SEPARATOR . "{$file}.php"; if (TRUE == $isModule) { $namespace = implode(explode(DIRECTORY_SEPARATOR . $file, $namespace, 2)); } $this->loadIfExists($namespace); }
/** * @code * <?php * * # chamada pelo contexto de objeto * $this->genId(); * * # chamada pelo contexto da classe * ElementAbstract::genId(); * * ?> * @endcode * * @param string[] $config * @return string */ public function genId(\stdClass $config = NULL) { $ident = parent::safeToggle($config, 'id', NULL); if (!isset($config->id)) { $ident = 'rndID_' . self::$_seed++; } return $ident; }
/** * Registra o Annotation para o ValueObject. * @example BusinessAbstract::registerAnnotation * @code * <?php * ... * $valueObject = FoobarValueObject::factory(); * $business->registerAnnotation($valueObject->annotation()); * ?> * @endcode * @param string $namespace * @return ModelAbstract */ public function registerAnnotation($namespace) { $namespace = parent::erReplace(array('mvcb\\business' => 'valueObject', 'mvcb\\controller' => 'valueObject', 'mvcb\\model' => 'valueObject', 'Model$' => 'ValueObject', 'Business$' => 'ValueObject', 'Controller$' => 'ValueObject'), $namespace); $this->getModel()->registerAnnotation($namespace); }
/** * Cria e retorna um objeto data. * * @param string $date * @param DATE_PARAM $formatIn * @param DATE_PARAM $formatOut * @return br\gov\sial\core\lang\Date * */ public static function factory($date = NULL, $formatIn = NULL, $formatOut = NULL) { $date = $date ?: date('Y-m-d H:i:s'); $time = explode(' ', $date, 2); $date = current($time); $time = next($time); if (NULL == $formatIn) { if ('/' == $date[2]) { $formatIn = self::FORMAT_PT_BR; } if ('-' == $date[4]) { $formatIn = self::FORMAT_EN; } } $formatIn = parent::toggle($formatIn, self::$_defaultOutputType); self::$_defaultOutputType = parent::toggle($formatOut, self::$_defaultOutputType); return NULL == $date ? self::_factoryCreateCurrentDate() : self::_factoryCreateDate($date, $formatIn, $time); }
/** * verifica a existencia do attr na anotacao, tambem, fica reponsavel por * verificar se o attr possui referencia para outro ValueObject, foreignKey. * caso o attr solicitado nao exista, também, na anotacao, uma exception * sera lancada. * * @param string $attr * @throws ValueObjectException * */ public function __get($attr) { $value = NULL; $getter = $this->getter($attr); # prioriza o uso do getter if ($getter) { $value = $this->{$getter}(); } else { $translatendAttr = self::attrTranslateName($attr); # note que se o attr nao existe, a superclasse lancara um # exception, tal qual ja eh feito if (!isset($this->{$translatendAttr})) { parent::__get($attr); } $value = $this->{$translatendAttr}; # verifica se o attr em questao trata-se de uma chave-estrangeira $attrAnnon = $this->annotation()->load()->attrs; $foreignKey = isset($attrAnnon->{$attr}->foreignKey) ? $attrAnnon->{$attr}->foreignKey : NULL; if ($foreignKey) { # converte namespace de valueObject para o namespace capaz # de recuperar os dados da chave-estrangeira $namespace = explode('valueObject', $foreignKey->refer); $namespace[1] = str_replace('ValueObject', 'Business', $namespace[1]); $namespace[0] .= 'mvcb' . self::NAMESPACE_SEPARATOR; $namespace = implode('business', $namespace); $value = $namespace::factory()->find($value); } } return $value; }
/** * Intercepta chamada a método inexistente e redireciona para funcionalidades pre-definidas. * * @param string $name * @param string[] $arguments * @return ModelAbstract * */ public function __call($name, array $arguments = array()) { # registra ordenacao de pesquisa if ('orderByList' == $name) { $this->_registerOrderByList($arguments); } elseif ('orderBy' == substr($name, 0, 7)) { $this->_registerOrderBy(substr($name, 7), current($arguments)); } else { parent::__call($name, $arguments); } return $this; }