Fácil MVC

Exceção Capturada

2 - Ação selecionada não foi declarada no módulo!

Detalhes da pilha

#0 /home/dotassessoria/dotassessoria.com.br/controlador/lib/Controlador.php(102): Controlador->recuperarAcao('Principal') #1 /home/dotassessoria/dotassessoria.com.br/index.php(118): Controlador->despachar() #2 {main}

Exceção gerada no arquivo: /home/dotassessoria/dotassessoria.com.br/controlador/lib/Controlador.php - Na linha: 152

Fonte do arquivo

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:  /**
112:   * Método auxiliar que recupera o módulo requisitado
113:   *
114:   * @return Modulo
115:   */
116:  private function recuperarModulo(){
117:    $modulo ucfirst($this->registro['modulo']);
118:    if (class_exists($modulo)) {
119:      $this->modulo = new $modulo();
120:    } else {
121:      throw new ControleException(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 visivel, lenvantar ControleException
145:      } else {
146:        throw new ControleException(ControleException::ACAO_PROTEGIDA);
147:      }
148:      // Se houver ReflectionException,
149:      // levantar ControleException
150:    } catch (ReflectionException $ex) {
151:      throw new
152:       ControleException(ControleException::ACAO_INEXISTENTE);
153:    }
154:  }
155:
156:  /**
157:   * Método auxiliar que recupera a string dos parâmetros
158:   * para o self::despachar() poder dar sequência ao script.
159:   * @throws ControleException
160:   * @param ReflectionMethod $metodo
161:   * @return string
162:   */
163:  private function recuperarParametros($metodo) {
164:    // Se o total de parâmetros suprir o número requerido
165:    if (@count($this->registro['parametros']) >= $metodo->getNumberOfRequiredParameters()) {
166:      // Recuperando os parâmetros registrados
167:      $parametros "'";
168:      if (isset($this->registro['parametros'])) {
169:        $parametros .= implode("', '",$this->registro['parametros']);
170:      }
171:      $parametros .= "'";
172:      $parametros str_replace("''"""$parametros);
173:
174:      return $parametros;
175:    } else {
176:      throw new ControleException(
177:            ControleException::PARAMETROS_INSUFICIENTES);
178:    }
179:  }
180:
181:  /**
182:   * Método utilitario chamado pelo contrutor
183:   * para recuperar os dados $_POST e $_FILES
184:   */
185:  private function capturarDados() {
186:    // Capturando dados de requisições POST
187:    $this->dados $_POST;
188:    // Capturando arquivos enviados
189:    $this->arquivos $_FILES;
190:  }
191:}
192:?>