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".


Dieser Artikel hat Dir geholfen ?
.. und Dir nerviges Ausprobieren, Suchen und Zeit erspart ?

Dann würde ich mich sehr freuen, wenn Du diese werbefreie Hilfeseite mit einer kleinen Anerkennung unterstützen würdest.
Vielen Dank !
PayPal Donate QR Code

4 comments

  1. 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 !

  2. 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 ?

    1. 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

5 × drei =