Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Obtener carpeta anterior a la otra en php

Estas en el tema de Obtener carpeta anterior a la otra en php en el foro de PHP en Foros del Web. Hola a todos, quería hacer la siguiente consulta: resulta que estoy terminando un sistema hecho con hmvc, pero no estoy contento con la idea de ...
  #1 (permalink)  
Antiguo 11/02/2016, 20:15
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Obtener carpeta anterior a la otra en php

Hola a todos, quería hacer la siguiente consulta: resulta que estoy terminando un sistema hecho con hmvc, pero no estoy contento con la idea de poner el bundle (carpeta del usuario dónde están sus modelos, vistas y controladores correspondientes) en el enlace, quedándome de la siguiente manera:

<a href="index.php?b=backend&c=roles&a=add" title="Crear"><img src="Public/img/increase.png" /></a>

Cómo ven, en el link le paso el bundle, y si me ocurrió la idea en el index php obtener el bundle mediante la búsqueda de carpetas:

index.php

Código PHP:
Ver original
  1. <?php
  2.     define("APPLICATION_PATH", dirname(__FILE__));
  3.     define("DS", DIRECTORY_SEPARATOR);
  4.     spl_autoload_register(function($clase) {
  5.         try {
  6.             $file = APPLICATION_PATH . DS . str_replace("\\", DS, $clase) . ".php";
  7.             require_once $file;        
  8.         }
  9.         catch (Exception $ex) {
  10.             echo $ex->getMessage();
  11.         }
  12.     });
  13.     $bundle = (!empty($_GET['b'])) ? ucwords($_GET['b']) . 'Bundle' : "FrontendBundle";
  14.     $controlador = (!empty($_GET['c'])) ? ucwords($_GET['c']) . 'Controller' : "MainController";
  15.     $accion = (!empty($_GET['a'])) ? $_GET['a'] : "index";
  16.     try {
  17.         $controlador = "Src\\". $bundle . "\\Controller\\" . $controlador;
  18.         $controlo = new $controlador();
  19.         $controlo->$accion();
  20.     } catch (Exception $ex) {
  21.         echo $ex->getMessage();
  22.     }

La idea es que $bundle tenga como valor la carpeta anterior a "\\Controller\\" . $controlador, pero pregunto: ¿existe una función en php para eso o no?

Saludos y espero sus respuestas
  #2 (permalink)  
Antiguo 11/02/2016, 22:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Obtener carpeta anterior a la otra en php

Revisa dirname() en el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 12/02/2016, 11:30
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Obtener carpeta anterior a la otra en php

Hola pateketrueke gracias por responder, mira que miré lo que me dijiste y lo hice pero me da este error:

Warning: dirname() expects exactly 1 parameter, 2 given in /var/www/html/amnesia_1_hmvc/index.php on line 15
NULL

acá esta el código:

Código PHP:
Ver original
  1. <?php
  2.     define("APPLICATION_PATH", dirname(__FILE__));
  3.     define("DS", DIRECTORY_SEPARATOR);
  4.     spl_autoload_register(function($clase) {
  5.         try {
  6.             $file = APPLICATION_PATH . DS . str_replace("\\", DS, $clase) . ".php";
  7.             require_once $file;        
  8.         }
  9.         catch (Exception $ex) {
  10.             echo $ex->getMessage();
  11.         }
  12.     });
  13.     $bundle = (!empty($_GET['b'])) ? ucwords($_GET['b']) . 'Bundle' : "FrontendBundle";
  14.     $controlador = (!empty($_GET['c'])) ? ucwords($_GET['c']) . 'Controller' : "MainController";
  15.     var_dump( dirname($controlador,2) );
  16.     $accion = (!empty($_GET['a'])) ? $_GET['a'] : "index";
  17.     try {
  18.         $controlador = "Src\\". $bundle . "\\Controller\\" . $controlador;
  19.         $controlo = new $controlador();
  20.         $controlo->$accion();
  21.     } catch (Exception $ex) {
  22.         echo $ex->getMessage();
  23.     }

Decime si estoy mal, y que tengo que cambiar.

Saludos y espero sus respuestas..
  #4 (permalink)  
Antiguo 12/02/2016, 11:41
 
Fecha de Ingreso: febrero-2016
Mensajes: 14
Antigüedad: 8 años, 2 meses
Puntos: 0
Respuesta: Obtener carpeta anterior a la otra en php

En la linea 15:
Código PHP:
var_dumpdirname($controlador,2) ); 
la función dirname() tenes que mandarle un solo parametro, le estas mandando dos: $contorlador y "2".

Saludos
  #5 (permalink)  
Antiguo 12/02/2016, 19:20
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Obtener carpeta anterior a la otra en php

hola seventeen gracias por responder, verás cambié eso por esto

Código PHP:
Ver original
  1. var_dump( dirname("\\Controller\\". $controlador) );

y me muestra esto:

string(1) "."

no me muestra la carpeta bundle (FrontendBundle o BackendBundle)

¿que me sugieren? porque puede que me falte algo o que me equivoque en algo.

Saludos y espero sus respuestas.
  #6 (permalink)  
Antiguo 13/02/2016, 21:08
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Obtener carpeta anterior a la otra en php

Hola a todos, solucioné el problema, resulta que no era necesario usar dirname sino glob para recorrer las carpetas

Código PHP:
Ver original
  1. <?php
  2.     define("APPLICATION_PATH", dirname(__FILE__));
  3.     define("DS", DIRECTORY_SEPARATOR);
  4.     spl_autoload_register(function($clase) {
  5.         try {
  6.             require_once APPLICATION_PATH . DS . str_replace("\\", DS, $clase) . ".php";        
  7.         }
  8.         catch (Exception $ex) {
  9.             echo $ex->getMessage();
  10.         }
  11.     });
  12.     $controlador = (!empty($_GET['c'])) ? ucwords($_GET['c']) . 'Controller' : "MainController";
  13.     $accion = (!empty($_GET['a'])) ? $_GET['a'] : "index";
  14.     foreach(glob(APPLICATION_PATH . DS . "Src". DS . "*") as $dir) {
  15.         foreach(glob($dir . DS . "Controller" . DS . "*") as $file){
  16.             $c = str_replace($dir . DS . "Controller" . DS, "", $file);
  17.             $c2 = str_replace(".php","",$c);
  18.             if($c2 == $controlador){
  19.                 $bundle = str_replace(APPLICATION_PATH . DS . "Src". DS, "", $dir);                
  20.             }
  21.         }
  22.     }        
  23.     try {
  24.         $controlador = "Src\\". $bundle . "\\Controller\\" . $controlador;
  25.         $controlo = new $controlador();
  26.         $controlo->$accion();
  27.     } catch (Exception $ex) {
  28.         echo $ex->getMessage();
  29.     }

y ahora puedo hacer que mi HMVC ande sin pasar el bundle cómo parámetro en los links, por si alguien está interesado en ver mi repositorio de hmvc, pongo el link:

https://github.com/detectivejd/amnesia_php_hmvc

Saludos y mil gracias a todos....

Etiquetas: carpeta
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 09:12.