Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] problemas con namespace y use

Estas en el tema de problemas con namespace y use en el foro de PHP en Foros del Web. Hola a todos, tengo una consulta para hacer, resulta que me da el sgte error: Fatal error: Class 'App\Controller' not found in /var/www/html/amnesia_1/Controller/MainController.php on line ...
  #1 (permalink)  
Antiguo 29/12/2015, 20:23
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
problemas con namespace y use

Hola a todos, tengo una consulta para hacer, resulta que me da el sgte error:

Fatal error: Class 'App\Controller' not found in /var/www/html/amnesia_1/Controller/MainController.php on line 5

cuando en realidad tengo el sgte código:

App/Controller.php

Código PHP:
Ver original
  1. <?php
  2. namespace App;
  3. use \Lib\Paginador;
  4. abstract class Controller
  5. {
  6.     private $paginador;
  7.     function __construct() {
  8.         session_start();  
  9.         $this->paginador = new Paginador();
  10.     }
  11.     public function redirect($route=array(),$dates = array()) {
  12.         try {
  13.             $folder= (count($route)>1) ? $route[0] : $this->deleteWordController();
  14.             $file= (count($route)>1) ? $route[1] : $route[0];
  15.             $path = $this->createFile("View/" .$folder."/". $file,$dates);
  16.             echo $this->createFile('Public/layout.php', array('content' => $path));            
  17.         }
  18.         catch (Exception $ex) {
  19.             echo $ex->getMessage();
  20.         }      
  21.     }
  22.     private function createFile($file,$dates=array()) {
  23.         try {
  24.             extract($dates);
  25.             ob_start();
  26.             require $file;
  27.             return ob_get_clean();
  28.         }
  29.         catch (Exception $ex) {
  30.             echo $ex->getMessage();
  31.         }
  32.     }
  33.     private function deleteWordController(){
  34.         return str_replace("Controller", "", get_class($this));
  35.     }
  36.     protected function getPaginator(){
  37.         return $this->paginador;
  38.     }
  39. }

Controller/MainController.php

Código PHP:
Ver original
  1. <?php
  2. namespace Controller;
  3. use App\Controller;
  4. class MainController extends Controller
  5. {
  6.     function __construct() {
  7.         parent::__construct();
  8.     }
  9.     public function index(){
  10.         $this->redirect(array('index.php'));
  11.     }  
  12. }

la cuestión es cómo arreglar ese error xq te marca cuando abres llave en el MainController, ya que todo este sistema tiene namespace y uses......

Espero sus respuestas y saludos.
  #2 (permalink)  
Antiguo 29/12/2015, 21:53
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con namespace y use

No estoy seguro si el problema es la colisión del namespace vs el nombre de la clase, ya que ambos son "Controller" así que podrías intentar:
Código PHP:
Ver original
  1. use App\Controller as Ctrl;
  2. class Foo extends Ctrl {}
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 30/12/2015, 13:46
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: problemas con namespace y use

Hola pateketrueke, 1ero gracias por responder, verás hice lo que me dijiste:

Código PHP:
Ver original
  1. <?php
  2. namespace Controller;
  3. use App\Controller as Ctrl;
  4. class MainController extends Ctrl
  5. {
  6.     function __construct() {
  7.         parent::__construct();
  8.     }
  9.     public function index(){
  10.         $this->redirect(array('index.php'));
  11.     }  
  12. }

pero me sigue dando el mismo error:

Fatal error: Class 'App\Controller' not found in /var/www/html/amnesia_1/Controller/MainController.php on line 5

ahora pienso no tendré que cambiar algo del index.php de la página??:

Código PHP:
Ver original
  1. <?php
  2.     $controlador = (!empty($_GET['c'])) ? ucwords($_GET['c']) . 'Controller' : "MainController";
  3.     $accion = (!empty($_GET['a'])) ? $_GET['a'] : "index";
  4.     $ruta = "Controller/" . $controlador . ".php";
  5.     try{
  6.         require_once $ruta;
  7.         $controlo = new $controlador();
  8.         $controlo->$accion();
  9.     }
  10.     catch (Exception $ex) {
  11.         echo $ex->getMessage();
  12.     }

Porque no se me ocurre nada para resolver ese error.

Espero sus respuestas y saludos.
  #4 (permalink)  
Antiguo 30/12/2015, 20:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con namespace y use

¿Estás siguiendo algún estándar para autoloading de clases en PHP?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 30/12/2015, 22:13
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: problemas con namespace y use

la verdad que no, sólo mostré ese código del index para ver si tengo que usar algún autoload, o alguna otra alternativa para que me anden los namespaces y uses.......

Espero sus respuestas y saludos.
  #6 (permalink)  
Antiguo 01/01/2016, 12:46
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: problemas con namespace y use

Mira intenté hacer un autoload para solucionar el problema pateketrueke:

Código PHP:
Ver original
  1. <?php
  2.     function mi_autocargador($clase) {
  3.         $support = array('App','Clases', 'Controller,Model');
  4.         $classString = '';
  5.         foreach($support as $value) {
  6.             $classString = $value.'/'.$clase.'.php';
  7.             if(file_exists($classString)){
  8.                 require_once $classString;
  9.             }            
  10.         }
  11.     }
  12.     spl_autoload_register('mi_autocargador');
  13.     $controlador = (!empty($_GET['c'])) ? ucwords($_GET['c']) . 'Controller' : "MainController";
  14.     $accion = (!empty($_GET['a'])) ? $_GET['a'] : "index";
  15.     $ruta = "Controller/" . $controlador . ".php";
  16.     try{
  17.         require_once $ruta;
  18.         $controlo = new $controlador();
  19.         $controlo->$accion();
  20.     }
  21.     catch (Exception $ex) {
  22.         echo $ex->getMessage();
  23.     }

pero me sale el mismo error:

Fatal error: Class 'App\Controller' not found in /var/www/html/amnesia_1/Controller/MainController.php on line 5

No se me ocurre solución alguna.... ¿que hacer?

espero respuestas y saludos.

Pd: Feliz año nuevo
  #7 (permalink)  
Antiguo 07/01/2016, 20:01
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: problemas con namespace y use

Hola a todos, les cuento que resolví mi problema, todos los cambios hechos están en github:

https://github.com/detectivejd/amnesia_php_mvc

gracias a todos

Etiquetas: html, namespace
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:42.