Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%)
|
Od 2015 r. uczę się programować obiektowo w PHP. Przez ten czas napisałem kilka własnych aplikacji. Ostatnią pod koniec 2024 r. Gdy ją skończyłem, doszedłem do wniosku, iż na jej podstawie mogę utworzyć własny PHP Framework. Stworzyłem go w dwa dni i jest bardzo prosto napisany. Tak prosto, że trochę wstydzę się go pokazywać do oceny. Nadaje się do tworzenia ultra lekkich stron i prostych Systemów Zarządzania Treścią. Wszystkie najważniejsze pliki znajdują się w "src/Core". Framework jest oparty na architekturze SOA (architektura zorientowana na usługi). Budowa systemu katalogów przypomina Symfony, na którym się wzorowałem. Bez problemu da się w nim instalować biblioteki przy użyciu Composer'a. Prosiłbym o ocenę... (IMG:style_emoticons/default/smile.gif)
|
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 114 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%)
|
Cytat Może być, ale wtedy użytkownicy staną się testerami tylko że za darmo i bez gwarancji, że coś faktycznie naprawisz, zanim zaczną narzekać. Testy to jak sprawdzenie, czy spadochron się otworzy, zanim skoczysz niby można bez, ale ryzyko jest spore. Ja testuję moje aplikacje, ale robię to teraz ręcznie, bo nie są rozbudowane... Tu chodziło o np. testy jednostkowe (PHPUnit) w PHP. (IMG:style_emoticons/default/smile.gif) 2025-02-24: Cytat - Database - i tu ogromny minus - obsługuje połączenie tylko z 1 bazą danych i to tylko z MySQL za pośrednictwem mysqli, niestety to duże ograniczenie, Poprawiłem klasę Database, aby pozwalała na wiele połączeń: Kod public function __construct( string $mysqlHost = null, int $mysqlPort = null, string $mysqlUser = null, string $mysqlPassword = null, string $mysqlDatabase = null, string $mysqlNames = null ) { $database = require(DATABASE_FILE); $this->mysqlHost = $mysqlHost (IMG:style_emoticons/default/questionmark.gif) $database['db_host']; $this->mysqlPort = $mysqlPort (IMG:style_emoticons/default/questionmark.gif) $database['db_port']; $this->mysqlUser = $mysqlUser (IMG:style_emoticons/default/questionmark.gif) $database['db_user']; $this->mysqlPassword = $mysqlPassword (IMG:style_emoticons/default/questionmark.gif) $database['db_password']; $this->mysqlLink = null; $this->mysqlDatabase = $mysqlDatabase (IMG:style_emoticons/default/questionmark.gif) $database['db_database']; $this->mysqlNames = $mysqlNames (IMG:style_emoticons/default/questionmark.gif) $database['db_names']; mysqli_report(MYSQLI_REPORT_OFF); } Obsługuje się to np. tak: Kod $db = new Database([...]); $rm = new Manager($db); $db->dbConnect(); $or = $rm->getRepository(OptionRepository::class); $optionData = $or->getOptionData(); Lub bezpośrednio w kontrolerze: Kod $rm = $this->getManager(); $ur = $rm->getRepository(UserRepository::class); $userData = $ur->getUserData([...]); Tylko w tej chwili Repository Manager pozwala na połączenie tylko z jedną bazą danych: Kod public function setManager(): void { if (!isset($this->manager)) { $this->database = new Database(); $this->manager = new Manager($this->database); $this->database->dbConnect(); } } public function getManager(): Manager { $this->setManager(); return $this->manager; } Nie wiem, czy jest sens oraz jak rozwiązać połączenia z wieloma bazami danych z poziomu kontrolera... Do tego obsługa innych baz danych niż MySQL wymagałaby chyba stworzenia oddzielnych klas dla każdej z nich? Na razie korzystam tylko z MySQL i nie widzę sensu, aby dodawać [dla samego siebie] obsługę innych baz danych niż MySQL. (IMG:style_emoticons/default/smile.gif) 2025-02-25: Cytat Nie wiem, czy jest sens oraz jak rozwiązać połączenia z wieloma bazami danych z poziomu kontrolera... Można byłoby to zrobić tak: Kod [...] abstract class Controller { protected array $database; protected array $manager; [...] public function setManager(int|string $name = 0): void { if (!isset($this->manager[$name])) { $this->database[$name] = new Database($name); $this->manager[$name] = new Manager($this->database[$name]); $this->database[$name]->dbConnect(); } } public function getManager(int|string $name = 0): Manager { $this->setManager($name); return $this->manager[$name]; } [...] I dla Database: Kod [...] class Database { [...] public function __construct(int|string $name = 0) { $database = require(DATABASE_FILE); $this->mysqlHost = $database[$name]['db_host']; $this->mysqlPort = $database[$name]['db_port']; $this->mysqlUser = $database[$name]['db_user']; $this->mysqlPassword = $database[$name]['db_password']; $this->mysqlLink = null; $this->mysqlDatabase = $database[$name]['db_database']; $this->mysqlNames = $database[$name]['db_names']; mysqli_report(MYSQLI_REPORT_OFF); } [...] 2025-06-24: Popisałem trochę po różnych forach i ludzie dali mi kilka cennych uwag... Zamiast Mysqli użyłem PDO. W związku z tym zmieniłem UserRepository, aby korzystała z prepared statements. Wprowadziłem klasę ErrorValidator, która rozszerza Error i implementuje Validator. Jest używana przez MainPageValidator. Prosiłbym o przejrzenie i jakieś uwagi, jeśli coś jeszcze warto zmienić. (IMG:style_emoticons/default/smile.gif) Ten post edytował eerie 25.02.2025, 14:56:41 |
|
|
|
eerie Prosty i ultra lekki PHP Framework 21.01.2025, 16:04:11
phpion Ogólnie fajnie, że Ci się chciało tworzyć coś włas... 22.01.2025, 17:21:57
eerie Jak zauważyłeś, stworzyłem ten framework głównie d... 23.01.2025, 13:24:08
nospor CytatJak zauważyłeś, stworzyłem ten framework głów... 23.01.2025, 15:47:12
eerie Symfony ma całą masę plików i bardzo długo się pre... 23.01.2025, 17:38:23
nospor Cytati bardzo długo się prekompiluje.
Co masz na m... 23.01.2025, 17:51:47
Tomplus W ogóle, dlaczego nie używasz composera?
DLa włas... 23.01.2025, 18:03:33
eerie Przysiadłem wczoraj, aby zacząć to poprawiać. I ma... 18.02.2025, 18:28:00 
Piterr9 Cytat(eerie @ 18.02.2025, 18:28:00 ) ... 20.02.2025, 21:19:35
nospor CytatMój problem jest taki, że za bardzo nie wiem,... 19.02.2025, 10:29:22
Tomplus @eerie
Tak po za projektem.
Aby mieć tutaj na for... 26.06.2025, 21:58:28
eerie Dobra uwaga. Sprawdzę... Dzięki wszystkim za pomoc... 27.06.2025, 11:19:05 ![]() ![]() |
|
Aktualny czas: 6.11.2025 - 17:20 |