jueves, 23 de abril de 2015

Quitando el espacio de nombre "public" de la url en laravel 5



Quizás a muchas personas como yo al iniciar LARAVEL se hayan sentido incomodas al ejecutar el proyecto en el navegador. Quizás muchos de los que leemos este blog estamos acostumbrados a la tradicional forma de acceder a nuestra aplicación donde solo escribimos el host, el puerto y seguidamente el nombre de nuestro proyecto, quedando algo parecido a continuación:
http://servidor:puerto/nombreProyecto
Ejemplo en un entorno de desarrollo:
http://localhost/pruebPhp

Al crear un proyecto laravel vemos que por defecto encontramos una carpeta llamada public la cual como su nombre lo indica es una carpeta de recursos públicos y a la cual es donde pueden acceder los usuarios de la aplicación (todas las peticiones llegan a esta carpeta). Dentro de esta carpeta nosotros podemos almacenar todos los archivos estáticos y que queremos hacer públicos a los usuarios como hojas de estilo css, archivos javascript, imágenes, etc; en ella encontramos un archivo muy importante llamado index.php el cual es el responsable de iniciar el framework.
Ahora veamos que tenemos que hacer para decirle a nuestro framework que ya no queremos la palabra “public” en nuestra url.

Lo primero que haremos será crear un proyecto llamado noPublicUrl, utilizando composer nos dirigimos a la carpeta donde se ejecutan nuestros archivos php (varía dependiendo el entorno) y escribimos en la consola: composer create-project laravel/laravel noPublicUrl --prefer-dist



Una vez creado podemos verificar de que todo este correctamente configurado
 
 

Seguidamente cortamos todos los archivos y carpetas que se encuentran dentro de la carpeta public y los pegamos en la raíz del proyecto


archivos dentro de public

aca estamos en la raíz del proyecto






 



Eliminamos la carpeta public ya que esta se encuentra ahora vacía. Lo siguiente y último que haremos será modificar el archivo index.php que ahora se encuentra en la raíz, lo abrimos con nuestro editor de preferencia y modificamos las siguientes líneas.



Las dejamos tal cual como muestra la siguiente imagen.

En resumen lo que hicimos fue eliminar los dos puntos seguidos (..) ya que lo que nos dicen estos puntos es que para encontrar el archivo autoload.php y app.php ambos ubicados dentro de una carpeta llamada bootstrap era necesario ir un directorio atrás para luego entrar a la carpeta bootstrap. Pero como nosotros cortamos los archivos de la carpeta public y retrocedimos un directorio atrás quedando en la raíz del proyecto estos puntos seguidos (..) ya no son necesarios. Guardamos el archivo index.php y lo cerramos.

Si ahora ejecutamos nuestro proyecto como normalmente lo haríamos obtendríamos un error ya que el framework ya no está apuntando a la carpeta public





Ahora ejecutemos el proyecto sin agregarle el espacio de nombre public

http://localhost/noPublicUrl


Observamos que ya funciona nuestro proyecto sin necesidad de agregarle public seguido del proyecto. Quizás por motivos de organización los archivos css y js nos gustaría tenerlos más organizados, en mi caso creo una carpeta llamada assets y dentro copio todos estos archivos.
Recuerda que cuando quieras incluir tus hojas de estilo y archivos js ahora apuntaras a la raíz del proyecto no a la carpeta public

En mi caso como guardo los css y js en una carpeta assets yo llamaría los estilos, javascript y cualquier otro recurso de la siguiente manera


<link href="{{ asset('assets/css/bootstrap.min.css') }}" rel="stylesheet">

<script src="{{ asset('assets/js/jquery-1.11.2.min.js') }}"></script>

Y así cualquier otro recurso que incluyamos dentro de la carpeta assets. Si por el contrario todos tus recursos están en la raíz entonces seria así: 

<link href="{{ asset('css/bootstrap.min.css') }}" rel="stylesheet">
<script src="{{ asset('js/jquery-1.11.2.min.js') }}"></script>