Witam,
Od jakiegoś czasu pracuję na własnym nieskomplikowanym frameworku. Lata doświadczenia przyniosły wiele ciekawych pomysłów, nie zawsze spotykanych w innych frameworkach, które usprawniają pracę czy czynią wykonanie porządniejszym. Chciałbym abyśmy powymieniali się własnymi praktykami, tworząc zbiór propozycji, który jednocześnie będzie stanowił listę rzeczy, nad którymi powinni zastanowić się początkujący zaczynając nowy serwis/skrypt.
Zacznę od swoich pomysłów, zachęcam do dzielenia się.
- katalog z frameworkiem może leżeć oddzielnie i być wykorzystywany przez kilka aplikacji, dzięki czemu poprawek błędów czy nowych funkcji nie trzeba nanosić/kopiować na wiele plików.
- cały frontend (szablony, js, grafika itd.) w jednym podkatalogu, co pozwala stworzyć osobne konto ssh/ftp dla front end designera, bez dawania mu dostępu do kodu aplikacji
- autoselector konfiguracji w zależności od aktualnego hosta (localhost, domena itd.) pozwalający dokonać deploymentu kopiując cały katalog na serwer razem z configami
- wykrywa dostęp zdalny po zewnętrznym IP do lokalnego hosta i ładuje poprawnie konfigurację lokalną co pozwala np. zgłaszanie statusu płatności na nasz localhost podczas tworzenia
- przechwytywanie i logowanie wszystkich błędów ze stack tracem itp (error handler, exception handler, shutdown handler)
- tłumienie błędów innych używanych bibliotek np. FPDF (funkcje do chwilowego wyłączania raportowania błędów)
- "dwukierunkowy" router, tzn linki w szablonach wstawiamy funkcją np link('user/register'); i jeżeli w routerze dodamy "podmianę" tego linku na "rejestracja/" to link zmiania się zarówno w HTML strony jak i działa po kliknięciu odpowiednio
- wielojęzykowość przez własny plugin w szablonach (np outputfilter w SMARTY pozwalający zapisywać wielojęzykowe teksty np. tak: @Witaj użytkowniku@ (w jakimś pliku zawieramy odpowiedniki do podmiany, dla wydajności można zrobić kilka katalogów kompilacji smarty i zamiast outputfilter zastosować filtr już przy kompilacji szablonu)
- komunikaty dla użytkownika o wykonanej akcji - praktycznie w każdym serwisie mamy powiadomienia, że jakaś akcja została wywołana. Warto sobie to uprościć funkcjami typu actionMessage('Plik dodano'), errorMessage('Nie udało się') - framework zbiera wywołania do tablicy i przekazuje do szablonów liste komunikatów do wyświetlenia
- bogaty system redirectowania, z możliwością pokazania komunikatu po redirecie jak wyżej (redirecty typu zwykły i skrócone formy - "przekieruj na główną z komunikatem, że musi być zalogowany jeżeli nie jest" "przekieruj na główną z komunikatem brak uprawnień jeżeli nie ma danego uprawnienia" w formie pojedynczych wywołań funkcji itp.)
- htacces przekierowujący wywołania do index.php, wyłączający listowanie katalogów itp.
- zabezpieczenie CSRF
- modele z abstrakcją do bazy danych np. PDO i uniwersalnymi funkcjami jeżeli nie stosujemy ORM (np. getId, getWhere, updateWhere. Pamiętajmy o możliwości pobrania tylko niektórych pól, o przekazywaniu insertów i updatów jako zestaw danych do zbindowania np. ciąg znaków jak i dodatkowo nie bindowanych np. pkt=pkt+1 albo NOW() )
- stałe notyfikacje wyświetlane użytkownikowi aż do ich zamknięcia przez kliknięcie w X (trzymane w sesji)
- proste wywołanie zliczające ile razy akcja o pewnej nazwie np. "register" jest wywołana, jeżeli wywołanie zliczy nadmierną ilość akcji w czasie to nie pozwala na wykonanie akcji np. doLimitPerHour( 'register' , 5 ), może działać po IP itp.
- rozbudowany system formularzy z walidatorami, i powiązaniem z bazą, tak by dodawanie nowego pola z kilkoma warunkami walidacji i "spięcie" tego CRUDEM z bazą danych to było kilka linijek (formularze to temat na osobny taki thread, więc nie będę się tu rozpisywał, wiadomo, że warto mieć zestaw swoich "pól" typu input, select na podstawie podanego arraya z validacją, wiele chceckboxów/radio z arraya, daty złożone z 3 selectów lub inputa z jQuery datepickerem itp.)
- system skalowania obrazów do kilku lokalzacji i w róznych formach (po dłuższym boku, w kwadrat itd.)
- system kategorii (drzewo)
- obsługa uprawnień
- Utilsy do przekształcania dat SQL na lepiej wyglądającem, z nazwanymi miesiącami itp.
- składania głównych modułów z pomniejszych "modulików" uniwersalnych typu upload pliku, upload zdjęcia, upload kilku zdjęć, wpis wielokrotny przez dodawanie kolejnych inputów (lub zestawów inputów) z poziomu JS
- system kolejkowania e-maili i wysyłania ich z crona
- panel dla administratora pozwalający jednym klikiem np. przelogować się na innego użytkownika (fajna sprawa przy testowaniu)