Página não encontrada

Desculpe, mas a página que você procurou não foi encontrada.

Facil MVC

Excecao Capturada

2 - Acao selecionada nao foi declarada no modulo!

Detalhes da pilha

#0 /var/www/site/controlador/Controlador.php(116): Controlador->recuperarAcao('Sobre_orfeu') #1 /var/www/site/index.php(128): Controlador->despachar() #2 {main}

Excecao gerada no arquivo: /var/www/site/controlador/Controlador.php - Na linha: 220

Fonte do arquivo

001:
<?php
002:/**
003: * Arquivo do Controlador principal
004: * @package controlador
005: * @author André Smolianinoff
006: */
007:
008:session_start();
009:
010:/**
011: * Classe controladora principal do framework
012: * 
013: * @package controlador
014: */
015:class Controlador {
016:  /**
017:   * Instancia unica do Controlador.
018:   * Implementacao do padrao Singleton
019:   *
020:   * @var Controlador $instancia
021:   */
022:  private static $instancia;
023:
024:  /**
025:   * Qual modulo sera carregado.
026:   *
027:   * @var gModulo $modulo
028:  */
029:  private $modulo;
030:  
031:  protected $projeto "cafe_orfeu";
032:  protected $idioma null;
033:  protected $listaDeIdiomas = array("pt");
034:
035:  protected $moduleControllerURL "";
036:  protected $moduleFunctionURL "";
037:  protected $moduleParamsURL "";
038:  
039:  /**
040:   * Array onde serao registradas diversar informacoes.
041:   * Implementacao do padrao de projeto Registry que
042:   * sugere um local comum para repositorio de informacoes.
043:   *
044:   * @var array $registro
045:   */
046:  private $registro;
047:
048:  /**
049:   * Construtor privado do controlador.
050:   * So sera executado uma unica vez por script.
051:   *
052:   */
053:  private function __construct() {
054:    $this->registro = array();
055:  }
056:
057:  /**
058:   * Metodo que recupera a instancia da classe Controlador
059:   * @return Controlador
060:   */
061:  public static function getInstancia() {
062:    if (!isset(self::$instancia)) {
063:      self::$instancia = new Controlador();
064:    }
065:    return self::$instancia;
066:  }
067:  /**
068:   * Metodo que busca uma informacao
069:   * registrada no controlador
070:   *
071:   * @param string $dado Nome do dado a ser buscado
072:   * @return mixed|boolean
073:   */
074:  public function get($dado) {
075:    if (isset($this->registro[$dado])) {
076:      return $this->registro[$dado];
077:    }
078:    return false;
079:  }
080:  /**
081:   * Metodo que registra informacao no controlador
082:   *
083:   * @param string $nome
084:   * @param mixed $valor
085:   */
086:  public function set($nome$valor) {
087:    $this->registro[$nome] = $valor;
088:  }
089:  
090:  /**
091:   * Metodo que informa se o dado foi ou
092:   * nao registrado no controlador
093:   *
094:   * @param string $dado
095:   * @return boolean
096:   */
097:  public function existe($dado) {
098:    return array_key_exists($dado$this->registro);
099:  }
100:  
101:  /**
102:   * Metodo que da sequencia ao processamento do script.
103:   * Devera chamar a classe do modulo correto
104:   * @throws ControleException
105:   */
106:  public function despachar() {
107:
108:    $this->setVarModules();
109:
110:    $this->redirects301();
111:
112:    $this->idioma $this->getIdioma();
113:    // Recuperando o modulo
114:    $modulo $this->recuperarModulo();
115:    // Recuperando o metodo-acao
116:    $metodo $this->recuperarAcao($modulo);
117:    // Recuperando os parametros
118:    $parametros $this->recuperarParametros($metodo);
119:    // Dando sequencia ao script
120:    $acao $this->registro['acao'];
121:    eval ("\$this->modulo->$acao($parametros);");
122:  }
123:  
124:  /**
125:   * Metodo auxiliar que recupera o modulo requisitado
126:   *
127:   * @return gModulo
128:   */
129:  private function recuperarModulo() {
130:    try{
131:      $this->recuperarModuloIdioma();
132:        //$this->registro['modulo'] = str_replace("-","",$this->registro['modulo']);
133:        $modulo ucfirst($this->registro['modulo']);
134:        if (class_exists($modulo)) {
135:          $this->modulo = new $modulo();
136:        } else {
137:          
138:
139:          //Tentativa de achar módulos/ações alternativas, caso positiva transformá-los em paâmetros e pecorre o módulo/ação alternativa
140:          $paramentros_alternativo[] = $this->registro['modulo'];
141:          if(isset($this->registro['acao']) && !empty($this->registro['acao']) && $this->registro['acao'] != $this->registro['dados_ambiente']['controlador']['acao_default']){
142:            $paramentros_alternativo[] = $this->registro['acao'];
143:          }
144:          if(isset($this->registro['parametros'])){
145:            $aux implode(", "$this->registro['parametros']);
146:            $params explode(", "$aux);
147:            $paramentros_alternativo array_merge($paramentros_alternativo$params);
148:          }
149:          $this->registro['modulo'] = str_replace("-","",$this->registro['dados_ambiente']['controlador']['modulo_alternativo']);
150:          $modulo ucfirst($this->registro['modulo']);
151:          $this->registro['acao'] = str_replace("-","",$this->registro['dados_ambiente']['controlador']['acao_alternativa']);
152:          if (class_exists($modulo)) {
153:            $this->registro['parametros'] = $paramentros_alternativo;
154:            $this->modulo = new $modulo();
155:          } else {
156:            throw new ControleException(
157:                      ControleException::MODULO_INEXISTENTE);
158:          }
159:        }
160:        return $modulo;
161:    }catch( Exception $e ) {
162:       throw new ControleException(
163:                  ControleException::MODULO_INEXISTENTE);
164:    }
165:  }
166:  /**
167:   * Metodo auxiliar que recupera uma instancia da classe
168:   * de reflexao ReflectionMethod referente ao 
169:   * metodo-acao escolhido.
170:   * @throws ControleException
171:   * @param gModulo $modulo
172:   * @return ReflectionMethod
173:   */
174:  private function recuperarAcao($modulo) {
175:    try {
176:          // Verificando se existe o metodo-acao
177:        // na classe encontrada
178:      //$this->registro['acao'] = str_replace("-","",$this->registro['acao']);
179:          $rc = new ReflectionClass($modulo);
180:          // Se nao existir, a linha abaixo levantara
181:        // uma ReflectionException
182:          if(!$this->registro["acao"]){
183:              $this->registro["acao"] = "index";
184:          }
185:          $metodo $rc->getMethod($this->registro['acao']);          
186:          //var_dump($metodo); die();
187:        // Verificando se o metodo e visivel
188:        if ($metodo->isPublic()) {
189:      
190:           return $metodo;
191:          // Se nao for visivel, lenvantar ControleException
192:        } else {
193:           throw new ControleException(ControleException::ACAO_PROTEGIDA);
194:          }
195:        // Se houver ReflectionException, 
196:        // levantar ControleException
197:    } catch (ReflectionException $ex) {
198:      
199:      //Tentativa de achar módulos/ações alternativas, caso positiva transformá-los em paâmetros e pecorre o módulo/ação alternativa
200:      try{
201:        $acao $this->registro['acao'];
202:        $this->registro['acao'] = $this->registro['dados_ambiente']['controlador']['acao_alternativa'];
203:        $metodo $rc->getMethod($this->registro['acao']);        
204:        // Verificando se o metodo e visivel
205:        if ($metodo->isPublic()) {
206:            $paramentros_alternativo[] = $acao;
207:          if(isset($this->registro['parametros'])){
208:              $aux implode(", "$this->registro['parametros']);
209:              $params explode(", "$aux);
210:              $paramentros_alternativo array_merge($paramentros_alternativo$params);
211:            }
212:            $this->registro['parametros'] = $paramentros_alternativo;
213:          return $metodo;
214:            // Se nao for visivel, lenvantar ControleException
215:        } else {
216:            throw new  ControleException(ControleException::ACAO_INEXISTENTE);
217:        }
218:        
219:      }catch(ReflectionException $ex){                                
220:         throw new  ControleException(ControleException::ACAO_INEXISTENTE);
221:      }
222:    }
223:  }
224:  
225:  /**
226:   * Metodo auxiliar que recupera a string dos parametros
227:   * para o self::despachar() poder dar sequencia ao script.
228:   * @throws ControleException
229:   * @param ReflectionMethod $metodo
230:   * @return string
231:   */
232:  private function recuperarParametros($metodo) {
233:    
234:    // Se o total de parametros suprir o numero requerido
235:    if (@count($this->registro['parametros']) >=
236:      $metodo->getNumberOfRequiredParameters()) {
237:      // Recuperando os parametros registrados
238:      $parametros "'";
239:      if (isset($this->registro['parametros'])) {
240:        $parametros .= implode("', '"241:                       $this->registro['parametros']);
242:      }
243:      $parametros .= "'"244:      $parametros str_replace("''"""$parametros);
245:        
246:      return $parametros;
247:    } else {
248:      throw new ControleException(
249:            ControleException::PARAMETROS_INSUFICIENTES);
250:    }
251:  }
252:  
253:   protected function getIdioma(){
254:      if(!isset($_SESSION[$this->projeto."_idioma"])){
255:        return "pt";  
256:      }else{
257:      return $_SESSION[$this->projeto."_idioma"];
258:      }
259:    }
260:    
261:    protected function setIdioma($idioma="pt"){
262:    // atribui o valor do parametro a session
263:    $_SESSION[$this->projeto."_idioma"] = $idioma;
264:    $this->idioma $_SESSION[$this->projeto."_idioma"];
265:    }
266:    
267:     private function recuperarModuloIdioma() {
268:      if(!isset($_GET['url'])){
269:        $this->setIdioma("pt");
270:      }else{
271:        $url explode("/"$_GET['url']);
272:        $idioma "pt";
273:        if(in_array($url[0], $this->listaDeIdiomas)){
274:          $idioma $url[0];
275:        }
276:      if($idioma != "pt"){
277:        $this->setIdioma($idioma);
278:        $uri explode("/".$idioma."/"$_SERVER['REQUEST_URI']);
279:        if(isset($uri[1]) && strstr($uri[1], "/")){
280:          $uri explode("/"$uri[1]);
281:          if(isset($uri[0]) && !empty($uri[0])){
282:            $this->set("modulo"$uri[0]);
283:          }else if(isset($uri[1])){
284:            if(strstr($uri[1], "?")){
285:              $posGet strpos($uri[1], "?");
286:              $moduloSemGet substr($uri[1], 0$posGet);
287:              $this->set("modulo"$moduloSemGet);
288:            }else{
289:              $this->set("modulo"$uri[1]);
290:            }
291:          }else{
292:            $this->set("modulo"$this->registro['dados_ambiente']['controlador']['modulo_default']);
293:          }
294:          if(isset($uri[2])){
295:            //$this->set("acao", $uri[2]);
296:            $this->set("acao"$this->registro['dados_ambiente']['controlador']['acao_alternativa']);
297:          }else{
298:            $this->set("acao"$this->registro['dados_ambiente']['controlador']['acao_default']);
299:          }
300:          if(isset($uri[3])){
301:            for($i=3$i<count($uri); $i++){
302:              $params[] = $uri[$i]; 
303:            }
304:            $this->set("parametros"$params);
305:          }else{
306:            //unset($this->registro['parametros']);
307:          }
308:        }else{
309:          if(empty($uri[1])){
310:            $this->set("modulo"$this->registro['dados_ambiente']['controlador']['modulo_default']);
311:          }else{
312:            if(isset($uri[1])){
313:              if(strstr($uri[1], "?")){
314:                $posGet strpos($uri[1], "?");
315:                $moduloSemGet substr($uri[1], 0$posGet);
316:                $this->set("modulo"$moduloSemGet);
317:              }else{
318:                $this->set("modulo"$this->registro['acao']);
319:              }
320:            }else{
321:              $this->set("modulo"$this->registro['dados_ambiente']['controlador']['modulo_default']);
322:            }
323:            if(isset($uri[2])){
324:              $this->set("acao"$uri[2]);
325:            }else{
326:              $this->set("acao"$this->registro['dados_ambiente']['controlador']['acao_default']);
327:            }
328:            if(isset($uri[3])){
329:              for($i=3$i<count($uri); $i++){
330:                $params[] = $uri[$i]; 
331:              }
332:              $this->set("parametros"$params);
333:            }else{
334:              unset($this->registro['parametros']);
335:            }
336:          }
337:        }
338:        if(empty($this->registro['modulo'])){
339:          $this->set("modulo"$this->registro['dados_ambiente']['controlador']['modulo_default']);
340:        }
341:      }else{
342:        $this->setIdioma("pt");
343:      }
344:      }
345:     }
346:    
347:  
348:    protected function setVarModules(){
349:    
350:      $this->moduleControllerURL self::getInstancia()->get('modulo');
351:      $this->moduleFunctionURL self::getInstancia()->get('acao');
352:      $this->moduleParamsURL self::getInstancia()->get('parametros');
353:      
354:    } 
355:
356:
357:    protected function redirects301(){     
358:
359:      if(isset($this->moduleControllerURL) && strtolower($this->moduleControllerURL) == "para_seu_negocio" && !empty($this->moduleFunctionURL) && $this->moduleFunctionURL  == "vendas@cafeorfeu.com.br"){                          
360:
361:        header("HTTP/1.1 301 Moved Permanently");
362:        header("Location: http://site.cafeorfeu.com.br/para_seu_negocio"); 
363:
364:      }
365:
366:      if(isset($this->moduleControllerURL) && strtolower($this->moduleControllerURL) == "onde_encontrar" && !empty($this->moduleFunctionURL) && $this->moduleFunctionURL == "vendas@cafeorfeu.com.br"){                      
367:
368:          header("HTTP/1.1 301 Moved Permanently");
369:          header("Location: http://site.cafeorfeu.com.br/onde_encontrar");            
370:
371:      }
372:
373:      if(isset($this->moduleControllerURL) && strtolower($this->moduleControllerURL) == "nossos_produtos" && !empty($this->moduleFunctionURL) && $this->moduleFunctionURL == "vendas@cafeorfeu.com.br"){              
374:
375:          header("HTTP/1.1 301 Moved Permanently");
376:          header("Location: http://loja.cafeorfeu.com.br/nossos-cafes");            
377:
378:      }      
379:      
380:      
381:    }
382:  
383:  /**
384:   * Metodo utilitario chamado pelo contrutor
385:   * para recuperar os dados $_POST e $_FILES
386:   */
387:  private function capturarDados() {
388:    // Capturando dados de requisicoes POST
389:    $this->dados $_POST;
390:    // Capturando arquivos enviados
391:    $this->arquivos $_FILES;
392:  }
393:}
394:?>