Hola,
estoy armando una clase para dar permisos a usuarios de tener ciertas acciones en el sitio web, para esto lo que intento hacer es leer todos los controladores que existen en una carpeta, y después obtener todos los métodos de una clase, para esto estoy usando algo asi:
Código PHP:
class PermisosUsuarios {
private static $instance=null;
/**
* Constructor
*
*/
public function __construct() {
}
/**
* carga los nombre de los controladores existentes
* @version 0.1
* @author Lucas M. Sastre
* @access public
* @name cargarControladoresPermisos
*
* Modificaciones
*/
public function cargarControladoresPermisos($dir) {
if(is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if($file != "." && $file != ".." && $file != 'smarty' && $file != '.svn' && $file != 'ajax' && $file != 'error404') {
$nombres[] = $file;//echo "nombre archivo: $file : tipo archivo: " . filetype($dir . $file) . "\n";
}
}
closedir($dh);
}
}
return $nombres;
}
/**
* carga los nombre de los metodos de un controlador existentes
* @version 0.1
* @author Lucas M. Sastre
* @access public
* @name cargarMetodosControladoresPermisos
*
* Modificaciones
*/
public function cargarMetodosControladoresPermisos($ruta,$class) {
$clase = $ruta.$class."/".strtolower($class)."Controller.php";
$class = strtolower($class)."Controller";
if(file_exists($ruta)){
if(class_exists($class)) {
$class_methods = get_class_methods($class);
}
else {
$class_methods = get_class_methods(new $class());
}
}
return $class_methods;
}
/**
* Creo el patron Singleton
*
* @return instance
*/
public static function singleton() {
if( self::$instance == null ) {
self::$instance = new self();
}
return self::$instance;
}
}
y después en controlador lo invoco así:
Código PHP:
public function index() {
echo $this->Config->get('root').$this->Config->get('adminControllerFolder')."<br/>";
echo"Carpetas <pre>";
print_r($this->PermisosUsuarios->cargarControladoresPermisos($this->Config->get('root').$this->Config->get('adminControllerFolder')));
echo"</pre>";
$controladores = $this->PermisosUsuarios->cargarControladoresPermisos($this->Config->get('root').$this->Config->get('adminControllerFolder'));
echo"Controladores<pre>";
print_r($controladores);
echo"</pre>";
echo"Metodos<pre>";
print_r($this->PermisosUsuarios->cargarMetodosControladoresPermisos($this->Config->get('root').$this->Config->get('adminControllerFolder'),'configuracion'));
echo"</pre>";
for($i=0;$i<count($controladores);$i++){
//echo $controladores[$i]."<br/>";
$nombre[]=$controladores[$i];
$metodos = $this->PermisosUsuarios->cargarMetodosControladoresPermisos($this->Config->get('root').$this->Config->get('adminControllerFolder'),$controladores[$i]);
for($j=0;$j<count($metodos);$j++){
//echo $metodos[$j]."<br/>";
$nombre[$controladores[$i]][]= $metodos[$j];
}
}
echo"arreglo <pre>";
print_r($nombre);
echo"</pre>";
exit();
y en mi controlador base tengo:
Código PHP:
abstract class Controller {
protected $PermisosUsuarios;
public function __construct() {
//creo la instancia de los permisos
$this->PermisosUsuarios = new PermisosUsuarios();
}
}
Bien el problema lo tengo cuando quiero acceder a los métodos de la una clase, me tira el siguiente error:
Cita: Fatal error: Class 'configuracionController' not found in C:\xampp\htdocs\punk_dev\core\clases\class.permiso s.php on line 68
la linea 68 dice:
Código PHP:
$class_methods = get_class_methods(new $class());
La clase configuracionController es la primer clase que se encuentra en el directorio que estoy buscando, este error salta cuando llamo al método cargarMetodosControladoresPermisos() desde cualquier controlador distinto a configuracionController, si lo pruebo desde este controlador funciona bien.
Pasando en limpio:
Como puedo hacer para obtener todos los argumentos de todas las clases que esten en distintos directorios dentro de otro (admin/controladores/configuracion/, admin/controladores/usuarios/, etc?
La idea es poder guardar todo en un arreglo y que pueda mostrarlo asi:
Usuario
crearUsuario
editarUsuario
borrarUsuario
Items
crearItem
listarItem
listarItemPorCliente
Desde ya muchas gracias.