2.0 KiB
2.0 KiB
Pamięć projektu shopPRO
Notatki i wnioski zebrane podczas pracy z kodem. Aktualizowane na bieżąco.
Serwer produkcyjny
- PHP < 8.0 — unikać
match, named arguments, union types,str_contains()itp. - Zamiast
matchużywać operatorów trójargumentowych (ternary) lubif/else
Znane problemy / TODO
\Shared\Helpers\Helpers::send_email()iShared\Email\Email::send()— zduplikowana logika PHPMailer. Docelowo zunifikować wShared\Email\Emailshop\Search— typo wuse:shop\Produtzamiastshop\Product
Wzorce potwierdzone w projekcie
- Metody frontendowe (z cache Redis) dodawane do istniejących repozytoriów Domain — NIE tworzymy osobnych FrontendService/AdminService
- Klasy View (
front\Views\*) są statyczne i bezstanowe — nie wymagają DI - Kontrolery (
Controllers\*) są instancyjne z DI przez konstruktor - Autoloader obsługuje dwa formaty plików:
class.X.php(legacy) iX.php(nowy) — oba działają bez zmian w autoloaderze - Nowe katalogi z dużej litery:
Views/,Controllers/(legacy:view/,controls/,factory/)
Medoo ORM — pułapki
$mdb->delete()przyjmuje 2 argumenty (tabela, warunek), NIE 3 — wielokrotnie powodowało bugi (np.newsletter_unsubscribe)$mdb->get()zwracanullgdy brak rekordu, NIEfalse- Przy
$mdb->insert()sprawdzać$mdb->id()aby potwierdzić sukces
Redis cache — konwencje
- TTL domyślnie 86400 (24h)
- Klucze produktów:
shop\product:{id}:{lang}:{permutation_hash} - Wzorzec czyszczenia:
CacheHandler::deletePattern("shop\\product:{$id}:*") - Dane w cache są serializowane — wymagają
unserialize()poget()
Aktualizacje klienckie
- Pliki
*.mdNIGDY nie trafiają do ZIP aktualizacji updates/changelog.phpto plik serwisowy repozytorium, nie runtime klienta- Główny
.htaccesswdrażany osobno, poza ZIP aktualizacji - W archiwum ZIP NIE powinno być folderu z nazwą wersji — struktura zaczyna się od katalogów projektu