ludonkey/tinymvc

A light weight MVC implementation

dev-master 2020-07-01 13:29 UTC

This package is auto-updated.

Last update: 2024-04-29 04:43:20 UTC


README

Description

It's a light weight MVC implementation in PHP.

I created this for my students, first step to learn MVC before to use Symfony.

Installation

composer require ludonkey/tinymvc:@dev

Demo

Live: https://sharecode-tinymvc.herokuapp.com/

Source Code: https://github.com/ludonkey/php-project-ludonkey/tree/v10

Live: https://miniproject-template.herokuapp.com/

Source Code: https://github.com/ludonkey/miniproject-template

Getting Started

Your front controller should be something like this public/index.php

<?php

use ludk\Http\Kernel;
use ludk\Http\Request;

require '../vendor/autoload.php';

$kernel = new Kernel();
$request = new Request($_GET, $_POST, $_SERVER, $_COOKIE);
$response = $kernel->handle($request);
$response->send();

Routing

By default, the Kernel will try to load the routes from config/routes.yaml but you can set another file when creating the Kernel object. His role is to reroute the Request to the right Controller and the right method of this controller.

Example:

homepage:
    path: /
    controller: Controller\HomeController:display

search:
    path: /search
    controller: Controller\HomeController:search

remove:
    path: /remove
    controller: Controller\HomeController:remove

create:
    path: /create
    controller: Controller\HomeController:create

update:
    path: /update
    controller: Controller\HomeController:update

Controller

Your controllers have to extends AbstractController. The methods take the Request as parameter and have to return a Response.

<?php

namespace Controller;

use Entity\Card;
use ludk\Http\Request;
use ludk\Http\Response;
use ludk\Controller\AbstractController;

class HomeController extends AbstractController
{

    public function display(Request $request): Response
    {
        $cardRepository = $this->getOrm()->getRepository(Card::class);
        $cards = $cardRepository->findAll();
        $data = array(
            "myText" => "Hello everybody !",
            "cards" => $cards
        );

        return $this->render('home/main.php', $data);
    }

Model

To make things easier, there is no database here, all the data come from json files. They are loaded in memory into the user session so you can add data, delete, update but they will be restored as the original ones when a new session will start.

TODO...