Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Estructurar Sistema en PHP

Estas en el tema de Estructurar Sistema en PHP en el foro de PHP en Foros del Web. Hola a todos, quería hacerles la siguiente consulta, verán estoy usando el patrón MVC estructurado de esta forma: App Clases Controller Lib Model Public View ...
  #1 (permalink)  
Antiguo 15/01/2016, 22:08
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Estructurar Sistema en PHP

Hola a todos, quería hacerles la siguiente consulta, verán estoy usando el patrón MVC estructurado de esta forma:

App
Clases
Controller
Lib
Model
Public
View
index.php

pero quiero tratar de hacer esto:

App
Lib
Public
Src
->
BackendBundle
->
Clases
Controller
Model
View
->
FrontendBundle
->
Clases
Controller
Model
View

->
ClienteBundle
->
Clases
Controller
Model
View
index.php

Pero soy consciente que tengo que cambiar el Controller.php y el index.php

Controller.php

Código PHP:
Ver original
  1. public function redirect($route=array(),$dates = array()) {
  2.         try {
  3.             $folder= (count($route)>1) ? $route[0] : $this->deleteWordController();
  4.             $file= (count($route)>1) ? $route[1] : $route[0];
  5.             $path = $this->createFile(APPLICATION_PATH . DS . "View" . DS . $folder. DS . $file,$dates);
  6.             echo $this->createFile(APPLICATION_PATH . DS . 'Public'. DS .'layout.php', array('content' => $path));            
  7.         }
  8.         catch (Exception $ex) {
  9.             echo $ex->getMessage();
  10.         }      
  11.     }

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.             $rootPath = dirname(__FILE__);
  7.             $file = realpath($rootPath . DS . str_replace("\\", DS, $clase) . ".php");
  8.             require_once $file;        
  9.         }  
  10.         catch (Exception $ex){
  11.             echo $ex->getMessage();
  12.         }
  13.     });
  14.     $controlador = (!empty($_GET['c'])) ? ucwords($_GET['c']) . 'Controller' : "MainController";
  15.     $accion = (!empty($_GET['a'])) ? $_GET['a'] : "index";
  16.     try{
  17.         $controlador = "Controller\\" . $controlador;        
  18.         $controlo = new $controlador();
  19.         $controlo->$accion();
  20.     }
  21.     catch (Exception $ex) {
  22.         echo $ex->getMessage();
  23.     }

Mis preguntas son:

¿cómo hacer tanto en Controller.php cómo en index.php para armar la ruta del src/CarpetaBundle/??? ¿tanto para obtener el controlador como la vista del bundle ya sea del backend o no?

la otra pregunta es:

¿lo que quiero hacer seguirá siendo MVC o pasará a ser HMVC?

Espero sus respuestas y Saludos.
  #2 (permalink)  
Antiguo 20/01/2016, 20:21
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Estructurar Sistema en PHP

Alguna respuesta?? por favor, estuve investigando acerca de glob:

http://php.net/manual/es/function.glob.php

pero cómo hago el archivo según del controlador o de la vista con el glob??

Espero sus respuestas y Saludos.
  #3 (permalink)  
Antiguo 20/01/2016, 21:40
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Estructurar Sistema en PHP

No entiendo qué tiene que ver glob() con lo que preguntas.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 20/01/2016, 21:55
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Estructurar Sistema en PHP

hola pateketrueke, gracias por responder, entonces que necesito para hacer lo que pregunté al principio??

Espero respuestas y saludos.
  #5 (permalink)  
Antiguo 20/01/2016, 22:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Estructurar Sistema en PHP

¿Por qué no consultas una referencia oficial de estándares de PHP?

Es decir, el mecanismo de auto-load ya está tan bien definido que no tienes que inventarte algo nuevo, sólo debes apegarte al estándar.

http://phptherightway.com/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 21/01/2016, 08:41
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Estructurar Sistema en PHP

No reinventes utiliza los estandares como PSR-4: http://www.php-fig.org/psr/psr-4/ viene con un ejemplo de implementación pero si usas Composer puedes utilizar psr-4 de forma transparente
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 21/01/2016, 17:54
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Estructurar Sistema en PHP

hola pateketrueke y hhs, gracias por responder, verán armé el repositorio para armar lo que dije al principio:

https://github.com/detectivejd/amnesia_php_hmvc

En la carpeta Src haciendo click en adelante, está lo que quiero hacer ya están los namespace arreglados para que funcionen con su bundle.

Por otro lado, no uso composer, pero me dejaron pensando, osea tengo que usar esto:

https://github.com/php-fig/fig-stand...er-examples.md

porque los que haciendo la parte de redirecciones son el index principal de la página y el redirect de la clase App/Controller.

Espero respuestas y saludos.
  #8 (permalink)  
Antiguo 24/01/2016, 12:36
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Estructurar Sistema en PHP

Hola a todos, verán estuve intentando hacer lo que me dijeron a mi da este error:

Fatal error: Class 'FrontendBundle\Controller\MainController' not found in /var/www/html/amnesia_1_hmvc/index.php on line 35

El código es usé es este:

<?php
define("APPLICATION_PATH", dirname(__FILE__));
define("DS", DIRECTORY_SEPARATOR);
spl_autoload_register(function($clase){
// project-specific namespace prefix
$prefix = 'App\\Controller.php';

// base directory for the namespace prefix
$base_dir = __DIR__ . '/Src/';

// does the class use the namespace prefix?
$len = strlen($prefix);
if (strncmp($prefix, $clase, $len) !== 0) {
// no, move to the next registered autoloader
return;
}

// get the relative class name
$relative_class = substr($clase, $len);

// replace the namespace prefix with the base directory, replace namespace
// separators with directory separators in the relative class name, append
// with .php
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';

// if the file exists, require it
if (file_exists($file)) {
require $file;
}
});
$controlador = (!empty($_GET['c'])) ? ucwords($_GET['c']) . 'Controller' : "MainController";
$accion = (!empty($_GET['a'])) ? $_GET['a'] : "index";
try{
$controlador = "Controller\\" . $controlador;
$controlo = new $controlador();
$controlo->$accion();
}
catch (Exception $ex) {
echo $ex->getMessage();
}

En el repositorio, no lo subí todavía pero no sé cual es el error y que debo cambiar.

Espero respuestas y saludos.
  #9 (permalink)  
Antiguo 10/02/2016, 22:52
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Estructurar Sistema en PHP

Hola, al final pude pero hacer que en los links les pase el bundle para que me detecte en que bundle esta el controlador...

Este es mi repositorio con el código:

https://github.com/detectivejd/amnesia_php_hmvc

así funciona con el tema de los links (que no me gusta nada):

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

Encontré esto que era lo que ustedes me decian:

https://github.com/alphalemon/bundle...Autoloader.php

pero no sé cómo adaptarlo a mi código, cómo tendría que cambiar del BundleAutoloader para que funcione en mi código????

Saludos y espero sus respuestas.
  #10 (permalink)  
Antiguo 13/02/2016, 21:04
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Estructurar Sistema en PHP

Hola a todos, al final lo logré sólo tenía que usar glob para recorrer las carpetas y obtener el bundle:

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 mi repositorio esta actualizado: https://github.com/detectivejd/amnesia_php_hmvc

Mil gracias a todos...

Etiquetas: estructurar, sistema
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:45.