Usando el widget DatePicker, la recogida de entradas de fechas de los usuarios se puede hacer de manera muy conveniente.
En el siguiente ejemplo nosotros utilizaremos un modelo Task
que tiene un atributo deadline
, el cual debería ser asignado por un
usuario usando un ActiveForm. El valor del atributo
debe ser almacenado como un unix timestamp en la base de datos.
En esta situación hay 3 componentes que funcionan juntos:
Primero, nosotros añadiremos el campo de entrada datepicker para el formulario usando el método yii\widgets\ActiveField::widget() del campo del formulario:
<?= $form->field($model, 'deadline')->widget(\yii\jui\DatePicker::className(), [
// si estás usando bootstrap, la siguiente linea asignará correctamente el estilo del campo de entrada
'options' => ['class' => 'form-control'],
// ... puedes configurar más propiedades del DatePicker aquí
]) ?>
El segundo paso es configurar el validador de fechas en el método rules() del modelo:
public function rules()
{
return [
// ...
// asegura que los valores vacíos son almacenados como NULL en la base de datos
['deadline', 'default', 'value' => null],
// valida la fecha y sobrescribe `deadline` con el unix timestamp
['deadline', 'date', 'timestampAttribute' => 'deadline'],
];
}
Nosotros tenemos también que añadir un filtro de valor por defecto que asegure
que los valores vacíos son almacenados como NULL
en la base de datos.
Puedes saltarte este paso si el valor de tu fecha es requerido.
El formato por defecto de ambos, datepicker y el validador de fechas (date validator) es el valor de Yii::$app->formatter->dateFormat
así que puedes usar esta
propiedad para configurar el formato de las fechas para toda la aplicación.
Para cambiar el formato de la fecha debes configurar yii\validators\DateValidator::format y yii\jui\DatePicker::$dateFormat