1. Go to this page and download the library: Download gerardo-cornejo/batch library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
gerardo-cornejo / batch example snippets
namespace App\Batch;
class Reader
{
public static function execute($params): array
{
// Implementa la lógica de lectura
return $data;
}
}
namespace App\Batch;
class Processor
{
public static function execute(array &$data)
{
// Implementa la lógica de procesamiento
// Los datos se pasan por referencia para modificación
}
}
namespace App\Batch;
class Writer
{
public static function execute(array &$data)
{
// Implementa la lógica de escritura
}
}
namespace App\Batch;
use CodeIgniter\CLI\CLI;
class Reader
{
public static function execute($params): array
{
CLI::write('Iniciando lectura de datos...');
// Ejemplo: leer desde archivo CSV
$file = $params['file'] ?? '';
$data = [];
if (file_exists($file)) {
$handle = fopen($file, 'r');
while (($row = fgetcsv($handle)) !== false) {
$data[] = $row;
}
fclose($handle);
}
CLI::write(sprintf('Leídos %d registros', count($data)));
return $data;
}
}
namespace App\Batch;
use CodeIgniter\CLI\CLI;
use Config\Services;
class Processor
{
public static function execute(array &$data)
{
CLI::write('Procesando datos...');
$db = Services::database();
foreach ($data as &$row) {
// Ejemplo: validar y transformar datos
$row['processed_at'] = date('Y-m-d H:i:s');
$row['status'] = 'processed';
// Realizar validaciones
if (empty($row['email'])) {
$row['status'] = 'error';
$row['error'] = 'Email requerido';
}
}
CLI::write('Procesamiento completado');
}
}
namespace App\Batch;
use CodeIgniter\CLI\CLI;
use Config\Services;
class Writer
{
public static function execute(array &$data)
{
CLI::write('Guardando datos...');
$db = Services::database();
$builder = $db->table('batch_results');
$successful = 0;
$errors = 0;
foreach ($data as $row) {
if ($row['status'] === 'processed') {
$builder->insert($row);
$successful++;
} else {
CLI::error('Error en registro: ' . ($row['error'] ?? 'Error desconocido'));
$errors++;
}
}
CLI::write(sprintf('Guardados: %d, Errores: %d', $successful, $errors));
}
}
namespace App\Commands;
use App\Batch\Processor;
use App\Batch\Reader;
use App\Batch\Writer;
use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;
class Execute extends BaseCommand
{
protected $group = 'Batch';
protected $name = 'batch:execute';
protected $description = 'Ejecuta un proceso batch completo';
protected $usage = 'batch:execute [options]';
protected $arguments = [
'file' => 'Archivo de entrada para procesar'
];
protected $options = [
'--dry-run' => 'Ejecutar sin guardar cambios'
];
public function run(array $params)
{
CLI::write('=== Iniciando Proceso Batch ===', 'green');
try {
// Leer datos
$data = Reader::execute($params);
if (empty($data)) {
CLI::error('No se encontraron datos para procesar');
return;
}
// Procesar datos
Processor::execute($data);
// Escribir datos (solo si no es dry-run)
if (!CLI::getOption('dry-run')) {
Writer::execute($data);
} else {
CLI::write('Modo dry-run: No se guardaron cambios', 'yellow');
}
CLI::write('=== Proceso Completado ===', 'green');
} catch (\Exception $e) {
CLI::error('Error en el proceso batch: ' . $e->getMessage());
}
}
}
use Innite\Batch\Libraries\Optional;
// Crear un Optional con valor
$optional = Optional::of('valor');
// Crear un Optional que acepta null
$optional = Optional::ofNullable($posibleNull);
// Verificar si tiene valor
if ($optional->isPresent()) {
$valor = $optional->get();
}
// Usar valor por defecto si está vacío
$valor = $optional->orElse('valor por defecto');
// Transformar el valor si existe
$resultado = $optional
->map(fn($v) => strtoupper($v))
->orElse('SIN VALOR');
// Filtrar valores
$mayores = Optional::ofNullable($edad)
->filter(fn($e) => $e >= 18)
->orElse(0);
// En Processor.php
use Config\Services;
$logger = Services::logger();
$logger->info('Procesando lote', ['count' => count($data)]);
// En cualquier clase
try {
// Lógica del proceso
} catch (\Exception $e) {
CLI::error('Error: ' . $e->getMessage());
// Log del error
log_message('error', 'Batch process failed: ' . $e->getMessage());
}