register(new Silex\Provider\SessionServiceProvider()); // Registrar el modulo de generador de URL $app->register(new Silex\Provider\UrlGeneratorServiceProvider()); // Módulo de Vistas $app->register(new Silex\Provider\TwigServiceProvider(), array( 'twig.path' => __DIR__ . '/vistas', )); // Módulo de acceso a datos $app->register(new Silex\Provider\DoctrineServiceProvider(), array( 'db.options' => array( 'driver' => 'pdo_mysql', 'host' => 'localhost', 'user' => 'root', 'password' => '', 'dbname' => 'gente', 'charset' => 'utf8', ), )); // Controlador de inicio. Por aqui empieza el circo. Lista los amigos $app->get('/', function() use ($app) { $sql = 'SELECT codigo,nombre,salario FROM amigos'; // fetchAll() ejecuta un SQL y lo lleva a un Array $empleados = $app['db']->fetchAll($sql, array()); // Lo enviamos a la vista pertinente return $app['twig']->render('inicio.twig.html', array('empleados' => $empleados)); })->bind('inicio'); // Controlador para eliminar un registro concreto (cuyo codigo viene de la vista inicio.twig.html) $app->get('/eliminar/{id}', function($id) use ($app) { // delete() borra. Se le pasa un array con campo => valor (clausulas WHERE) $rows = $app['db']->delete('amigos', array('codigo' => $id)); // Pongo en sesion el mensaje $app['session']->set('mensaje', 'Amigo eliminado'); // Lo enviamos a la vista de inicio return $app->redirect($app['url_generator']->generate('inicio')); })->bind('eliminar'); // Controlador de insertar (Lleva al formulario de nuevo empleado en insertar.twig.html) $app->get('/insertar', function() use ($app) { // Pongo en sesion el mensaje $app['session']->set('mensaje', 'Insertando un amigo nuevo'); return $app['twig']->render('insertar.twig.html', array()); })->bind('insertar'); // Controlador que recibe el formulario por POST e inserta en la BD $app->post('/insertar', function() use($app) { // insert() inserta un registro con los campos y valores que van en el Array. Codigo es autoincremental $rows = $app['db']->insert('amigos', array( 'nombre' => $app['request']->get('nombre'), 'salario' => $app['request']->get('salario'))); if( $rows <= 0 ){ // Pongo en sesion el mensaje $app['session']->set('mensaje', 'Ups...problema al insertar'); // No se ha podido insertar return $app['twig']->render('insertar.twig.html', array('nombre' => $app['request']->get('nombre'), 'salario' => $app['request']->get('salario'))); } else { // Pongo en sesion el mensaje $app['session']->set('mensaje', 'Amigo insertado correctamente'); // Insertado correctamente. Nos lleva de nuevo a la vista de inicio return $app->redirect($app['url_generator']->generate('inicio')); } })->bind('insertar_item'); // Controlador para editar un registro concreto. Muestra la misma vista que para insertar // PERO CON LOS VALORES ACTUALES $app->get('/editar/{id}', function($id) use ($app) { $sql = 'SELECT codigo, nombre, salario FROM amigos WHERE codigo = ?'; $empleado = $app['db']->fetchAssoc($sql, array($id)); // Pongo en sesion el mensaje $app['session']->set('mensaje', 'Cambiando datos de mi amigo'); // Va a la vista de insertar PERO INDICANDO QUE QUIERE EDITAR para que coloque los valores actuales return $app['twig']->render('insertar.twig.html', array('editar' => true, 'id' => $empleado['codigo'], 'nombre' => $empleado['nombre'], 'salario' => $empleado['salario'])); })->bind('editar'); // Controlador que recibe los datos del formulario y hace UPDATE templa $app->post('/editar', function() use ($app) { // update() lleva en una matriz los valores de SET y la clausula WHERE en otro Array $rows = $app['db']->update('amigos', array( 'nombre' => $app['request']->get('nombre'), 'salario' => $app['request']->get('salario')), array('codigo' => $app['request']->get('id'))); if( $rows <= 0 ){ // Pongo en sesion el mensaje $app['session']->set('mensaje', 'Problema al modificar mi amigo'); // No se ha podido hacer UPDATE return $app['twig']->render('insertar.twig.html', array('editar' => true, 'codigo' => $app['request']->get('id'), 'nombre' => $app['request']->get('nombre'), 'salario' => $app['request']->get('salario'))); } else { // Pongo en sesion el mensaje $app['session']->set('mensaje', 'Datos de mi amigo modificados'); // Se ha hecho el update correctamente return $app->redirect($app['url_generator']->generate('inicio')); } })->bind('editar_item'); // Que empiece el espectaculo $app->run();