3. #1 - Potrzeba
● Pojawiła się potrzeba zarządzania kolejnością rekordów w bazie danych
● Rozwiązanie:
○ Stworzenie atrybutu w modelu (nazwa seq), który przechowuje kolejność
○ Automatyczne ustalanie wartości, gdy obiekt jest zapisany do bazy
danych
○ Proste metody przenieś w górę/dół
● Dodatkowe wymagania:
○ Gdy obiekt jest usuwany, atrybut seq powinien być zaktualizowany dla
pozostałych
○ Dodanie obsługi dla podzbiorów, np. gdy chcemy pamiętać kolejność dla
grup obiektów oddzielnie (np. page_id, user_id itp.)
4. #2 - Potrzeba się powtarza
● Kolejny projekt potrzebuje tej funkcjonalności
● Kopiowanie kodu z poprzedniego projektu jest czasochłonne
● Rozwiązanie:
○ Stworzenie traita, który może być użyty w wielu modelach (wystarczy
skopiować jeden plik)
● Jeśli dana funkcjonalność jest użyta w kilku projektach, staje się kandydatem
do wydzielonej biblioteki
5. #3 - Utworzenie prostej paczki
● Utwórz paczkę, by nie kopiować funkcjonalności za każdym razem
● Kroki:
○ Utwórz repozytorium na GitHub z dobrą nazwą
○ Utwórz pliki:
■ composer.json - zawiera nazwę projektu, wymagane biblioteki itp.
■ readme.md - opis projektu, proces instalacyjny, opis API itp.
■ license - po prostu skopiuj z internetu :P (MIT jest najpopularniejsze)
○ Utwórz katalog:
■ src/ - wstaw tutaj wszystkie potrzebne pliki
● Utwórz pierwszy release
6. #4 - Publikacja paczki
● Utwórz konto na packagist.org
● Połącz repozytorium na GitHubie z kontem na Packagist
○ Przejdź do Ustawienia > Integracje > Packagist
○ Skopiuj swój kod API z packagist i uruchom autoaktualizację
repozytorium
● Voilà!
○ Twoja paczka może być wyszukana i zainstalowana przez Composera
7. #5 - Instalacja paczki przez Composera
● Po prostu wykonaj komendę:
composer require GITHUB_USER/PACKAGE_NAME
○ np. composer require highsolutions/eloquent-sequence
● Paczka zostanie zainstalowana i możesz zastąpić wcześniejsze rozwiązanie:
○ Usuń trait z repozytorium
○ Zmień namespace z traita, z którego korzystałeś do tego z paczki
○ Sprawdź czy wszystko działa
8. #6 - Utrzymanie paczki
● Gdy opublikujesz paczkę, powinieneś ją utrzymywać i rozwijać
● Kod powinien być dobrze udokumentowany (phpDoc, readme)
● Używaj najlepszych praktyk -> to w końcu Twoja wizytówka
● Lepiej drobne commity, a często
● Używaj Semantic Versioning
10. #7 - Nie zapomnij o unit testach!
● Unit testy zwiększą oceny i pewność korzystania z Twojej paczki
● Dodaj katalog tests do paczki
○ /tests
■ Models - dla modeli Eloquent (jeśli potrzebne)
■ Unit - tutaj wstaw testy (można też stworzyć inne katalogi, np.
Integration)
■ stubs - dla plików potrzebnych przez testy (pliki, obrazki, migracje)
■ temp - dla plików tymczasowych (baza danych .sqlite, logi itp.)
● Dodaj plik TestCase.php (np. z tego Gista)
● Dodaj bibliotekę phpunit do wymagań i utwórz plik phpunit.xml
● Wywołuj testy przez: vendor/bin/phpunit
11. #8 - Udostępnij paczkę
● Gdy paczka jest przetestowana i działa, pokaż ją światu!
● Napisz o tym na twitterze, swoim blogu, fanpage’u, medium itp.
● Zgłoś swoją paczkę do Laravel News
● A gdy użytkownicy się pojawią:
○ Reaguj szybko na Issues i Pull Requesty
○ Usprawniaj swoją paczkę jeśli zgłaszana potrzebna jest ważna i
przydatna
○ Aktualizuj swoją paczkę gdy wyjdzie nowa wersja Laravela
12. #9 - Potrzebujesz pomocy?
● Bootpack - “czarodziejski” kreator paczek
● laravel-packager - narzędzie CLI do generowania paczki wewnątrz Laravela
● laravel5-package-template - boilerplate dla paczki
● https://www.google.pl/search?q=how+to+create+Laravel+package
● skopiować kod jakiejś paczki :)
13. #10 - Have fun
● Open Source jest fajne / naprawdę!
● Twórz paczki, nawet jeśli tylko Ty byś używał (packagist.com pozwala na
prywatne repozytoria)
● Któregoś dnia stworzysz paczkę, z której będzie korzystać wielu
programistów Laravela, wdzięcznych że ktoś rozwiązał problem za nich
14. #11 - Nasze paczki
● eloquent-sequence - Łatwe zarządzanie kolejnością obiektów w bazie danych
● laravel-translation-manager - GUI do zarządzania translacjami wraz z edytowaniem
tłumaczeń na żywo
● laravel-poster - Powiadomienia na Slacka o postach opublikowanych na danym
fanpage na Facebooku
● laravel-github-hook - Proste Continuous Delivery
● laravel-lang-import-export - Import & Export tłumaczeń do/z CSV
● laravel-feed - Proste tworzenie feedów RSS 2.0
● laravel-google-keywords - Wyświetlanie ostatnich słów kluczowych użytych do
znalezienia Twojej strony w Google
● laravel-environments - Zarządzanie różnymi środowiskami projektu