Slim\Exception\HttpNotFoundException

15,289

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

Share:
15,289
Prosenjith Roy
Author by

Prosenjith Roy

Updated on June 09, 2022

Comments

  • Prosenjith Roy
    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.