Fácil MVC

Exceção Capturada

1 - A classe referente ao módulo requisitado não foi encontrada!

Detalhes da pilha

#0 /home/babbelcom/public_html/controlador/Controlador.php(103): Controlador->_recuperarModulo() #1 /home/babbelcom/public_html/index.php(166): Controlador->despachar() #2 {main}

Exceção gerada no arquivo: /home/babbelcom/public_html/controlador/Controlador.php - Na linha: 142

Fonte do arquivo

001:
<?php
002:/**
003: * Arquivo do Controlador principal
004: * @package controlador
005: * @author Jose Berardo
006: * @author Joao Ricardo Bastos (UPDATE)
007: * @version 1.0
008: */
009:
010:/**
011: * Classe controladora principal do framework
012: * 
013: * @package controlador
014: */
015:class Controlador {
016:    
017:    /**
018:     * Instância única do Controlador.
019:     * Implementação do padrão Singleton
020:     *
021:     * @var Controlador $instancia
022:     */
023:    private static $instancia;
024:    
025:    /**
026:     * Qual módulo será carregado.
027:     *
028:     * @var Modulo $modulo
029:     */
030:    private $modulo;
031:    
032:    /**
033:     * Array onde serão registradas diversar informações.
034:     * Implementação do padrão de projeto Registry que 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:     *
043:     * Só será executado uma única vez por script.
044:     */
045:    private function __construct() {
046:        $this->registro = array();
047:    }
048:    
049:    /**
050:     * Método que recupera a instância da classe Controlador
051:     *
052:     * @return Controlador
053:     */
054:    public static function getInstancia() {
055:        if (!isset(self::$instancia)) {
056:            self::$instancia = new Controlador();
057:        }
058:        return self::$instancia;
059:    }
060:    
061:    /**
062:     * Método que busca uma informação registrada no controlador
063:     *
064:     * @param string $dado Nome do dado a ser buscado
065:     * @return mixed|boolean
066:     */
067:    public function get($dado) {
068:        if (isset($this->registro[$dado])) {
069:            return $this->registro[$dado];
070:        }
071:        return false;
072:    }
073:    
074:    /**
075:     * Método que registra informação no controlador
076:     *
077:     * @param string $nome
078:     * @param mixed $valor
079:     */
080:    public function set($nome$valor) {
081:        $this->registro[$nome] = $valor;
082:    }
083:    
084:    /**
085:     * Método que informa se o dado foi ou não registrado no controlador
086:     *
087:     * @param string $dado
088:     * @return boolean
089:     */
090:    public function existe($dado) {
091:        return array_key_exists($dado$this->registro);
092:    }
093:  
094:    /**
095:     * Método que dá sequência ao processamento do script.
096:     * Deverá chamar a classe do módulo correto
097:     *
098:     * @throws ControleException
099:     */
100:    public function despachar() {
101:    
102:        // Recuperando o módulo
103:        $modulo $this->_recuperarModulo();
104:        
105:        // Recuperando o método-ação
106:        $metodo $this->_recuperarAcao($modulo);
107:
108:        // Recuperando os parâmetros
109:        $parametros $this->_recuperarParametros($metodo);
110:        
111:        // Dando sequência ao script
112:        $acao $this->registro['acao'];
113:
114:        eval ("\$this->modulo->$acao($parametros);");
115:    }
116:
117:    /**
118:     * Método auxiliar que recupera o módulo requisitado
119:     *
120:     * @return Modulo
121:     */
122:    private function _recuperarModulo() {
123:        $modulo ucfirst($this->registro['modulo']);
124:        if (class_exists($modulo)) {
125:            
126:            /**
127:             * constante que guardará o nome do controlador que está sendo usado
128:             */
129:            define('CONTROLE'strtolower($modulo));
130:        
131:            /**
132:             * constante que guardará o nome do metodo que está sendo usado
133:             */
134:            if(isset($this->registro["acao"]) && !empty($this->registro["acao"])){
135:                define('METODO'strtolower($this->registro["acao"]));
136:            }else{
137:                define('METODO''index');                
138:            }
139:            
140:            $this->modulo = new $modulo();
141:        }else{
142:             throw new ControleException(ControleException::MODULO_INEXISTENTE);
143:        }
144:        return $modulo;
145:    }
146:
147:    /**
148:     * Método auxiliar que recupera uma instância da classe de reflexão ReflectionMethod referente ao  método-ação escolhido.
149:     *
150:     * @throws ControleException
151:     * @param Modulo $modulo
152:     * @return ReflectionMethod
153:     */
154:    private function _recuperarAcao($modulo) {
155:        try {
156:            // Verificando se existe o método-ação na classe encontrada
157:            $rc = new ReflectionClass($modulo);
158:            
159:            // Se não existir, a linha abaixo levantará uma ReflectionException
160:            if(!$this->registro["acao"]){
161:                $this->registro["acao"] = "index";
162:            }
163:            
164:            $metodo $rc->getMethod($this->registro['acao']);
165:            
166:            // Verificando se o método é visível
167:            if ($metodo->isPublic()) {
168:                return $metodo;
169:            }
170:            // Se não for vísivel, lenvantar ControleException
171:            else {
172:                throw new ControleException(ControleException::ACAO_PROTEGIDA);
173:            }
174:
175:        // Se houver ReflectionException, levantar ControleException
176:        } catch (ReflectionException $ex) {
177:            throw new ControleException(ControleException::ACAO_INEXISTENTE);
178:        }
179:    }
180:
181:    /**
182:     * Método auxiliar que recupera a string dos parâmetros para o self::despachar() poder dar sequência ao script.
183:     *
184:     * @throws ControleException
185:     * @param ReflectionMethod $metodo
186:     * @return string
187:     */
188:    private function _recuperarParametros($metodo) {
189:        if(isset($this->registro['parametros'])){
190:            if($this->registro['parametros'][(count($this->registro['parametros']) - 1)] == ""){
191:                array_pop($this->registro['parametros']);
192:            }
193:        }
194:
195:        $_SESSION['parametrosCananical'] = "";
196:        
197:        // Se o total de parâmetros suprir o número requerido
198://        if(isset($this->registro['parametros'])){
199:            if(@count($this->registro['parametros']) >= $metodo->getNumberOfRequiredParameters()) {
200:                
201:                // Recuperando os parâmetros registrados
202:                $parametros "'";
203:                if (isset($this->registro['parametros'])) {
204:                    
205:                    $_SESSION['parametrosCananical'] = implode("/"$this->registro['parametros']);
206:                    $parametros .= implode("', '"$this->registro['parametros']);
207:                }
208:                $parametros .= "'"209:                $parametros str_replace("''"""$parametros);
210:                
211:                return $parametros;
212:            } else {
213:                throw new ControleException(ControleException::PARAMETROS_INSUFICIENTES);
214:            }
215://        }
216:    }
217:
218:}
219: