- 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:
Pongo todos los ficheros usados (por orden de importancia) y luego comentaré: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
/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");
}
}
Código PHP:
'providers' => array(
// ....
'Illuminate\Workbench\WorkbenchServiceProvider',
'Clubajedrez\Biblioteca\ProveedorServicios',
),
Código:
/app/Clubajedrez/Biblioteca/Administracion/rutas.php"autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ], "psr-0": { "Clubajedrez": "app/" } },
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',
)
);
}
);
Código PHP:
<?php
Route::group(
array("prefix" => "biblioteca"),
function()
{
Route::get(
"/",
array("as" => "biblioteca.home",
function()
{
return View::make("biblioteca.publico::home");
})
);
}
);
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");
}
}
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');
}
}
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>
Código CSS:
Ver original
body { font-family: verdana; } .contenedor { width: 960px; margin: 0 auto; } .menu { clear: both; margin: 0; padding: 0; } .menu li { list-style: none; display: inline; }
/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>
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>
Código PHP:
<hr>
Club Ajedrez - Bibloteca
Código PHP:
@extends('biblioteca.admin::base')
@section('contenido')
<h2>Alta de libros</h2>
@stop
Código:
En este ejemplo tenemos:composer dump-autoload
- 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.