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%)
-----


Przysiadłem wczoraj, aby zacząć to poprawiać. I mam pierwszą wątpliwość:

Cytat(nospor @ 23.01.2025, 15:47:12 ) *
4) Tworzenie w kazdej akcji kontrolera tego non stop
$html = new Html();
$csrfToken = new Token();
jest troche nieteges. Ciagla duplikacja tego samego kodu


Rozwiązałem to przez stworzenie obiektów wszystkich klas pomocniczych Core'a w abstrakcyjnej klasie Controller. Wygląda to tak:

Kod
[...]

abstract class Controller
{
    protected Config $config;
    protected Cache $cache;
    protected Data $data;
    protected Key $key;
    protected Email $email;
    protected Html $html;
    protected Token $csrfToken;
    protected Database $database;
    protected Manager $manager;

    public function __construct()
    {
        $this->config = new Config();
        $this->cache = new Cache();
        $this->data = new Data();
        $this->key = new Key();
        $this->email = new Email();
        $this->html = new Html();
        $this->csrfToken = new Token();
    }

[...]


Może tak zostać? Nie będę musiał tworzyć obiektów dla wszystkich kontrolerów, które ten rozszerzają, po wielokroć. (IMG:style_emoticons/default/smile.gif)

PS Na razie operuję jeszcze na PHP 8.0, ale to zmienię... (IMG:style_emoticons/default/wink.gif)

2025.02.18: Chcę dopytać o kilka rzeczy...

Cytat(phpion)
- klasa Cache nie uwzględnia terminu ważności cache, jak już zostanie utworzone to na wieki wieków amen,


Może być w kontrolerze tak, jak podałem poniżej? Bądź lepiej dodać metodę sprawdzającą to do klasy Cache?

Kod
        if (
            !file_exists($cacheFile)
            || filemtime($cacheFile) <= time() - $cacheTime
        ) {
            [...]

            $this->cache->cachePage($cacheFile, $content);
        }


Cytat(phpion)
- klasa Data - wiesz, że str_replace przyjmuje jako argumenty również tablicę podmianek?


Mam z tym problem. Bo pewne wartości powinny być zmieniane w odpowiedniej kolejności. Jeśli zastosuję tablice w str_replace, to może np. podmienić mi & przed &amp;. Część jest zamieniana na '', a część na '-' i kolejność jest ważna, więc nie wiem... (IMG:style_emoticons/default/smile.gif)

Cytat(phpion)
- Token - zupełnie niepotrzebnie uzależniasz działanie tej klasy od sesji,


Chyba źle nazwałem tę klasę... Bo to nie jest jakiś tam "token", lecz "csrf token" do sprawdzania, czy nie doszło do nieprawidłowości/nadużyć przy przesyłaniu formularza. Umieszcza token w sesji i przekazuje do formularza. Potem sprawdza, czy przesłany formularz ma właściwy token, który wcześniej zapisano w sesji. Mam nadzieję, że zostałem zrozumiany. Może tak być?

Cytat(phpion)
- Validator - patrząc na metody to ma niewiele wspólnego z walidacją danych.


Powróciłem do dawnej nazwy tej klasy, czyli jest to klasa "Error", która jest rozszerzana przez klasy CośTamValidator'ów. (IMG:style_emoticons/default/smile.gif)

Bezpośredni link do repozytorium: https://github.com/EEQSOFT/framework.eeq

Cytat(nospor)
9) Brakuje interfejsow by ta funkcjonalnosc byla troche bardziej rozszerzalna a nie taka sztywna struktura


Mój problem jest taki, że za bardzo nie wiem, gdzie te interfejsy powinienem użyć. (IMG:style_emoticons/default/biggrin.gif)


Cytat(nospor)
10 Brak testow


Testy to wymóg konieczny? Nie może być aplikacja bez testów? (IMG:style_emoticons/default/smile.gif)

Ten post edytował eerie 18.02.2025, 18:44:40
Go to the top of the page
+Quote Post
Piterr9
post
Post #3





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 20.02.2025

Ostrzeżenie: (0%)
-----


Cytat(eerie @ 18.02.2025, 18:28:00 ) *
Przysiadłem wczoraj, aby zacząć to poprawiać. I mam pierwszą wątpliwość:



Rozwiązałem to przez stworzenie obiektów wszystkich klas pomocniczych Core'a w abstrakcyjnej klasie Controller. Wygląda to tak:

Kod
[...]

abstract class Controller
{
    protected Config $config;
    protected Cache $cache;
    protected Data $data;
    protected Key $key;
    protected Email $email;
    protected Html $html;
    protected Token $csrfToken;
    protected Database $database;
    protected Manager $manager;

    public function __construct()
    {
        $this->config = new Config();
        $this->cache = new Cache();
        $this->data = new Data();
        $this->key = new Key();
        $this->email = new Email();
        $this->html = new Html();
        $this->csrfToken = new Token();
    }

[...]


Może tak zostać? Nie będę musiał tworzyć obiektów dla wszystkich kontrolerów, które ten rozszerzają, po wielokroć. (IMG:style_emoticons/default/smile.gif)

PS Na razie operuję jeszcze na PHP 8.0, ale to zmienię... (IMG:style_emoticons/default/wink.gif)

2025.02.18: Chcę dopytać o kilka rzeczy...



Może być w kontrolerze tak, jak podałem poniżej? Bądź lepiej dodać metodę sprawdzającą to do klasy Cache?

Kod
        if (
            !file_exists($cacheFile)
            || filemtime($cacheFile) <= time() - $cacheTime
        ) {
            [...]

            $this->cache->cachePage($cacheFile, $content);
        }




Mam z tym problem. Bo pewne wartości powinny być zmieniane w odpowiedniej kolejności. Jeśli zastosuję tablice w str_replace, to może np. podmienić mi & przed &amp;. Część jest zamieniana na '', a część na '-' i kolejność jest ważna, więc nie wiem... (IMG:style_emoticons/default/smile.gif)



Chyba źle nazwałem tę klasę... Bo to nie jest jakiś tam "token", lecz "csrf token" do sprawdzania, czy nie doszło do nieprawidłowości/nadużyć przy przesyłaniu formularza. Umieszcza token w sesji i przekazuje do formularza. Potem sprawdza, czy przesłany formularz ma właściwy token, który wcześniej zapisano w sesji. Mam nadzieję, że zostałem zrozumiany. Może tak być?



Powróciłem do dawnej nazwy tej klasy, czyli jest to klasa "Error", która jest rozszerzana przez klasy CośTamValidator'ów. (IMG:style_emoticons/default/smile.gif)

Bezpośredni link do repozytorium: https://github.com/EEQSOFT/framework.eeq



Mój problem jest taki, że za bardzo nie wiem, gdzie te interfejsy powinienem użyć. (IMG:style_emoticons/default/biggrin.gif)




Testy to wymóg konieczny? Nie może być aplikacja bez testów? (IMG:style_emoticons/default/smile.gif)

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.
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:18