1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Community
  3. Projekte und Showcase

Quanta - OpenSource PHP Framework

  • Andy
  • 7. Januar 2025 um 00:07
  • Unerledigt
  • Andy
    7
    Andy
    Mitglied
    Reaktionen
    27
    Punkte
    512
    Beiträge
    87
    • 7. Januar 2025 um 00:07
    • #1

    Hallo zusammen , ich bins mal wieder

    Ich möchte euch hier mein kleines side Projekt vorstellen – Quanta, ein PHP-Framework. Wie der Name schon sagt, handelt es sich dabei um ein Framework, das ich entwickelt habe, weil mir viele der bestehenden Frameworks einfach zu umfangreich sind. Außerdem wollte ich schon länger ein eigenes, leichtgewichtiges Framework bauen, das mir eine Sammlung von Funktionen bietet, die ich immer wieder in meinen Projekten nutze.

    Der Vorteil von Quanta ist, dass es von Anfang an sehr klein und minimalistisch ist. Im Kern enthält es nur die Funktionen, die für viele Webanwendungen notwendig sind:

    • Components: Mit dieser Funktion lassen sich wieder verwendbare Bausteine erstellen, die dann dynamisch gerendert werden können.
    • Routing: Quanta ermöglicht das automatische Rendern von Components, wenn eine bestimmte URL aufgerufen wird.
    • PDO-Support: Es gibt eine einfache Möglichkeit, mit der Datenbank zu kommunizieren.
    • Actions: Diese ermöglichen es, serverseitige Aktionen auszuführen, wie zum Beispiel das Erstellen von Datenbankeinträgen oder das Vorbereiten von Daten.
    • Templates: PHP-Templates können einfach geladen werden, was besonders in Kombination mit den Components praktisch ist.


    Was Quanta noch flexibler macht, ist die Möglichkeit, Pakete zu laden. Diese Pakete sind Sammlungen von Components, Actions und weiteren Funktionen, mit denen du das Framework nach Bedarf erweitern kannst.

    Falls ihr Interesse an dem Projekt habt, schaut gerne auf GitHub vorbei. Ich freue mich auch über Beiträge von anderen, die Lust haben, mitzuwirken!

  • Andy
    7
    Andy
    Mitglied
    Reaktionen
    27
    Punkte
    512
    Beiträge
    87
    • 10. Januar 2025 um 00:28
    • #2

    Habe mich mal daran gemacht und eine kleine learn more seite erstellt. Am WE werde ich eine komplette doku beginnen Quanta - Build Smarter

  • PixelPatron
    20
    PixelPatron
    github.com/pixelpatron90
    Reaktionen
    164
    Punkte
    4.049
    Beiträge
    718
    Einträge
    3
    • 10. Januar 2025 um 12:34
    • #3

    Ist es in der aktuellen Fassung vorgesehen bzw möglich addons bzw packages zu schreiben wie zb roles oder auth()

    pixelpatron-100000?style=for-the-badge&logo=X&logoColor=white&labelColor=000000&color=FF0000 pixel_patron-100000?style=for-the-badge&logo=Discord&logoColor=white&labelColor=000000&color=FF0000 pixelpatron90-100000?style=for-the-badge&logo=GitHub&logoColor=white&labelColor=black&color=FF0000

    https://evarioo.eu/

  • Andy
    7
    Andy
    Mitglied
    Reaktionen
    27
    Punkte
    512
    Beiträge
    87
    • 10. Januar 2025 um 12:38
    • #4

    Du kannst Module erstellen, die sogenannte Packages sind. In diesen kannst du Actions, eigene Funktionen und vieles mehr hinzufügen. Ein Beispiel dafür ist das Login-System mit der Blockchain, das ebenfalls als Modul umgesetzt ist. Das gesamte Konzept basiert auf diesen Modulen. Das Framework selbst ist sehr schlank und enthält nur die grundlegenden Funktionen.

    Mein Ziel ist es, dass sich eine Community um das Framework bildet, die Module entwickelt und diese der Allgemeinheit zur Verfügung stellt. Natürlich werde ich selbst auch einige Module erstellen.

    Du kannst einfach ein Modul erstellen wenn du von der Module Klasse erbst.

    PHP
    class UserModule extends Module
    {
        private ?Quanta $quanta;
    
        private function start_sessions()
        {
            if (session_status() === PHP_SESSION_NONE)
            {
                session_start();
            }
        }
    
        private function initial_database($quanta)
        {
            $table_name = "user";
            $result = $quanta->databaseHandler->query("SHOW TABLES LIKE '" . $table_name . "'");
            if (!$result)
            {
                $sql = "CREATE TABLE $table_name (
                    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                    username VARCHAR(64) NOT NULL UNIQUE,
                    password TEXT NOT NULL,
                    email VARCHAR(255) NOT NULL UNIQUE,
                    type VARCHAR(64) NOT NULL,
                    last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                    reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                )";
                $quanta->databaseHandler->query($sql);
            }
        }
    
        public function exist_username($username)
        {
            $sql = "SELECT * FROM user WHERE username = ?";
            $params = array($username);
            $result = $this->quanta->databaseHandler->query($sql, $params);
            if ($result)
            {
                return true;
            }
            return false;
        }
    
        public function exist_email($email)
        {
            $sql = "SELECT * FROM user WHERE username = ?";
            $params = array($email);
            $result = $this->quanta->databaseHandler->query($sql, $params);
            if ($result)
            {
                return true;
            }
            return false;
        }
    
        public function exist_user($username, $mail)
        {
            if ($this->exist_username($username) || $this->exist_email($mail))
            {
                return true;
            }
            return false;
        }
    
        public function create_user($username, $password, $email, $type = 1)
        {
            if ($this->exist_user($username, $email))
            {
                return false;
            }
            $password = password_hash($password, PASSWORD_DEFAULT);
            $sql = "INSERT IGNORE INTO user (username, password, email, type) VALUES (?, ?, ?, ?)";
            $params = array($username, $password, $email, $type);
            $this->quanta->databaseHandler->query($sql, $params);
            return true;
        }
    
        public function login_user($username, $password)
        {
            $user = $this->fetch_user_with_mail($username);
            if ($user) {
                if(password_verify($password, $user["password"])) {
                    $_SESSION["user"] = $user;
                    return true;
                }
            }
            return false;
        }
    
        public function is_user_loggedin() {
            if(isset($_SESSION["user"])) {
                return true;
            }
            return false;
        }
    
        public function logout_user() {
            unset($_SESSION["user"]);
            return true;
        }
    
        public function get_current_user() {
            if($this->is_user_loggedin()) { 
                return $_SESSION["user"];
            }
            return false;
        }
    
        public function fetch_users()
        {
            $sql = "SELECT * FROM user";
            $result = $this->quanta->databaseHandler->query($sql);
            return $result;
        }
    
        public function fetch_user_with_mail($mail) {
            $sql = "SELECT * FROM user WHERE email = ?";
            $params = array($mail);
            return $this->quanta->databaseHandler->query($sql, $params);
        }
    
        public function dispose($quanta)
        {
            $this->quanta = null;
        }
    
        public function load($quanta)
        {
            $this->quanta = $quanta;
            $this->start_sessions();
            $this->initial_database($quanta);
    
            $loginForm = new LoginForm("login_form");
            $this->quanta->componentHandler->addComponent($loginForm);
    
            $registerForm = new RegisterForm("register_form");
            $this->quanta->componentHandler->addComponent($registerForm);
    
            $createUserAction = new CreateUserAction("create_user", $this->id);
            $this->quanta->actionHandler->addAction($createUserAction);
        }
    
    }
    Alles anzeigen


    Wichtig ist die load($quanta) und die dispose($quanta) funktion.

  • PixelPatron
    20
    PixelPatron
    github.com/pixelpatron90
    Reaktionen
    164
    Punkte
    4.049
    Beiträge
    718
    Einträge
    3
    • 10. Januar 2025 um 12:40
    • #5
    Zitat von Andy

    Mein Ziel ist es, dass sich eine Community um das Framework bildet, die Module entwickelt und diese der Allgemeinheit zur Verfügung stellt. Natürlich werde ich selbst auch einige Module erstellen.

    Das war es was ich hören wollte! Danke

    Nachtrag: Die ersten Versuche sind gemacht und bisher muss ich sagen bin ich echt angetan von dem Projekt. Es gibt dinge die mir persönlich fehlen aber ich denke du bist dran und wirst das ding noch weiter schaufeln :winking_face:

    pixelpatron-100000?style=for-the-badge&logo=X&logoColor=white&labelColor=000000&color=FF0000 pixel_patron-100000?style=for-the-badge&logo=Discord&logoColor=white&labelColor=000000&color=FF0000 pixelpatron90-100000?style=for-the-badge&logo=GitHub&logoColor=white&labelColor=black&color=FF0000

    https://evarioo.eu/

    Einmal editiert, zuletzt von PixelPatron (10. Januar 2025 um 16:43)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung