#0 /home/storage/2/ea/99/inter3/public_html/bienalinternacionaldearquitetura.com/controlador/Controlador.php(100): Controlador->recuperarModulo()
#1 /home/storage/2/ea/99/inter3/public_html/bienalinternacionaldearquitetura.com/index.php(129): Controlador->despachar()
#2 {main}
001:
<?php
002:/**
003: * Arquivo do Controlador principal
004: * @package controlador
005: * @author José Berardo
006: * @author Túlio Carvalho
007: * @version 1.0
008: */
009:
010:/**
011: * Classe controladora principal do framework
012: *
013: * @package controlador
014: */
015:class Controlador {
016: /**
017: * Inst�ncia �nica do Controlador.
018: * Implementa��o do padr�o Singleton
019: *
020: * @var Controlador $instancia
021: */
022: private static $instancia;
023:
024: /**
025: * Qual m�dulo ser� carregado.
026: *
027: * @var Modulo $modulo
028: */
029: private $modulo;
030:
031: /**
032: * Array onde ser�o registradas diversar informa��es.
033: * Implementa��o do padr�o de projeto Registry que
034: * sugere um local comum para reposit�rio de informa��es.
035: *
036: * @var array $registro
037: */
038: private $registro;
039:
040: /**
041: * Construtor privado do controlador.
042: * S� ser� executado uma �nica vez por script.
043: *
044: */
045: private function __construct() {
046: $this->registro = array();
047: }
048:
049: /**
050: * M�todo que recupera a inst�ncia da classe Controlador
051: * @return Controlador
052: */
053: public static function getInstancia() {
054: if (!isset(self::$instancia)) {
055: self::$instancia = new Controlador();
056: }
057: return self::$instancia;
058: }
059: /**
060: * M�todo que busca uma informa��o
061: * registrada no controlador
062: *
063: * @param string $dado Nome do dado a ser buscado
064: * @return mixed|boolean
065: */
066: public function get($dado) {
067: if (isset($this->registro[$dado])) {
068: return $this->registro[$dado];
069: }
070: return false;
071: }
072: /**
073: * M�todo que registra informa��o no controlador
074: *
075: * @param string $nome
076: * @param mixed $valor
077: */
078: public function set($nome, $valor) {
079: $this->registro[$nome] = $valor;
080: }
081:
082: /**
083: * M�todo que informa se o dado foi ou
084: * n�o registrado no controlador
085: *
086: * @param string $dado
087: * @return boolean
088: */
089: public function existe($dado) {
090: return array_key_exists($dado, $this->registro);
091: }
092:
093: /**
094: * M�todo que d� sequ�ncia ao processamento do script.
095: * Dever� chamar a classe do m�dulo correto
096: * @throws ControleException
097: */
098: public function despachar() {
099: // Recuperando o m�dulo
100: $modulo = $this->recuperarModulo();
101: // Recuperando o m�todo-a��o
102: $metodo = $this->recuperarAcao($modulo);
103: // Recuperando os par�metros
104: $parametros = $this->recuperarParametros($metodo);
105: // Dando sequ�ncia ao script
106: $acao = $this->registro['acao'];
107: eval ("\$this->modulo->$acao($parametros);");
108: }
109:
110: /**
111: * M�todo auxiliar que recupera o m�dulo requisitado
112: *
113: * @return Modulo
114: */
115: private function recuperarModulo() {
116: $modulo = ucfirst($this->registro['modulo']);
117: if (class_exists($modulo)) {
118: $this->modulo = new $modulo();
119: } else {
120: throw new ControleException(
121: ControleException::MODULO_INEXISTENTE);
122: }
123: return $modulo;
124: }
125: /**
126: * M�todo auxiliar que recupera uma inst�ncia da classe
127: * de reflex�o ReflectionMethod referente ao
128: * m�todo-a��o escolhido.
129: * @throws ControleException
130: * @param Modulo $modulo
131: * @return ReflectionMethod
132: */
133: private function recuperarAcao($modulo) {
134: try {
135: // Verificando se existe o m�todo-a��o
136: // na classe encontrada
137: $rc = new ReflectionClass($modulo);
138: // Se n�o existir, a linha abaixo levantar�
139: // uma ReflectionException
140: $metodo = $rc->getMethod($this->registro['acao']);
141: // Verificando se o m�todo � vis�vel
142: if ($metodo->isPublic()) {
143: return $metodo;
144: // Se n�o for v�sivel, lenvantar ControleException
145: } else {
146: throw new
147: ControleException(ControleException::ACAO_PROTEGIDA);
148: }
149: // Se houver ReflectionException,
150: // levantar ControleException
151: } catch (ReflectionException $ex) {
152: throw new
153: ControleException(ControleException::ACAO_INEXISTENTE);
154: }
155: }
156:
157: /**
158: * M�todo auxiliar que recupera a string dos par�metros
159: * para o self::despachar() poder dar sequ�ncia ao script.
160: * @throws ControleException
161: * @param ReflectionMethod $metodo
162: * @return string
163: */
164: private function recuperarParametros($metodo) {
165: // Se o total de par�metros suprir o n�mero requerido
166: if (@count($this->registro['parametros']) >=
167: $metodo->getNumberOfRequiredParameters()) {
168: // Recuperando os par�metros registrados
169: $parametros = "'";
170: if (isset($this->registro['parametros'])) {
171: $parametros .= implode("', '",
172: $this->registro['parametros']);
173: }
174: $parametros .= "'";
175: $parametros = str_replace("''", "", $parametros);
176:
177: return $parametros;
178: } else {
179: throw new ControleException(
180: ControleException::PARAMETROS_INSUFICIENTES);
181: }
182: }
183:
184: /**
185: * M�todo utilitario chamado pelo contrutor
186: * para recuperar os dados $_POST e $_FILES
187: */
188: private function capturarDados() {
189: // Capturando dados de requisi��es POST
190: $this->dados = $_POST;
191: // Capturando arquivos enviados
192: $this->arquivos = $_FILES;
193: }
194:}
195:?>