Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Donde incluir librerias.. modelo ¿? controlador¿?

Estas en el tema de Donde incluir librerias.. modelo ¿? controlador¿? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, buenas de nuevo. Quisiera saber en que parte se incluyen las librerías de mi aplicación en el patrón MVC. Si por ejemplo tengo una ...
  #1 (permalink)  
Antiguo 13/04/2011, 11:58
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 4 meses
Puntos: 165
Donde incluir librerias.. modelo ¿? controlador¿?

Hola, buenas de nuevo.

Quisiera saber en que parte se incluyen las librerías de mi aplicación en el patrón MVC.


Si por ejemplo tengo una clase Noticias.. esta donde se incluye?

Un saludo!
  #2 (permalink)  
Antiguo 13/04/2011, 12:03
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

Puedes crear un directorio llamado library y tratarlo ahí, este debe ser accesible a toda la aplicación.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 13/04/2011, 12:04
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 4 meses
Puntos: 165
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

Hola buenas,

Creo que no me he explicado bien.

Ese directorio existe, el problema esta, en saber desde donde llamo a cada uno de los archivos que necesito... desde mi controlador principal? o desde cada uno de los controladores que necesiten cada uno de los ficheros de mi libreria?

Un saludo y gracias!
  #4 (permalink)  
Antiguo 13/04/2011, 12:10
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

Oh, donde sea necesario. En todos los controladores que quieras.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 13/04/2011, 12:12
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 4 meses
Puntos: 165
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

De acuerdo,

Entonces la respuesta es, en cada uno de los controladores que sea necesario. Perfecto.

Muchísimas gracias!!
  #6 (permalink)  
Antiguo 13/04/2011, 12:14
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

Que tal miktrv,

Deberías implementar autoloaders, a través de spl_autoload_register, la clase deberías instanciarla en tu Bootstrap o lo que sea que utilices para inicializar la aplicación.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 13/04/2011, 14:49
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 4 meses
Puntos: 165
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

Cita:
Iniciado por masterpuppet Ver Mensaje
Que tal miktrv,

Deberías implementar autoloaders, a través de spl_autoload_register, la clase deberías instanciarla en tu Bootstrap o lo que sea que utilices para inicializar la aplicación.

Saludos.
Hola buenas,

Muchas gracias por tu respuesta.

Me parece una idea excelente, se que symfony usa esta técnica.

Por cierto, un ejemplo básico me vendría genial!

Intentaré usarla, un saludo!
  #8 (permalink)  
Antiguo 13/04/2011, 15:12
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 4 meses
Puntos: 165
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

Hola buenas,

Podría usar algo como una función autoload en mi controlador principal??

Un saludo!!
  #9 (permalink)  
Antiguo 13/04/2011, 16:05
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

Habria que ver, como haces el dispatch ?, utilizas algo parecido a un FrontController ?, osea cual es el punto de entrada de la aplicación ?,

Con respecto a los ejemplos de autoloader, pense que con los que trae el manual podria servir, pero bueno algo simple podria ser:
Código PHP:
Ver original
  1. class Autoloader
  2. {
  3.     protected $_paths = array();
  4.  
  5.     public function __construct(array $paths = array())
  6.     {
  7.         spl_autoload_register(array($this, 'loader'));
  8.         $this->_paths = $paths;
  9.     }
  10.  
  11.     private function loader($className)
  12.     {
  13.         foreach($this->_paths as $path) {
  14.             $className = strtolower($className);
  15.             $class     = $path . DIRECTORY_SEPARATOR . $className . '.php';
  16.             if(file_exists($class)) {
  17.                 include $class;
  18.                 if(class_exists($className)){
  19.                     continue;
  20.                 }
  21.             }
  22.  
  23.         }
  24.     }
  25. }

buscaría la clase en los directorios que le pases por parámetro y el nombre de los ficheros debe ser el nombre de la clase en minúsculas, pero vos lo adaptas a tus necesidades y listo.

para utilizarlo:
Código PHP:
Ver original
  1. //en tu bootstrap
  2. $autoloader = new Autoloader(array('/path/to/dir'));
  3.  
  4. //en algún controller o donde quieras, esto buscaria dentro de "/path/to/dir"
  5. //el fichero myclass.php que contendria la clase MyClass
  6. $class = new MyClass();

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 13/04/2011, 20:11
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

Cita:
Iniciado por masterpuppet Ver Mensaje
Habria que ver, como haces el dispatch ?, utilizas algo parecido a un FrontController ?, osea cual es el punto de entrada de la aplicación ?,

Con respecto a los ejemplos de autoloader, pense que con los que trae el manual podria servir, pero bueno algo simple podria ser:
Código PHP:
Ver original
  1. class Autoloader
  2. {
  3.     protected $_paths = array();
  4.  
  5.     public function __construct(array $paths = array())
  6.     {
  7.         spl_autoload_register(array($this, 'loader'));
  8.         $this->_paths = $paths;
  9.     }
  10.  
  11.     private function loader($className)
  12.     {
  13.         foreach($this->_paths as $path) {
  14.             $className = strtolower($className);
  15.             $class     = $path . DIRECTORY_SEPARATOR . $className . '.php';
  16.             if(file_exists($class)) {
  17.                 include $class;
  18.                 if(class_exists($className)){
  19.                     continue;
  20.                 }
  21.             }
  22.  
  23.         }
  24.     }
  25. }

buscaría la clase en los directorios que le pases por parámetro y el nombre de los ficheros debe ser el nombre de la clase en minúsculas, pero vos lo adaptas a tus necesidades y listo.

para utilizarlo:
Código PHP:
Ver original
  1. //en tu bootstrap
  2. $autoloader = new Autoloader(array('/path/to/dir'));
  3.  
  4. //en algún controller o donde quieras, esto buscaria dentro de "/path/to/dir"
  5. //el fichero myclass.php que contendria la clase MyClass
  6. $class = new MyClass();

Saludos.
Excelente estaba leyendo un poco sobre este tipo de clase, yo instanciaba mucho en el controlador principal cosa que lei por ahi que esta errado ya que debe de haber un autoload, vi el del manual pero no me puse a crear ninguna todavia voy a tomar esta para inicio, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #11 (permalink)  
Antiguo 14/04/2011, 01:08
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 4 meses
Puntos: 165
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

Cita:
Iniciado por masterpuppet Ver Mensaje
Habria que ver, como haces el dispatch ?, utilizas algo parecido a un FrontController ?, osea cual es el punto de entrada de la aplicación ?,

Con respecto a los ejemplos de autoloader, pense que con los que trae el manual podria servir, pero bueno algo simple podria ser:
Código PHP:
Ver original
  1. class Autoloader
  2. {
  3.     protected $_paths = array();
  4.  
  5.     public function __construct(array $paths = array())
  6.     {
  7.         spl_autoload_register(array($this, 'loader'));
  8.         $this->_paths = $paths;
  9.     }
  10.  
  11.     private function loader($className)
  12.     {
  13.         foreach($this->_paths as $path) {
  14.             $className = strtolower($className);
  15.             $class     = $path . DIRECTORY_SEPARATOR . $className . '.php';
  16.             if(file_exists($class)) {
  17.                 include $class;
  18.                 if(class_exists($className)){
  19.                     continue;
  20.                 }
  21.             }
  22.  
  23.         }
  24.     }
  25. }

buscaría la clase en los directorios que le pases por parámetro y el nombre de los ficheros debe ser el nombre de la clase en minúsculas, pero vos lo adaptas a tus necesidades y listo.

para utilizarlo:
Código PHP:
Ver original
  1. //en tu bootstrap
  2. $autoloader = new Autoloader(array('/path/to/dir'));
  3.  
  4. //en algún controller o donde quieras, esto buscaria dentro de "/path/to/dir"
  5. //el fichero myclass.php que contendria la clase MyClass
  6. $class = new MyClass();

Saludos.
Hola buenas!

Muchas gracias por tu esfuerzo!

Sí, utilizo un controlador frontal ( index.php ).

Entiendo que es donde tengo que poner el autoloader.

Una duda... para realizar esto en mi frontcontroller:

Código PHP:
Ver original
  1. //en tu bootstrap
  2. $autoloader = new Autoloader(array('/path/to/dir'));

Antes de esto, tendría que incluir el require de la clase autoloader?

Un saludo y gracias!
  #12 (permalink)  
Antiguo 14/04/2011, 07:43
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

Efectivamente, deberías hacer el include.

@carlos_belisario, es un ejemplo muy simple, la clase podría tener como opción por ejemplo que busque recursivamente en los directorios a partir del que le estas pasando por parámetro, ahí ya entrarían los Iteratos(RecursiveDirectoryIterator, RecursiveFilterIterator, etc...).

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #13 (permalink)  
Antiguo 14/04/2011, 09:16
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años
Puntos: 43
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

Otra cosa que puedes hacer es crear un método en tu controlador "base" y te evitas de estar haciendo news en los controladores por ejemplo en mi framework yo tengo esto:
en mi controlador base tengo:
Código PHP:
Ver original
  1. abstract class Controller {
  2. ......
  3. /**
  4.      * Método para cargar librerías externas al core del framework
  5.      *
  6.      * @version 0.1
  7.      * @author Lucas M. sastre
  8.      * @access public
  9.      *
  10.      * @param <string> $nombre
  11.      * @return <void>
  12.      */
  13.     public function libreria($nombre) {
  14.         if(empty($nombre)) {
  15.         return false;
  16.         }
  17.  
  18.         if(is_array($nombre)) {
  19.         foreach($nombre as $plugin) {
  20.             $plugin = ucfirst($plugin);
  21.             //valido si existe el archivo de la libreria
  22.             if(!empty($plugin)) {
  23.             if(file_exists($this->Config->get('root').$this->Config->get('librerias').$plugin.'.php')) {
  24.                 //valido si no esta instanciada la clase previamente
  25.                 if(!class_exists($plugin)) {
  26.                 include_once($this->Config->get('root').$this->Config->get('librerias').$plugin.'.php');
  27.                 $this->$plugin = new $plugin();            
  28.                 }
  29.                 else {
  30.                 $this->$plugin = $plugin;              
  31.                 }
  32.  
  33.             }
  34.             else {
  35.                 $ruta = $this->Config->get('root').$this->Config->get('librerias').ucfirst($plugin).'.php';
  36.                 error_log("[".date("F j, Y, G:i")."] [Error: E_USER_NOTICE] [tipo Libreria] No se encuentra la libreria: {$plugin} en {$ruta}- \n", 3,$this->Config->get('root').'/errores.log');
  37.                
  38.                 return false;
  39.             }
  40.             }
  41.         }
  42.         }
  43.         else {
  44.         //valido si existe el archivo de la libreria
  45.         $nombre = ucfirst($nombre);
  46.         if(file_exists($this->Config->get('root').$this->Config->get('librerias').ucfirst($nombre).'.php')) {
  47.             //valido si no esta instanciada la clase previamente
  48.             if(!class_exists(ucfirst($nombre))) {
  49.             include_once($this->Config->get('root').$this->Config->get('librerias').ucfirst($nombre).'.php');
  50.             $this->$nombre = new $nombre();
  51.             }
  52.             else {
  53.             $this->$nombre = $nombre;
  54.             }
  55.  
  56.         }
  57.         else {
  58.             $ruta = $this->Config->get('root').$this->Config->get('librerias').ucfirst($nombre).'.php';
  59.             error_log("[".date("F j, Y, G:i")."] [Error: E_USER_NOTICE] [tipo Libreria]  No se encuentra la libreria: {$nombre} en {$ruta}\n", 3,$this->Config->get('root').'/errores.log');
  60.             //trigger_error("No se encuentra la libreria: {$nombre} en {$ruta}<br/>",E_USER_NOTICE);
  61.             return false;
  62.         }
  63.         }      
  64.     }
  65. .....
  66. }

y despues desde los controladores puedo hacer esto:
Código PHP:
Ver original
  1. class pep extends Controller{
  2.  public function index(){
  3.    $this->librerias('arreglos');
  4.    $this->arreglos->metodo();
  5. }
  6. //o podemos hacer esto
  7.  public function hola(){
  8.    $this->librerias(array('arreglos','email'));
  9.    $this->arreglos->metodo();
  10.    $this->email->metodo();
  11. }
  12.  
  13. }

espero que te sirva para guiarte. Salu2
  #14 (permalink)  
Antiguo 14/04/2011, 11:54
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 16 años, 4 meses
Puntos: 165
Respuesta: Donde incluir librerias.. modelo ¿? controlador¿?

Muchas gracias por tu ayuda!!

Un saludo!

Etiquetas: controlador, incluir, modelo
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 16:02.