• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

własny mini routing - php

Object Storage Arubacloud
0 głosów
550 wizyt
pytanie zadane 6 lipca 2019 w PHP przez niezalogowany

Hej, postanowilem spróbować swoich sił i piszę prosty router. Czy ktoś mógłbym mi podpowiedzieć czy to zmierza w dobrą stronę? Zwłaszcza użycie destruktora w taki sposób?

Od razu wyjaśniam dlaczego tak go używam, ponieważ funkcja checkRoute użyta w innym miejscu np bezpośrednio w metodzie __call uruchamiała mi się tyle razy ile miałem odwołań do niej co za tym idzie, słowo ">home<" po wejściu na strone /home wyświetliło mi się aż 3 razy. Natomiast kiedy trasa sprawdzana jest już na sam koniec, zaraz przed zakończeniem pracy obiketu wtedy wszystkie zebrane dane brane są pod uwage RAZ.

Ewentualnie jeszcze mogę użyć checkRoute zaraz pod odwołaniami do ->get jednakże wymyśliłem sobie aby Router opierał się tylko na jednej metodzie wyjściowej, gdzie podajemy trasę oraz to co ma robić (w tym momencie jest to tylko metoda anonimowa))


<?php

    $router = new Router();

    $router->get('home', function(){
       echo ">home<";
    });
    $router->get('home/list', function(){
       echo ">home list<";
    });

    $router->get('pomoc', function(){
       echo ">pomoc<";
    });

?>

Klasa Router

<?php


class Router
{

    private $routes = [];
    private $request_uri;

    private $supportedRouteMethods = ['GET', 'POST'];

    public function checkRoute(){
        $this->request_uri = ltrim($_SERVER['REQUEST_URI'], '/');

        if(array_key_exists($this->request_uri, $this->routes)){
            $run = $this->routes[$this->request_uri];

            if(is_callable($run)){
                $run();
            }
        }else{
            echo "404";
            return true;
        }
    }

    public function addRoute($path, $functionToRun){
        $this->routes[$path] = $functionToRun;
    }

    public function __call($name, $args){
        if(!in_array(strtoupper($name), $this->supportedRouteMethods)){
            echo 'BAD ROUTE METHOD';
            return false;
        }

        $this->addRoute($args[0], $args[1]);
    }

    public function __destruct()
    {
        $this->checkRoute();
    }

}

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 386 wizyt
pytanie zadane 20 września 2019 w PHP przez BlvckFox Gaduła (4,240 p.)
0 głosów
2 odpowiedzi 422 wizyt
pytanie zadane 20 stycznia 2018 w PHP przez sapero Gaduła (4,100 p.)
0 głosów
1 odpowiedź 1,412 wizyt
pytanie zadane 27 września 2017 w PHP przez Szymon Ciompała Mądrala (6,280 p.)

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...