Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP Commons, biblioteka z klockami do PHP
Forum PHP.pl > Inne > Oceny
cepa
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.
alex011251
What the fuck?questionmark.gif jakimi klockami . Mam dziwne skojarzenia.


Ale ogolnie jak najbardziej ok smile.gif Duzo pracy w to musiales wlozyc
pyro
Cześć,

Super kolekcja. Wystarczy podpiąć do swojego frameworka jako vendor i można swobodnie korzystać. Pierwszy raz widzę Moo, ale wygląda na fajne narzędzie do tworzenia na szybko, jednak z tego co widzę jakieś dziwne, nieorientacyjne nazwy metod smile.gif.

Ale ogólnie fajnie, że się podzieliłeś swoim zbiorem.
ziqzaq
Taki "no-framework framework" wink.gif
Fajnie prezentuje się ta biblioteka. Na pewno wielu skorzysta, dzięki wielkie.
Tak mi się kojarzyło nazwisko, ale nie zajarzyłem dopóki nie przeczytałem w kodzie "hellworx". Kiedyś w poszukiwaniach bugtrackera trafiłem na Vermisa smile.gif
cepa
Dzięki za pozytywny feedback smile.gif

Dodałem nowy przykład, który mam nadzieję, naświetli idee stojące za tym kodem, co jak i dlaczego.

https://github.com/cepa/php_commons-4/blob/...stapi/index.php

Jest to kompletne REST API, które operuje na książkach na bazie SQL. Generalnie jest to prototyp API oparty o closures w MOO, który operuje na encjach, gdzie warstwa persistent to baza MySQL. Można repozytorium encji zmienić na np: keystore i wtedy bez zmian w kodzie, to API zadziała z Mongo czy z Cassandrą.

Na zachęte, tak to wygląda mniej więcej:
  1. ->get('/books', function(Moo $moo){
  2. $books = $moo->getBookRepository()->fetchCollection();
  3. return new JsonView($books->toArray());
  4. })


  1. ->get('/books/([0-9]+)', function(Moo $moo, $id){
  2. return new JsonView($moo->getBook($id)->toArray());
  3. })


Opis jak to działa: http://lukasz.cepowski.com/devlog/46,fast-...-microframework
pyro
Nie zagłębiałem się zbytnio w kod, ale trochę mnie zastanawia czemu ciągle obiekt Moo jest przekazywany jako parametr dla funkcji anonimowej, skoro Moo to i tak już obiekt sam w sobie i te wszystkie metody można by wykonywać przez $this. Generalnie mozna by to zrobić w ogóle pozbywając się anonimowych funkcji. Mniej powtarzania kodu i chyba bardziej czytelnie.
cepa
Jest nowe demko, jest to prosta aplikacja klasy RIA w Dojo Toolkit i Commons, który wystawia data store (SQL).



Opis: http://lukasz.cepowski.com/devlog/47,how-t...and-php-commons

Działające demo: http://demo.hellworx.com/php_commons-demo-dojo/web/

Kod: https://github.com/cepa/php_commons-demo-dojo

Projekt jest budowany za pomocą phinga, posiada konfiguracje, model data store, inkrementacyjne migracje i w miare odseparowany backend of frontu.
Troche cięzko znaleść dobre przykłady do Dojo, więc może się komuś przyda w pełni funkcjonalna apka smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.