VeneHosting.com :: Tu Hosting en Venezuela

Autor Tema: ( SOLUCIONADO ) ¿Como obtener la ruta absoluta?  (Leído 554 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado remizero

  • Novato
  • *
  • Mensajes: 39
  • Puntuación: 2
  • Sexo: Masculino
    • Ver Perfil
    • Un mundo abierto... Un mundo libre
( SOLUCIONADO ) ¿Como obtener la ruta absoluta?
« : 03 de noviembre de 2011, 05:58:53 pm »
Buenas amigos de php venezuela.

En esta oportunidad les escribo para hacerles una consulta sobre rutas absolutas y rutas relativas, pido disculpas y un poco de paciencia por lo largo del mensaje pero es necesario para la correcta comprensión de mi inquietud.

He desarrollado una especie de Hibernate pero para PHP obvio :P, y estoy haciendo pruebas para ponerlo en producción y sacarlo a la luz pública para su uso de forma estandar en proyectos que manejen base de datos.

Explico un poco que es lo que tengo y luego la pregunta.

Tengo esta estructura de carpetas para la API:

Código: [Seleccionar]
raiz/api/bd/bd.php
raiz/api/bd/conexion.php
raiz/api/bd/comunes/...
raiz/api/bd/configuracion/...
raiz/api/bd/documentacion/...
raiz/api/bd/estructura/...
raiz/api/bd/motores/...
raiz/api/bd/reflexion/...
raiz/api/bd/sql/...

Y esto es una estructura de un proyecto para probar la API:

Código: [Seleccionar]
raiz/modelo/
raiz/modulos/login/login.php
raiz/modulos/login/loginCtrl.php
raiz/modulos/...
raiz/config.php
raiz/index.php

El problema radica en las rutas que estoy utilizando, todas relativas por ahora. Por ejemplo si accedo directamente a api/bd/bd.php desde raiz/index.php no tengo ningun problema, todo funciona a la perfección, pero si intento hacerlo a travez de raiz/modulos/login/login.php ( que es un formulario que a su vez llama a raiz/modulos/login/loginCtrl.php que hace todo el proceso de control y validación del formulario login.php ), que lo estoy llamando en raiz/index.php, aquí comienza el quebradero de cabeza.

Al intentar hacer esto último, como estoy llamando a raiz/api/bd/bd.php desde raiz/modulos/login/loginCtrl.php las rutas no encuentran los archivo correspondientes para el manejo adecuado de las operaciones que se quieran realizar, obviamente porque estoy trabajando con las rutas relativas. Pero el problema va un poco más allá y por eso la razón de utilizar rutas absolutas, y es que no necesariamente al usar esta API se le vaya a dar la ubicación que yo le estoy dando, porque cada quien tendrá su propia estructura de desarrollo.

He intentado de diferentes formas obtener la ruta absoluta para cada uno de los include con un exito relativo, y relativo porque siempre hay algún archivo que no termina por conseguir.

En fin mi pregunta es:

¿Como puedo hacer para definir las rutas absolutas de esta API para poder ubicarla en cualquier carpeta y que no afecte la integridad de su funcionamiento?

De antemano muchas gracias.
« Última Modificación: 05 de noviembre de 2011, 02:46:58 pm por remizero »
Si quieres ver realmente cambios, comienza por cambiar tu primero.

Desconectado dels

  • Usuario Dedicado
  • ***
  • Mensajes: 101
  • Puntuación: 1
  • Sexo: Masculino
  • Desarrollador Web, Pc, Dispositivos Móviles
    • Ver Perfil
    • Dels
Re:¿Como obtener la ruta absoluta?
« Respuesta #1 : 04 de noviembre de 2011, 08:18:12 am »
Hola remizero,
Saludos.

Te puedo presentar otra alternativa para evitar este tipo de problema.

Me encanta aplicar el método MVC (modelo, vista, controlador) http://es.wikipedia.org/wiki/Modelo_Vista_Controlador  , que me imagino debes conocer, y aquí es cuando te aconsejo aplicar ese "controlador" para evitar estos dolores de cabeza.

A pesar de que te pregunta es otra, espero que en algún futuro lo apliques, y mi manera de manejar esos archivos, basado en tu ejemplo, sería de la siguiente manera:

Tienes tu estructura de carpetas API:

Código: [Seleccionar]
raiz/api/bd/bd.php
raiz/api/bd/conexion.php
raiz/api/bd/comunes/...
raiz/api/bd/configuracion/...
raiz/api/bd/documentacion/...
raiz/api/bd/estructura/...
raiz/api/bd/motores/...
raiz/api/bd/reflexion/...
raiz/api/bd/sql/...

Estructura del proyecto para la API:

Código: [Seleccionar]
raiz/modelo/
raiz/modulos/login/login.php
raiz/modulos/login/loginCtrl.php
raiz/modulos/...
raiz/config.php
raiz/index.php

Suponiendo que tengo un formulario para loguearse, necesitaría estos archivos:

Código: [Seleccionar]
raiz/modulos/login/login.php       // Interfaces de usuario para el formulario
raiz/modulos/login/loginCtrl.php // Configuración para comprobar en la db si el usuario existe

raiz/api/bd/bd.php                     // Configuración a la DB
raiz/api/bd/conexion.php           // Conexión a la DB.
raiz/controladorLogins.php        // Controlador para administrar el logins.
raiz/index.php                          // Indice de la página.

Mi primera pantalla es el index.php, en el cual, está compuesta por un encabezado, un cuerpo y un pie. En ese index.php llamaría a "controladorLogins.php" si el usuario no se ha logueado:

Archivo controladorLogins.php:
Código: [Seleccionar]
<?php
include ("raiz/api/bd/bd.php");
include (
"raiz/api/bd/conexion.php");
include (
"raiz/modulos/login/loginCtrl.php");
include (
"raiz/modulos/login/login.php");
?>


Lo mismo sucediera con los demás archivos dependiendo de la acción del usuario.
otro ejemplo:

Documentación:

Si el usuario presiona sobre un menú llamado Documentación, llamaría una acción que cargue y vea alguna documentación en la pagina.

El usuario presionó sobre este link:
Código: [Seleccionar]
<a href="controladorDocumentacion.php?accion=ver">Ver Documentación<a/>

La página se dirige a "controladorDocumentacion.php" con una variable llamada "accion" que contiene la palabra "ver"

controladorDocumentacion.php verifica y muestra según la acción que solicitó el usuario:

Código: [Seleccionar]
<?php 
if (accion == "ver"){
include (
"raiz/api/bd/bd.php");
include (
"raiz/api/bd/conexion.php");
include (
"raiz/configuracion.php");
include (
"raiz/modulos/documentacion/verDocumentos.php");
}
?>


Como notarás, los controladores siempre lo coloco en la carpeta raíz, donde está el index.php y de ahí comienzo a llamar a los demás archivos que se encuentra en las subcarpetas.

Según la acción que tome el usuario, voy incluyendo los archivos necesarios, como en el ejemplo anterior.

Espero que te sirva para el próximo proyecto y así evitaría esos llamados desde otras subcarpetas, que la verdad dan dolores de cabeza así como lo mostraste.

Saludos.
Desarrollador de aplicaciones web, Pc y dispositivos móviles

Gnu/Linux User: #529556
Ubuntu User number: #33551
User identica.ca: k3v1nd315
Wikipedia ID: 1821960
flickr: http://www.flickr.com/photos/k3v1nd315/
Twitter: http://twitter.com/#!/k3v1ndels
IRC freenode user: KDels

Desconectado remizero

  • Novato
  • *
  • Mensajes: 39
  • Puntuación: 2
  • Sexo: Masculino
    • Ver Perfil
    • Un mundo abierto... Un mundo libre
Re:¿Como obtener la ruta absoluta?
« Respuesta #2 : 05 de noviembre de 2011, 02:46:33 pm »
Gracias por el comentario dels.
Saludos.

Ya he logrado obtener la ruta de forma dinámica tal como quiero.

En efecto trabajo con MVC y por otro lado todo está programado en POO. De hecho, dentro de la API, tengo una carpeta llamada configuración donde está el archivo config.php que hace lo que has expuesto.

Solución:
Código: [Seleccionar]
if ( !defined ( 'RAIZ' ) ) {

    define ( 'RAIZ' , $_SERVER [ 'DOCUMENT_ROOT' ] );//si no está definida la constante RAIZ la defino
}

// hace los reemplazos necesarios para obtener la carpeta interna de la API desde la RAIZ
// del sitio hasta donde se encuentra la raíz de la API, esta constante también puede ser
// utilizada para acceder a los recursos internos de la API desde el index de la raíz del sitio.
define ( 'ECO_BD', str_replace ( RAIZ, '', str_replace ( 'configuracion', '', str_replace ( '\\', '/', dirname ( __FILE__ ) ) ) ) );

// Define la ruta absoluta a ser usada dentro de la API
define ( 'API_BD' , RAIZ . ECO_BD );

Y con esto queda resuelto el problema de acceso a cualquier recurso interno de la API :).

Espero que esta solución le sirva a otras personas con este mismo problema.

Cuando termine las pruebas de estabilidad de la API la publico para que la puedan probar y dar sus comentarios buenos y malos jejeje.

De antemano les comento que solo tendrán que hacer algo como este ejemplo:

Código: [Seleccionar]
$tu_objeto = new tu_objeto ();

$api = new API ();

$api->insertar ( $tu_objeto );

$api->modificar ( $tu_objeto );

$api->eliminar ( $tu_objeto );

$api->buscar ( $tu_objeto );


Entre otros tipos de operaciones sobre tablas, campos, bases de datos, como crear, modificar, eliminar, busquedas personalizadas, evita SQLinyection, valida tipos de datos (he tenido que definir algunos tipos para poder hacer las validaciones), y operaciones con imágenes y base de datos, y por último compatibilidad con casi todas las bases de datos existentes en el mercado. Y ya no tendrán que preocuparse por hacer tiras SQL y muchas otras ventajas que le he añadido a esta API.

Por último comentar que también me falta la documentación para que puedan trabajar sobre ella :P.

Como les comenté esto es un adelanto de lo que viene en esta API para PHP, que espero se convierta en un estándar para la programación jeje.

Hasta una próxima.
Si quieres ver realmente cambios, comienza por cambiar tu primero.

PHP de Venezuela

Re:¿Como obtener la ruta absoluta?
« Respuesta #2 : 05 de noviembre de 2011, 02:46:33 pm »

 

PHP de Venezuela on Facebook