Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Prosty i ultra lekki PHP Framework
eerie
post
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)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
eerie
post
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
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.11.2025 - 17:20