Anuncio

Entra a participar en el Slack de Laraveles. Solicita tu invitación aquí.
Nos ayuda a manter la comunidad

#1 16/05/2014 15:40:02

Cuervo
Miembro
Localidad: Argentina
Registrado: 16/01/2014
Mensajes: 85

[LisandroSeijo/CorvoRoutes] Clase para organizar un proyecto

Como vi que la duda existencial más grande que tenemos después del significado de la vida es cómo organizar nuestros proyectos cuando empiezan a ser medianos/grandes y empezamos a escuchar una vocecita que dice "Symfony no tiene linda sintaxis pero ahora no tendría este problema", decidí hacer una clase para que empecemos a llegar a una solución entre todos.

Por ahora se llama CorvoRoutes (acá está el repositorio), la estoy haciendo de a ratos hace 2 o 3 días asique falta acomodarla pero me gustaría ver si pueden tirar ideas. Lo que hace por ahora es crearnos carpetas para las distintas partes de nuestra web y facilitarnos el acceso a las vistas, artchivos de configuración, y poder tener las rutas separadas.

La instalación es común como cualquier paquete.

Agregamos corvo/router en las dependencias de composer.json, también en el autoload la carpeta con psr-0 o psr-4 que apunte a app/web (que es donde va a agregar las secciones)

require {
    ...,
    "corvo/router": "dev-master"
}

autoload {
    "classmap": [
      ...
    ],
    "psr-0": {
      "": "app/web"
    }
}

Escribimos en la terminal composer update y esperamos que la instale.

Ahora en app/config/app.php agregamos la clase serviceprovider Corvo\Routes\Providers\CorvoRoutesServiceProvider

'providers' => array(
  'Illuminate\Foundation\Providers\ArtisanServiceProvider',
  ...
  'Corvo\Routes\Providers\CorvoRoutesServiceProvider'
);

Ahora, vamos a agregar una sección, tenemos nuestra página, queremos agregar un blog, y la parte de administración, las queremos por separado, para tenerlo más organizado. Para crear cada sección usamos artisan con el comando corvo:section [nombre]

php artisan corvo:section Blog

y

php artisan corvo:section Admin

Dentro de proyect/app/ nos crea una carpeta llamada web y dentro las dos secciones, Blog y Admin, y queda así:

|--app
|--|--web
|--|--|--Blog
|--|--|--|--Config
|--|--|--|--Controllers
|--|--|--|--Library
|--|--|--|--Models
|--|--|--|--routes.php
|--|--|--|--Views
|--|--|--Admin
|--|--|--|--Config
|--|--|--|--Controllers
|--|--|--|--Library
|--|--|--|--Models
|--|--|--|--routes.php
|--|--|--|--Views

Ahora, cada sección tiene sus propias vistas, rutas, controladores, etc.

En Blog/Views creamos la vista index.blade.php

<h1>Blog donde hablo de Laravel</h1>

@foreach($posts as $post)
<div>
    <h2>{{ $post->title }}</h2>
    <p>{{ $post->content }}</p>
</div>
@endforeach

Agregamos en proyect/app/web/Blog/routes.php:

Route::group(array('prefix' => 'blog'), function ()
{
    Route::get('/', function()
    {
        $posts = Blog\Models\Post::all();
        return View::make('Blog::index', ['posts' => $posts]);
    });
});

Fíjense que dirctamente usamos Blog::index, el namespace ya está creado (si quieren ver más @IsraelOrtuno habla sobre eso acá), y para todas las vistas del blog accedemos con Blog::vista. Lo mismo que para la sección Admin usamos Admin::vista y si tuviésemos un foro sería Foro::vista o el nombre que le hayamos dado.

Para los archivos de configuración es lo mismo, si tenemos el archivo Blog/Config/general.php podemos acceder a el con:

Config::get('Blog::general.item')

Ahora, para que esto funcione tenemos que llamar al método load() de la clase CorvoRoutes.
En proyect/app/routes.php ponemos:

CorvoRoutes::load();

Y ya estaría funcionando.

En el repositorio https://github.com/LisandroSeijo/CorvoRoutes van a ver un par de cosas más que pueden hacer como cambiar la configuración o usar otras carpetas aparte de app/web (explicado de una forma más precaria porque mi inglés es lamentable).

Todavía me falta pulirle cosas y quiero agregarle:
- Que cada sección tenga su propia configuración y se manejen independientes
- Agregarle integración con way generators, yo no la uso pero vi que acá la usan
- Agregarle que se puedan crear con artisan secciones en rutas que no sean app/web
- Pulirle cosas como que si agregás el nombre con minúscula, el namespace igualmente se agregue con mayúscula, pero son correciones chicas.

Por ahora eso es todo.

Me gustaría que tiren ideas y la podamos armar entre todos, porque todos tenemos casos de usos distintos y la vamos a poder hacer más completa y que sirva lo más posible.

Pruébenla, díganme los errores que tenga, y si quieren hacerle un fork y agregarle cosas mucho mejor.

Última edición por Cuervo (16/05/2014 15:45:22)

Desconectado

Pié de página <- REVISAR ->

Powered by FluxBB

Ayuda a mantener la comunidad: