Witam,
pomyślałem, że podziele się klockami w PHP z których korzystam w różnych projektach. Projekt nazywa się PHP Commons i jest to zbiór luźnych bibliotek, które na co dzień upraszczają mi życie podczas developerki. Część z nich powstała bo kod oferowany np: w zendzie czy symfony nie spełniał moich oczekiwań co do chociażby elastyczności. Orginalne repozytorium ma już kilka lat, najnowszy branch nazywa się php_commons-4 i powstaje powoli zgodnie z aktualnymi potrzebami, refaktoring i dopisywanie nowych kawałków kodu.
Od niedawna z niektórych kawałków korzysta znajomy deweloper, i skoro on jest z tego zadowolony to może komuś jeszcze się to przyda.
Projekt jest dostępny na githubie: https://github.com/cepa/php_commons-4
Jest on zintegrowany z moim lokalnym SVN'em, z którego merguje stabilne zmiany do githuba.
Nad kontrolą jakości czuwa Jenkins, który testuje kod na następujących konfiguracjach:
- PHP 5.3.x, PHP 5.4.x
- MySQL 5.1.x, MySQL 5.5.x
- PostgreSQL 8.4.x, PostgreSQL 9.1
Dodatkowo część testów zawiera: Memcache, APC, Redis, Cassandra, Gearman
Aktualne pokrycie kodu to ok 87% (coverage).
Ficzery:
- Commons/Application - Abstrakcja klasy aplikacji (Web, CLI, itp)
- Commons/Autoloader - Prosty autoloader zgodny z SPL i composerem
- Commons/Buffer - Wrapper na output buffer
- Commons/Callback - Wrapper na wszystko co jest callable, funkcje, metody, closures
- Commons/Config - Biblioteka do konfiguracj z adapterami do Array, XML
- Commons/Console - Szkielet konsolowej aplikacji do uruchamiania tasków
- Commons/Container - Abstrakcyjne kontenery
- Commons/Curl - Wrapper do curla
- Commons/Entity - Biblioteka lekkich encji
- Commons/Event - Programowanie zdarzeniowe
- Commons/Filter - Baza dla filtrów
- Commons/Http - Narzędzia do obsługi HTTP
- Commons/Json - Biblioteka do jsona
- Commons/KeyMap - Abstrakcyjny rozproszony kontener do łączenia kluczy w keystore
- Commons/KeyStore - Implementacje keystore (Session, APC, Memcache)
- Commons/Light - Mini frejmłork MVC
- Commons/Log - Biblioteka do logowania (strumień, syslog)
- Commons/Migration - Biblioteka do migracji
- Commons/Moo - Mikroframework oparty o closures, inspirowany Sintatra z Ruby
- Commons/Plugin - Baza dla pluginów
- Commons/Process - Narzędzie do uruchamiania procesów i przechwytywania wyjścia
- Commons/Sql - Implementacja SQL z róznymi adapterami, wspiera replikację master-slave, zawiera prosty ORM i Query Builder do składania zapytań
- Commons/Template - Baza dla "szablonów"
- Commons/Timer - Timer do benchmarków
- Commons/Utils - Inne narzędzia
- Commons/Validator - Baza dla validatorów
- Commons/Xml - Biblioteka XML
Przykłady użycia znajdują są tutaj: https://github.com/cepa/php_commons-4/tree/master/examples
Nie jest tego dużo ale kod rozwija się z dnia na dzień i powoli dorzucam reszte klocków więc będzie tego sporo więcej w najbliższych dniach.
Z ciekawszych wynalazków:
Query Builder:
https://github.com/cepa/php_commons-4/blob/...e_sql_query.php
Repozytorium lekkich encji (mogą być zapisywane w dowolnej warstwie persistent ktora implementuje interfejs):
https://github.com/cepa/php_commons-4/blob/...le_sql_repo.php
MOO frejmłork:
https://github.com/cepa/php_commons-4/blob/...bsite/index.php
Na dniach będzie:
- implementacje keystore dla Apache Cassandra, MongoDB, Redis
- biblioteka do programowania rozproszonego z urzyciem Gearmana
- biblioteka do przetwarzania obrazków
Zachęcam do przejżenia kodu i prosze o opinie i konstruktywną krytykę.
Projekt jest otwarty, licencja BSD, jakby ktoś był zainteresowany użyciem lub dodaniem czegoś od siebie to walić na priv.