Nota: el año pasado estaba trabajando en un framework, pero tuve que dejarlo, a la vuelta tuve una pérdida de datos y ahora estoy rehaciéndolo de nuevo. Este es el esqueleto más básico del framework. Su funcionamiento es que recibe los parámetros del cliente y carga conforme a esos parámetros un módulo u otro; los módulos a su vez cargan clases del core y devuelven la vista con todos los datos procesados.
Intento cargar dinámicamente clases según la llamada al servidor.
Para ello primero configuré el .htaccess
Código Apache:
Ver original<IfModule mod_rewrite.c>
Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
DirectoryIndex index.php
RewriteRule ([^/]*)/*([^/]*)/*(.*) index.php?module=$1&method=$2&args=$3 [L]
</IfModule>
A continuación antes de cualquier etiqueta HTML inicié sesión y el spl_autoload_register
Ya en el header establecí el <base> para el HTML
Código PHP:
Ver original<base href="<?php echo $_SERVER['DOCUMENT_ROOT']; ?>/blog/">
Luego en el index, donde se procesan las peticiones, tengo el siguiente código
Código PHP:
Ver original<?php
try{
$get = ['module'=>[FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_HIGH],
'method'=>[FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_HIGH],
'args'=>[FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_HIGH]];
//no incluyo los otros parámetros porque es una prueba para ver si instancia correctamente
echo (new \controller\Front('\module\\'.$args['module']));
}
} catch (Exception $ex) {
echo "pagina no encontrada";
}
?>
En el controller, que es dónde llamo a las clases según sean front o back controller, tengo el siguiente código para probar que la carga dinámica funciona
Código PHP:
Ver original<?php
namespace controller;
class Front{
public function __construct($module='\module\Home', $method=FALSE, $args=FALSE) {
//no incluyo los otros argumentos porque sólo estoy viendo si funciona la carga dinámica
return (new $module->$method());
}
}
?>
y en el home tengo el siguiente código
Código PHP:
Ver original<?php
namespace module;
class Home{
public function __construct() {
return "hola";
}
?>
Entonces el problema que me devuelve es este
Código:
Catchable fatal error: Object of class controller\Front could not be converted to string in /srv/www/htdocs/blog/index.php on line 21
No entiendo por qué dice que no puede convertir un objeto a string, si el resultado debería ser un string, el string de la clase/modulo Home, no un objeto.
Alguien puede arrojarme luz sobre esto?
Acepto sugerencias.
Saludos.