EN

Copying sources and texts (also in parts) for publishing without our permission is NOT ALLOWED. We are fed up with finding our work on other sites (like stackoverflow).

Copying for private and non-public usage is allowed.

DE

Das Kopieren von Quellcode und Texten (auch in Auszügen) ist nicht erlaubt. Wir haben es gründlich satt, unsere Arbeit auf anderen Webseiten zu finden.

Das private Kopieren und Benutzen ist natürlich erlaubt.

PHP: league Router um POST/GET erweitern

Im PHP Paket "league/route" können derzeit nur "post" oder "get" Routen definiert werden:

$route->post("/test", "\Controller\TestController::test");
$route->get("/test", "\Controller\TestController::test");

bzw.

$route->map("POST", "/test", "\Controller\TestController::test");
$route->map("GET", "/test", "\Controller\TestController::test");

Häufig müssen von einer Funktion beide Methoden verarbeitet werden. Eine gleichzeitige Zuweisung ist derzeit mit dem Package jedoch nicht möglich.

Die folgende Änderung im Sourcecode erlaubt eine solche Zuweisung:

Die Änderungen sind keine perfekte Lösung – bis die Funktion jedoch (endlich) in "league/route" eingebaut wird, wird diese Zwischenlösung die Aufgabe übernehmen. Dabei wird durch die neue Methode "$route->any()" automatisch eine identische "get" und "post" Route erstellt.

Nutzung für o.a. Beispiele:

$route->any("/test", "\Controller\TestController::test");

In der Datei "/league/route/src/RouteCollectionTrait.php" ergänzen Sie am Ende folgende Zeilen:

    public function any(string $path, $handler): Route
    {
        return $this->map('ANY', $path, $handler);
    }
}

In "/league/route/src/Router.php" ersetzen Sie die Funktion "map" wie folgt:

    public function map(string $method, string $path, $handler): Route
    {
        $path  = sprintf('/%s', ltrim($path, '/'));

        if ($method == "ANY") {

            $route = new Route("GET", $path, $handler);
            $this->routes[] = $route;

            $route = new Route("POST", $path, $handler);
            $this->routes[] = $route;

        } else {

            $route = new Route($method, $path, $handler);
            $this->routes[] = $route;
            
        }

        return $route;
    }

Sollten weitere Methoden mit "any" zugewiesen werden, so können diese einfach in der o.a. Ersatzmethode von "map" eingefügt werden.

Anmerkung des Support Teams:
Dieser Vorschlag wurde durch einen Benutzer im league-Projekt vorgeschlagen. Dabei wurde auf unsere Webseite verlinkt.
Der Link und der Vorschlag wurden dort im Projekt von einem Entwickler gelöscht.
Schade, denn das Internet beruht auf gegenseitigem Verlinken und Respekt vor der Arbeit anderer.
Wir lassen diesen Beitrag bestehen, um anderen zu helfen. Das league-Plugin wird von uns jedoch nicht weiter "beholfen".

4 Kommentare Kommentar schreiben
Kim sagt:

Please take my notice, that i have linked your solution in the league project as solutions for a request.

Of course i used a link to prevent copyrights etc.

Thanks for your work and help !

Support sagt:

Hello Kim,

thanks for your support.

Regards,
Support Team

Kim sagt:

I have to inform you, that your solution has been deleted in the project:
It did not "made the developer happy".

He does not like complex structures. On the other hand he’s not giving a solution, how complex projects should work with his unflexible plugin.

So even more thanks to you, publishing this solution !

You do develop big php solutions: Which routing system do you use ?

Support sagt:

Thank you Kim for the update.

We’ll check that plugin and rethink about our link. We do agreee with you: Deleting links and ideas is never helpful.

You asked us to remove you other comment with the answers of the plugin author. We did so, but we can fully confirm your frustration level. Not every author is able to handle (negative) user feedback.

We use our own fastroute extension, which can (of course) handle complex grouped routes. We send you and email with a download link for our routing package.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

sieben + 15 =