Wenn Slim V4 folgende Fehlermeldung ausgibt:
405 Method Not Allowed The application could not run because of the following error:Type: Slim\Exception\HttpMethodNotAllowedException Code: 405 Message: Method not allowed. Must be one of: get, post File: /var/www/html/demo/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php Line: 96 #0 /vendor/slim/slim/Slim/Routing/RouteRunner.php(72): Slim\Middleware\RoutingMiddleware->performRouting(Object(Slim\Psr7\Request)) #1 /vendor/slim/twig-view/src/TwigMiddleware.php(125): Slim\Routing\RouteRunner->handle(Object(Slim\Psr7\Request)) #2 /vendor/slim/slim/Slim/MiddlewareDispatcher.php(140): Slim\Views\TwigMiddleware->process(Object(Slim\Psr7\Request), Object(Slim\Routing\RouteRunner)) #3 /vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php(107): class@anonymous->handle(Object(Slim\Psr7\Request)) #4 /vendor/slim/slim/Slim/MiddlewareDispatcher.php(140): Slim\Middleware\ErrorMiddleware->process(Object(Slim\Psr7\Request), Object(class@anonymous)) #5 /app/Middleware/TestMiddleware.php(13): class@anonymous->handle(Object(Slim\Psr7\Request)) #6 /vendor/slim/slim/Slim/MiddlewareDispatcher.php(283): App\Kernel\System\Middleware\TestMiddleware->__invoke(Object(Slim\Psr7\Request), Object(class@anonymous)) #7 /app/Middleware/Test.php(12): class@anonymous->handle(Object(Slim\Psr7\Request)) #8 /vendor/slim/slim/Slim/MiddlewareDispatcher.php(283): App\Kernel\System\Middleware\Test->__invoke(Object(Slim\Psr7\Request), Object(class@anonymous)) #9 /app/Middleware/TestMiddleware.php(146): class@anonymous->handle(Object(Slim\Psr7\Request)) #10 /vendor/slim/slim/Slim/MiddlewareDispatcher.php(283): App\Kernel\System\Middleware\TestMiddleware->__invoke(Object(Slim\Psr7\Request), Object(class@anonymous)) #11 /app/Middleware/TestMiddleware.php(13): class@anonymous->handle(Object(Slim\Psr7\Request)) #12 /vendor/slim/slim/Slim/MiddlewareDispatcher.php(283): App\Kernel\System\Middleware\ResponseHeaderMiddleware->__invoke(Object(Slim\Psr7\Request), Object(class@anonymous)) #13 /vendor/slim/slim/Slim/MiddlewareDispatcher.php(81): class@anonymous->handle(Object(Slim\Psr7\Request)) #14 /vendor/slim/slim/Slim/App.php(215): Slim\MiddlewareDispatcher->handle(Object(Slim\Psr7\Request)) #15 /vendor/slim/slim/Slim/App.php(199): Slim\App->handle(Object(Slim\Psr7\Request)) #16 /public/index.php(150): Slim\App->run() #17 {main}
... dann kann Ihnen eine der folgenden Lösungen helfen:
Lösung 1
Ändern Sie die Schreibweise in Ihrem Routing ab. Slim akzeptiert nur GROSS geschriebene Methoden:
$app->map(array("get","post"), "/index", ...
wird zu
$app->map(array("GET","POST"), "/index", ...
Lösung 2
Wenn Sie allerdings diverse Routings definiert haben, kann das schnell zu einer recht lästigen Angelegenheit werden.
In diesem Fall können Sie auch im Slim Framework eine Anpassung durchführen, welche die Umschreibung automatisch für Sie durchführt:
Datei: vendor/slim/slim/Slim/Routing/RouteCollector.php
Anpassung in der Funktion "map" (ca. Zeile 270):
public function map(array $methods, string $pattern, $handler): RouteInterface { foreach ($methods as &$m) $m = strtoupper($m); $route = $this->createRoute($methods, $pattern, $handler); $this->routes[$route->getIdentifier()] = $route; $this->routeCounter++; return $route; }
Die folgende, in den Quellcode eingefügte, Zeile ersetzt alle methoden in Großbuchstaben:
foreach ($methods as &$m) $m = strtoupper($m);
Dabei muss beachtet werden, dass ein Update des Frfameworks (z.Bsp. über "composer") diese Änderung wieder überschreibt.