Slim\Exception\HttpNotFoundException
Solution 1
To solve the problem with Slim 4 here is what I did :
1/ Just after
$app = AppFactory::create();
I added :
$app->setBasePath("/myapp/api"); // /myapp/api is the api folder (http://domain/myapp/api)
2/ In my .htaccess :
RewriteEngine on
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^api/(.*)$ api/index.php/$1
3/ Finaly to handle the 'HttpNotFoundException' Slim Exception I added a try/catch (I don't know why Slim doesn't handle it internaly => maybe to give us more possibility?)
try {
$app->run();
} catch (Exception $e) {
// We display a error message
die( json_encode(array("status" => "failed", "message" => "This action is not allowed")));
}
Hope it can help
** Edited => To force Slim to handle Exceptions, after : **
$app = AppFactory::create();
add :
$app->addErrorMiddleware(true, true, true);
Ref : http://www.slimframework.com/docs/v4/middleware/body-parsing.html
Solution 2
This worked for me (based on Mandien's answer).
I've just added index.php in setBasePath(...), no .htaccess needed.
$app->setBasePath("/myapp/public/index.php");
// Define app routes
$app->get('/hello/{name}', function (Request $request, Response $response, $args) {
$name = $args['name'];
$response->getBody()->write("Hello, $name");
return $response;
});
http://localhost/myapp/public/index.php/hello/world
shows Hello, world
Linux, Apache, Slim 4
Prosenjith Roy
Updated on June 09, 2022Comments
-
Prosenjith Roy almost 2 years
I'm creating a new Slim project and getting the following error: Slim Application Error: The application could not run because of the following error:
Error Details
Type: Slim\Exception\HttpNotFoundException Code: 404 Message: Not found. File: C:\xampp\htdocs\MyApi\vendor\slim\slim\Slim\Middleware\RoutingMiddleware.php Line: 91
Trace
#0 C:\xampp\htdocs\MyApi\vendor\slim\slim\Slim\Middleware\RoutingMiddleware.php(57): Slim\Middleware\RoutingMiddleware->performRouting(Object(Slim\Psr7\Request)) #1 C:\xampp\htdocs\MyApi\vendor\slim\slim\Slim\MiddlewareDispatcher.php(124): Slim\Middleware\RoutingMiddleware->process(Object(Slim\Psr7\Request), Object(Slim\Routing\RouteRunner)) #2 C:\xampp\htdocs\MyApi\vendor\slim\slim\Slim\Middleware\ErrorMiddleware.php(89): class@anonymous->handle(Object(Slim\Psr7\Request)) #3 C:\xampp\htdocs\MyApi\vendor\slim\slim\Slim\MiddlewareDispatcher.php(124): Slim\Middleware\ErrorMiddleware->process(Object(Slim\Psr7\Request), Object(class@anonymous)) #4 C:\xampp\htdocs\MyApi\vendor\slim\slim\Slim\MiddlewareDispatcher.php(65): class@anonymous->handle(Object(Slim\Psr7\Request)) #5 C:\xampp\htdocs\MyApi\vendor\slim\slim\Slim\App.php(174): Slim\MiddlewareDispatcher->handle(Object(Slim\Psr7\Request)) #6 C:\xampp\htdocs\MyApi\vendor\slim\slim\Slim\App.php(158): Slim\App->handle(Object(Slim\Psr7\Request)) #7 C:\xampp\htdocs\MyApi\public\index.php(18): Slim\App->run() #8 {main}
Here is my index.php
<?php use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Slim\Factory\AppFactory; require '../vendor/autoload.php'; $app = AppFactory::create(); $app->addRoutingMiddleware(); $errorMiddleware = $app->addErrorMiddleware(true, true, true); $app->get('/hello/{name}', function (Request $request, Response $response, array $args) { $name = $args['name']; $response->getBody()->write("Hello, $name"); return $response; }); $app->run();
This might be a basic problem.But I am new.Need help please.