Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

[SOLUCIONADO] Fatal error...

Estas en el tema de Fatal error... en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estoy aprendiendo a crear un pequeño Framework y no soluciono este error Código: Fatal error: Using $this when not in object context in C:\xampp\htdocs\prueba\controllers\indexController.php on ...
  #1 (permalink)  
Antiguo 14/04/2014, 17:09
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
Fatal error...

Estoy aprendiendo a crear un pequeño Framework y no soluciono este error

Código:
Fatal error: Using $this when not in object context in C:\xampp\htdocs\prueba\controllers\indexController.php on line 16
application\View.php
Código PHP:
    /*LLAMA-VISTA*/
    
class View {
        private 
$_controlador;

        public function 
__construct(Request $peticion) {$this->_controlador $peticion->getControlador();}

        public function 
renderizar($vista$item false) {
            
/*
            $menu = array(
                array('id' => 'inicio', 'titulo' => 'inicio', 'enlace' => BASE_URL)
            );
            */
            /*
            $_layoutParams = array(
                'ruta_img' => BASE_URL.'views/layout/'.DEFAULT_LAYOUT.'/img/',
                'ruta_css' => BASE_URL.'views/layout/'.DEFAULT_LAYOUT.'/css/',
                'ruta_js'  => BASE_URL.'views/layout/'.DEFAULT_LAYOUT.'/js/' ,
                'menu'     => $menu
            );
            */
            
$rutaView ROOT.'views'.DS.$this->_controlador.DS.$vista.'.phtml'//Ruta de la Vista pedida
        
            
if (is_readable($rutaView)) { //Comprobamos que exista y sea legible la Vista
                //include_once ROOT.'views/layout'.DS.DEFAULT_LAYOUT.DS.'header.php';
                
include_once $rutaView;
                
//include_once ROOT.'views/layout'.DS.DEFAULT_LAYOUT.DS.'footer.php';
            
} else {
                throw new 
Exception('No existe la Vista: ');
            }
        }
    } 
controllers\indexController.php
Código PHP:
    /*CONTROLADOR-PRIMARIO*/
    
class indexController extends Controller {

        
/*CARGAMOS-OBJ-VIEW*/
        
public function __construct() {
            
parent::__construct();
        }
        
/*CARGAMOS-OBJ-VIEW*/
            
        
public function index() {
            
$objRequest = new Request();
            echo 
"Estamos en el Controlador: 'controllers/".$objRequest->getControlador()."Controller.php'";
            
/*CARGAMOS-OBJ-VIEW*/
            //$this->_view->titulo = 'Portada';
            
$this->_view->renderizar('index');
            
/*CARGAMOS-OBJ-VIEW*/
        
}
    } 
application\Controller.php
Código PHP:
    /*CONTROLADOR-PADRE*/
    
abstract class Controller {
        
        
/*CARGAMOS-OBJ-VIEW*/
        
protected $_view;
        public function 
__construct() {$this->_view = new View(new Request);}
        
/*CARGAMOS-OBJ-VIEW*/
        
        
abstract public function index();
    } 
application\Bootstrap.php
Código PHP:
    /*LLAMA-CONTROLADORES-METODOS*/
    
class Bootstrap {
        public function 
run(Request $peticion) { //Recogemos Controlador/Metodo/Argumentos de application/Request.php
            
$controlador $peticion->getControlador().'Controller'//Controlador pedido
            
$rutaControlador ROOT.'controllers'.DS.$controlador.'.php'//Ruta del Controlador pedido
            
$metodo $peticion->getMetodo(); //Metodo pedido
            
$args $peticion->getArgs(); //Argumentos pedidos

            
if (is_readable($rutaControlador)) { //Comprobamos que exista y sea legible el Controlador
                
require_once $rutaControlador//Cargamos el controlador
                
if (is_callable(array($controlador$metodo))) { //Verifica que los contenidos de una variable puedan ser llamados como una función
                    
$metodo $peticion->getMetodo(); //Devolvemos el Metodo pedido
                
} else {
                    
$metodo 'index'//Devolvemos el Metodo por defecto
                
}

                if (isset(
$args)) { //Comprobamos que existan los Argumentos
                    // Llamar una función de usuario dada con una matriz de parámetros
                    
call_user_func_array(array($controlador$metodo), $args);
                } else {
                    
//Llamar a una llamada de retorno dada por el primer parámetro
                    
call_user_func(array($controlador$medoto));
                }
            } else {
                
//Informamos que no existe la Ruta del Controlador
                
throw new Exception('No existe el Controlador: \'controllers/'.$controlador.'.php\'');
            }
        }
    } 
application\Request.php
Código PHP:
    /*PROCESA-PETICIONES*/
    
class Request {
        private 
$_controlador$_metodo$_argumentos;
        public function 
__construct() {
            if (isset(
$_GET['url'])) { //Comprobamos la recepcion de GET
                
$url filter_input(INPUT_GET'url'FILTER_SANITIZE_URL); //Filtramos GET por caracteres 'url' permitidos
                
$url explode('/'$url); //Convertimos GET en ARRAY
                
$url array_filter($url); //Eliminamos '/' sobrantes

                
$this->_controlador strtolower(array_shift($url)); //Extraemos controlador en minusculas
                
$this->_metodo strtolower(array_shift($url)); //Extraemos metodo en minusculas
                
$this->_argumentos $url//Guardamos el ARRAY de los parametros
            
}
            if (!
$this->_controlador$this->_controlador DEFAULT_CONTROLLER//Controlador
            
if (!$this->_metodo$this->_metodo 'index'//Metodo
            
if (!$this->_argumentos$this->_argumentos = array(); //Argumentos
        
}
        public function 
getControlador() {return $this->_controlador;} //Externaliza el Controlador
        
public function getMetodo() {return $this->_metodo;} //Externaliza el Metodo
        
public function getArgs() {return $this->_argumentos;} //Externaliza los Argumentos
    

index.php
Código PHP:
    /*CONSTANTES-RUTAS*/
    
define('DS'DIRECTORY_SEPARATOR);
    
define('ROOT'realpath(dirname(__FILE__)).DS);
    
define('APP_PATH'ROOT.'application'.DS);
    
    
/*ARCHIVOS-SISTEMA*/
    
require_once APP_PATH.'Config.php'/*PRUEBA_REQUEST*/
    
require_once APP_PATH.'Request.php'/*PRUEBA_REQUEST*/
    
require_once APP_PATH.'Bootstrap.php'/*PRUEBA_REQUEST*//*PRUEBA_BOOTSTRAP*/
    
require_once APP_PATH.'Controller.php'/*PRUEBA_REQUEST*//*PRUEBA_BOOTSTRAP*/
    
require_once APP_PATH.'View.php';

    
/*PRUEBA-REQUEST*/
    /*
    $objRequest = new Request();
    echo $objRequest->getControlador().'<br>';
    echo $objRequest->getMetodo().'<br>';
    print_r($objRequest->getArgs());
    echo "<br><br>";
    */

    /*PRUEBA-BOOTSTRAP*/
    
try {
        
Bootstrap::run(new Request);
    } catch (
Exception $e) {
        echo 
$e->getMessage();
    } 
  #2 (permalink)  
Antiguo 14/04/2014, 21:20
 
Fecha de Ingreso: enero-2008
Mensajes: 580
Antigüedad: 16 años, 3 meses
Puntos: 9
Respuesta: Fatal error...

Faltaban dos cosillas

Código:
static
Código:
$controlador = new $controlador();
application/Bootstrap.php
Código PHP:
    /*LLAMA-CONTROLADORES-METODOS*/
    
class Bootstrap {
        public static function 
run(Request $peticion) { //Recogemos Controlador/Metodo/Argumentos de application/Request.php
            
$controlador $peticion->getControlador().'Controller'//Controlador pedido
            
$rutaControlador ROOT.'controllers'.DS.$controlador.'.php'//Ruta del Controlador pedido
            
$metodo $peticion->getMetodo(); //Metodo pedido
            
$args $peticion->getArgs(); //Argumentos pedidos

            
if (is_readable($rutaControlador)) { //Comprobamos que exista y sea legible el Controlador
                
require_once $rutaControlador//Cargamos el controlador
                
$controlador = new $controlador();

                if (
is_callable(array($controlador$metodo))) { //Verifica que los contenidos de una variable puedan ser llamados como una función
                    
$metodo $peticion->getMetodo(); //Devolvemos el Metodo pedido
                
} else {
                    
$metodo 'index'//Devolvemos el Metodo por defecto
                
}

                if (isset(
$args)) { //Comprobamos que existan los Argumentos
                    //Llamar una función de usuario dada con una matriz de parámetros
                    
call_user_func_array(array($controlador$metodo), $args);
                } else {
                    
//Llamar a una llamada de retorno dada por el primer parámetro
                    
call_user_func(array($controlador$medoto));
                }
            } else {
                
//Informamos que no existe la Ruta del Controlador
                
throw new Exception('No existe el Controlador: \'controllers/'.$controlador.'.php\'');
            }
        }
    } 

Etiquetas: fatal, form, framework, vista
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 15:12.