Este es un momento emocionante para ser desarrollador PHP. Se liberan un montón de útiles librerías todos los días, y con la ayuda del Composer y Github, las puedes descubrir e instalar facilmente. En este listado te muestro las 14 que más me han gustado. ¿Tu librería favorita no está en la lista? Compartelo con nosotros en la sección de comentarios.
Puedes leer aquí la primera parte
Underscore - Caja de herramientas de PHP
Underscore es un port del underscore.js original (la caja de herramientas para aplicaciones de JavaScript). La versión de PHP no decepciona y cuenta con soporte para casi todas las funciones originales. Aquí tienes algunos ejemplos:
__::each(array(1, 2, 3), function($num) { echo $num . ','; }); // 1,2,3, $multiplier = 2; __::each(array(1, 2, 3), function($num, $index) use ($multiplier) { echo $index . '=' . ($num * $multiplier) . ','; }); // prints: 0=2,1=4,2=6, __::reduce(array(1, 2, 3), function($memo, $num) { return $memo + $num; }, 0); // 6 __::find(array(1, 2, 3, 4), function($num) { return $num % 2 === 0; }); // 2 __::filter(array(1, 2, 3, 4), function($num) { return $num % 2 === 0; }); // array(2, 4)
La librería también cuenta con soporte para el encadenado, lo que hace que sea aún más potente.
Requests - Peticiones HTTP sencillas
Requests es una librería que hace que sea más sencillo el emitir peticiones HTTP. Si eres como yo, y nunca puedes recordar las diversas opciones que le pasas a Curl, esto es para ti:
$headers = array('Accept' => 'application/json'); $options = array('auth' => array('user', 'pass')); $request = Requests::get('https://api.github.com/gists', $headers, $options); var_dump($request->status_code); // int(200) var_dump($request->headers['content-type']); // string(31) "application/json; charset=utf-8" var_dump($request->body); // string(26891) "[…]"
Con esta librería, puedes enviar peticiones HTTP como HEAD, GET, POST, PUT, DELETE y PATCH, añadir archivos y parámetros en arrays, además de acceder a todos los datos de la respuesta.
Buzz - Librería fácil para peticiones HTTP
Buzz es otra librería PHP para emitir también peticiones HTTP. Aquí tienes un ejemplo:
$request = new BuzzMessageRequest('HEAD', '/', 'http://google.com'); $response = new BuzzMessageResponse(); $client = new BuzzClientFileGetContents(); $client->send($request, $response); echo $request; echo $response;
Lo peor de esta librería es que carece de documentación, por lo que tendrás que picar el código fuente para tener una idea general de todo lo que puedes hacer con ella. O bien puedes optar por la librería Requests que te he expuesto anteriormente.
Goutte - Librería de parseo
Goutte es una librería para extraer datos y parsear páginas web. Proporciona una estupenda API que hace que sea sencillo seleccionar elementos específicos de páginas webs remotas.
require_once '/path/to/goutte.phar'; use GoutteClient; $client = new Client(); $crawler = $client->request('GET', 'http://www.symfony-project.org/'); // Click on links: $link = $crawler->selectLink('Plugins')->link(); $crawler = $client->click($link); // Extract data with a CSS-like syntax: $t = $crawler->filter('#data')->text(); echo "Here is the text: $t";
Carbon - Librería de gestión de fechas
Carbon es una simple extensión de la API de DateTime. Mejora la clase con algunos métodos útiles para trabajar con fechas y horas. Por ejemplo:
printf("Right now is %s", Carbon::now()->toDateTimeString()); printf("Right now in Vancouver is %s", Carbon::now('America/Vancouver')); $tomorrow = Carbon::now()->addDay(); $lastWeek = Carbon::now()->subWeek(); $nextSummerOlympics = Carbon::createFromDate(2012)->addYears(4); $officialDate = Carbon::now()->toRFC2822String(); $howOldAmI = Carbon::createFromDate(1975, 5, 21)->age; $noonTodayLondonTime = Carbon::createFromTime(12, 0, 0, 'Europe/London'); $endOfWorld = Carbon::createFromDate(2012, 12, 21, 'GMT'); // comparisons are always done in UTC if (Carbon::now()->gte($endOfWorld)) { die(); } if (Carbon::now()->isWeekend()) { echo 'Party!'; } echo Carbon::now()->subMinutes(2)->diffForHumans(); // '2 minutes ago'
Carbon lleva mucho tiempo sin actualizarse, por lo que es posible que quieras echar un vistazo a Datum, un fork que sigue en activo.
Ubench - Micro librería de benchmarking
Ubench es una micro librería de benchmarking para tu código PHP. Controla el tiempo de ejecución y el uso de la memoria. He aquí un ejemplo:
use UbenchUbench; $bench = new Ubench; $bench->start(); // Execute some code $bench->end(); // Get elapsed time and memory echo $bench->getTime(); // 156ms or 1.123s echo $bench->getTime(true); // elapsed microtime in float echo $bench->getTime(false, '%d%s'); // 156ms or 1s echo $bench->getMemoryPeak(); // 152B or 90.00Kb or 15.23Mb echo $bench->getMemoryPeak(true); // memory peak in bytes echo $bench->getMemoryPeak(false, '%.3f%s'); // 152B or 90.152Kb or 15.234Mb // Returns the memory usage at the end mark echo $bench->getMemoryUsage(); // 152B or 90.00Kb or 15.23Mb
Recomendamos ejecutar estas tareas mientras estés en desarrollo, nunca en producción.
Validation - Validador de campos
Validation pretende ser el motor de validación más impresionante jamás creado para PHP. Pero, ¿qué nos puede ofrecer? Míralo por ti mismo:
use RespectValidationValidator as v; // Simple Validation $number = 123; v::numeric()->validate($number); //true // Chained Validation $usernameValidator = v::alnum()->noWhitespace()->length(1,15); $usernameValidator->validate('alganet'); //true // Validating Object Attributes $user = new stdClass; $user->name = 'Alexandre'; $user->birthdate = '1987-07-01'; // Validate its attributes in a single chain: $userValidator = v::attribute('name', v::string()->length(1,32)) ->attribute('birthdate', v::date()->minimumAge(18)); $userValidator->validate($user); //true
Con esta biblioteca puedes validar formularios u otros datos enviados por los usuarios. Además, es compatible con una amplia serie de controles existentes, errores que se pueden capturar y mensajes de error personalizables.