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
Código PHP:
Ver original
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:
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.Catchable fatal error: Object of class controller\Front could not be converted to string in /srv/www/htdocs/blog/index.php on line 21
Alguien puede arrojarme luz sobre esto?
Acepto sugerencias.
Saludos.