Existen muchos casos en donde tenemos que solicitar una fecha en un formulario y que mejor opción que un datepicker. Si, ese mini calendario que se despliega para ayudar al usuario a escribir la fecha deseada de una forma más cómoda.
Quiero mostrar como podemos colocar de forma sencilla y personalizada de utilizar bootstrap-datepicker en un formulario y asegurarnos que la información llega correctamente al controlador.
Muy bien, vamos a descargar los archivos del bootstrap-datepicker en la página oficial de bootstrap-datepicker sandbox, la cual además contiene un generador de datepicker con suficientes opciones para resolver cualquier requerimiento especial que pueda tener nuestro proyecto, el cual utilizaremos posteriormente.
Ahora sí, descomprimimos y colocamos las tres carpetas descargadas (local, js y css) en una capeta que vamos a crear con el nombre de datePicker en nuestro directorio public, para mantener el orden.
En la documentación oficial de este plugin nos mencionan que tiene como requerimiento:
Así que vamos a crear nuestra plantilla con todas las dependencias necesarias y un simple form:
En la carpeta resource/views creamos un archivo llamado datepicker.blade.php con lo siguiente:
<!DOCTYPE html>
<html>
<head>
<title>Datepicker</title>
<link href="https://fonts.googleapis.com/css?family=Lato:100" rel="stylesheet" type="text/css">
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
<!-- Jquery -->
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<!-- Datepicker Files -->
<link rel="stylesheet" href="{{asset('datePicker/css/bootstrap-datepicker3.css')}}">
<link rel="stylesheet" href="{{asset('datePicker/css/bootstrap-standalone.css')}}">
<script src="{{asset('datePicker/js/bootstrap-datepicker.js')}}"></script>
<!-- Languaje -->
<script src="{{asset('datePicker/locales/bootstrap-datepicker.es.min.js')}}"></script>
</head>
<body>
<div class="container">
<div class="content">
<div class="panel panel-default">
<div class="panel-body">
<div class="col-md-4 col-md-offset-4">
<form action="/test/save" method="post">
<label for="date">Fecha</label>
<input type="text" class="form-control datepicker" name="date">
<button type="submit" class="btn btn-default btn-primary">Enviar</button>
</form>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
Nota: también como se observa hice la inclusión de los archivos anteriormente descargados.
Ahora, agregamos la rutas correspondientes en el archivo HTTP/routes.php :
Route::get('/test/datepicker', function () {
return view('datepicker');
});
Podemos ver nuestro formulario en la dirección: http://nombre_de_tu_app/test/datepicker.
Bien, ahora sí volvamos a la página oficial de bootstrap-datepicker sandbox y generemos el código del datapicker con las configuraciones deseadas.
Notarán que al seleccionar alguna propiedad se modifica en la parte inferior el código que vamos a copiar. Además se muestra un input que permite visualizar la configuración que le dimos.
Yo elegí la opción autoclose, cambié el formato de la fecha y elegí el lenguaje español, por lo cual me generó el siguiente código:
$('#sandbox-container input').datepicker({
format: "dd/mm/yyyy",
language: "es",
autoclose: true
});
Solo por comodidad voy a cambiar la línea
$('#sandbox-container input')por lo siguiente:
$('.datepicker')de esta forma cualquier input que tenga la clase datepicker funcionará.
Muy bien, nuestro código de la vista datepicker.blade.php completo quedaría de la siguiente forma:
<!DOCTYPE html>
<html>
<head>
<title>Datepicker</title>
<link href="https://fonts.googleapis.com/css?family=Lato:100" rel="stylesheet" type="text/css">
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
<!-- Jquery -->
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<!-- Datepicker Files -->
<link rel="stylesheet" href="{{asset('datePicker/css/bootstrap-datepicker3.css')}}">
<link rel="stylesheet" href="{{asset('datePicker/css/bootstrap-standalone.css')}}">
<script src="{{asset('datePicker/js/bootstrap-datepicker.js')}}"></script>
<!-- Languaje -->
<script src="{{asset('datePicker/locales/bootstrap-datepicker.es.min.js')}}"></script>
</head>
<body>
<div class="container">
<div class="content">
<div class="panel panel-default">
<div class="panel-body">
<div class="col-md-4 col-md-offset-4">
<form action="/test/save" method="post">
<div class="form-group">
<label for="date">Fecha</label>
<div class="input-group">
<input type="text" class="form-control datepicker" name="date">
<div class="input-group-addon">
<span class="glyphicon glyphicon-th"></span>
</div>
</div>
</div>
<button type="submit" class="btn btn-default btn-primary">Enviar</button>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$('.datepicker').datepicker({
format: "dd/mm/yyyy",
language: "es",
autoclose: true
});
</script>
</body>
</html>
Vamos a verificar que la información llega correctamente a nuestro controlador, para ello vamos a crear DateController con el comando:
php artisan make:controller DateController
Ahora, agregamos la rutas correspondientes en el archivo HTTP/routes.php :
Route::post('/test/save', ['as' => 'save-date',
'uses' => 'DateController@showDate',
function () {
return '';
}]);
Y el código de nuestro controlador únicamente para mostrar la información de la variable quedaría:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class DateController extends Controller
{
function showDate(Request $request)
{
dd($request->date);
}
}
Podemos acceder nuevamente a nuestro formulario y verificar que funciona:
Al hacer click en enviar, veremos que la fecha llega perfectamente a nuestro controlador:
Enlaces Relacionados
- Creando formularios con el paquete Styde/Html
- Rutas de tipo POST y Formularios
- Captcha en tus formularios con Laravel 5
- Integrando los componentes Html y Form a Laravel
Espero les haya gustado y les sea útil. Recuerden comentar y compartir.
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.
Lección anterior GitGutter para Sublime Text Lección siguiente Instalar PHP Code Sniffer en Sublime Text



