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

PHP OO Aporte: Laravel. Organización a la carta

Estas en el tema de Aporte: Laravel. Organización a la carta en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Antes de empezar quiero comentar algunas cosas: Con Laravel no tengo hecho ningún proyecto. De hecho, sólo he usado Code Igniter y alguna vez Silex ...
  #1 (permalink)  
Antiguo 20/07/2013, 01:52
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 9 meses
Puntos: 27
Información Aporte: Laravel. Organización a la carta

Antes de empezar quiero comentar algunas cosas:
  • Con Laravel no tengo hecho ningún proyecto. De hecho, sólo he usado Code Igniter y alguna vez Silex para cosas básicas.
  • En condiciones normales, escribiría el código en inglés.
  • Esta forma de organizar el código es simplemente para ver si se puede hacer.
  • Depende de lo que se necesite, se pueden usar simplemente la estructura normal de Laravel o paquetes propios si tenemos pensado reutilizar código con otras aplicaciones.
  • Hay que experimentar.
  • Reemplazar los tres asteriscos (***) por la barra / al revés, que el editor no me deja ponerla.

El objetivo es desarrollar un portal para un club de ajedrez. El portal tendrá áreas públicas informativas y privadas, con secciones como:
  • Noticias del club
  • Información para socios
  • Biblioteca

Me voy a centrar en el área de la Biblioteca, que será una sección propia donde se podrá consultar los libros que tiene el club, gestionar préstamos, altas de libros, ...

Realmente es un módulo que podría hacerse genérico, no solo aplicable a un club de ajedrez. Debería hacerse a través de "php artisan workbench Clubajedrez/Biblioteca --resources", que añade a lo que vamos a ver su propio composer, migraciones, configuracion, idiomas, ...

Esta es la estructura de directorios que he decidido que tenga:

Código:
app/
|-- Clubajedrez
|   `-- Biblioteca
|       |-- Administracion
|       |   |-- Controladores
|       |   `-- Plantillas
|       |       `-- parcial
|       |-- PlantillasComunes
|       `-- Publico
|           |-- Controladores
|           `-- Plantillas
|-- commands
|-- config
|   |-- packages
|   `-- testing
|-- controllers
|-- database
|   |-- migrations
|   `-- seeds
|-- lang
|   `-- en
|-- models
|-- start
|-- storage
|   |-- cache
|   |-- logs
|   |-- meta
|   |-- sessions
|   `-- views
|-- tests
`-- views
    `-- emails
        `-- auth
Pongo todos los ficheros usados (por orden de importancia) y luego comentaré:

/app/Clubajedrez/Biblioteca/ProveedorServicios.php
Código PHP:
<?php

namespace Clubajedrez
***Biblioteca;

use 
Illuminate***Support***ServiceProvider;
use 
View;

class 
ProveedorServicios extends ServiceProvider
{
    public function 
register()
    {

    }

    public function 
boot()
    {
        include 
__DIR__."/Administracion/rutas.php";
        include 
__DIR__."/Publico/rutas.php";

        
View::addNamespace("biblioteca.admin"__DIR__."/Administracion/Plantillas");
        
View::addNamespace("biblioteca.publico"__DIR__."/Publico/Plantillas");
        
View::addNamespace("biblioteca"__DIR__."/PlantillasComunes");
    }
}
/app/config/app.php

Código PHP:
 'providers' => array(
   
// ....
   
'Illuminate\Workbench\WorkbenchServiceProvider',
   
'Clubajedrez\Biblioteca\ProveedorServicios',

    ), 
/composer.json

Código:
	"autoload": {
		"classmap": [
			"app/commands",
			"app/controllers",
			"app/models",
			"app/database/migrations",
			"app/database/seeds",
			"app/tests/TestCase.php"
		],
		"psr-0": {
			"Clubajedrez": "app/"
		}
	},
/app/Clubajedrez/Biblioteca/Administracion/rutas.php

Código PHP:
<?php

Route
::group(
    array(
'prefix' => 'biblioteca/admin'),
    function()
    {
        
Route::get(
            
'/',
            array(
                
'as'  => 'biblioteca.admin.home',
                
'uses' => 'Clubajedrez\Biblioteca\Administracion\Controladores\Home@getIndice',
            )
        );

        
Route::get(
            
'alta',
            array(
                
'as'  => 'biblioteca.admin.alta',
                
'uses' => 'Clubajedrez\Biblioteca\Administracion\Controladores\Alta@getIndice',
            )
        );
    }
);
/app/Clubajedrez/Biblioteca/Publico/rutas.php

Código PHP:

<?php

Route
::group(
    array(
"prefix" => "biblioteca"),
    function()
    {
        
Route::get(
            
"/",
            array(
"as"  => "biblioteca.home",
            function()
            {
                return 
View::make("biblioteca.publico::home");
            })
        );
    }
);
/app/Clubajedrez/Biblioteca/Administracion/Controladores/Home.php

Código PHP:

<?php

namespace Clubajedrez
***Biblioteca***Administracion***Controladores;

use 
BaseController;
use 
View;

class 
Home extends BaseController
{
    public function 
getIndice()
    {
        return 
View::make("biblioteca.admin::base");
    }
}
/app/Clubajedrez/Biblioteca/Administracion/Controladores/Alta.php

Código PHP:

<?php

namespace Clubajedrez
***Biblioteca***Administracion***Controladores;

use 
BaseController;
use 
View;

class 
Alta extends BaseController
{
    public function 
getIndice()
    {
        return 
View::make('biblioteca.admin::alta-libro');
    }
}
/app/Clubajedrez/Biblioteca/Administracion/Plantillas/base.blade.php

Código PHP:

<!DOCTYPE html>
<
html>
<
head>
    <
meta charset="utf-8">
    <
title>Administración de la biblioteca</title>
    {{ 
HTML::style('biblioteca/css/estilo.css') }}
</
head>
<
body>

    <
div class="contenedor">

    @include(
'menu')

    @include(
'biblioteca.admin::parcial.menu')

    @
yield('contenido')

    @include(
'biblioteca::pie')

    </
div>

</
body>
</
html
/public/biblioteca/css/estilo.css

Código CSS:
Ver original
  1. body {
  2.     font-family: verdana;
  3. }
  4.  
  5. .contenedor {
  6.     width: 960px;
  7.     margin: 0 auto;
  8. }
  9.  
  10. .menu {
  11.     clear: both;
  12.     margin: 0;
  13.     padding: 0;
  14. }
  15.  
  16. .menu li {
  17.     list-style: none;
  18.     display: inline;
  19. }

/app/views/menu.blade.php

Código PHP:
<ul class="menu">
    <
li>{{ link_to_route('biblioteca.admin.home''Administración de la biblioteca') }}</li>
</
ul>

<
hr
/app/Clubajedrez/Biblioteca/Administracion/Plantillas/parcial/menu.blade.php

Código PHP:
<ul class="menu">
    <
li>{{ link_to_route("biblioteca.admin.home""Inicio") }}</li>
    <
li>{{ link_to_route("biblioteca.admin.alta""Nuevo libro") }}</li>
</
ul
/app/Clubajedrez/Biblioteca/PlantillasComunes/pie.blade.php

Código PHP:
<hr>

Club Ajedrez Bibloteca 
/app/Clubajedrez/Biblioteca/Administracion/Plantillas/alta-libro.blade.php

Código PHP:
@extends('biblioteca.admin::base')

@
section('contenido')

<
h2>Alta de libros</h2>

@
stop 
Para que composer localice las nuevas clases, hay que ejecutar en el raiz del proyecto (donde está composer.json):

Código:
composer dump-autoload
En este ejemplo tenemos:
  • Una estructura de ficheros absolutamente inventada
  • Agrupación de rutas
  • Nombres para rutas, que facilita luego llegar a ellas y que permite cambiar la url sin tocar prácticamente nada de código
  • Creación de links asociados a un nombre
  • Herencia de plantillas
  • Uso de plantillas en distintos espacios de nombres

Creo que no falta ningún fichero. Luego pondré algunas notas sobre todo esto.

Última edición por eternoaprendiz; 20/07/2013 a las 01:58

Etiquetas: aportes, laravel
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

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 18:41.