PHP Slim\Exception\HttpNotFoundException 404 未找到,没有任何帮助

PHP Slim\Exception\HttpNotFoundException 404 Not Found and nothing is helping

我正在创建一个网络应用程序,由于 Slim 4,我无法移动。它显示了这个错误:

Fatal error: Uncaught Slim\Exception\HttpNotFoundException: Not found. in C:\xampp\htdocs\projectfolder\app\vendor\slim\slim\Slim\Middleware\RoutingMiddleware.php:91 Stack trace: #0 C:\xampp\htdocs\projectfolder\app\vendor\slim\slim\Slim\Routing\RouteRunner.php(72): Slim\Middleware\RoutingMiddleware->performRouting(Object(Slim\Psr7\Request)) #1 C:\xampp\htdocs\projectfolder\app\vendor\slim\slim\Slim\MiddlewareDispatcher.php(81): Slim\Routing\RouteRunner->handle(Object(Slim\Psr7\Request)) #2 C:\xampp\htdocs\projectfolder\app\vendor\slim\slim\Slim\App.php(215): Slim\MiddlewareDispatcher->handle(Object(Slim\Psr7\Request)) #3 C:\xampp\htdocs\projectfolder\app\vendor\slim\slim\Slim\App.php(199): Slim\App->handle(Object(Slim\Psr7\Request)) #4 C:\xampp\htdocs\projectfolder\app\index.php(16): Slim\App->run() #5 {main} thrown in C:\xampp\htdocs\projectfolder\app\vendor\slim\slim\Slim\Middleware\RoutingMiddleware.php on line 91

我正在使用 xampp,有 apache 服务器,我认为问题出在 .htacces 文件中,但是没有..

这是它的样子

我已经尝试解决此问题超过 4-5 个小时,我尝试了在 google、Whosebug、Slim 的 Github、YouTube 上找到的所有内容。.. 没有任何效果。

.htacces

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSL,L]

我的目录

composer.json

index.php以下:

use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

require __DIR__ . '/vendor/autoload.php';

$app = AppFactory::create();

$app->get('/', function (Request $request, Response $response) {
    $response->getBody()->write("Hello, world!");
    return $response;
});

$app->run();

我不知道该怎么办了,也许有人可以帮助我和其他成千上万找不到答案的人,或者移动并尝试另一个框架会更好..

我发现了一些可能导致该问题的原因。

  • vendor/ 目录属于项目根目录
  • scr/有错字,应该是src/
  • index.php(前端控制器)应放在单独的目录中,例如public/
  • 您是 运行 您的应用程序,位于网络服务器 documentRoot 的子目录中。所以你需要在项目根目录下添加第二个 .htaccess 文件。
  • 那么您需要将 Slim basePath 配置为 'projectFolder/' 或者为此目的使用 BasePathMiddleware。

在我的博客中 post Slim Framework Tutorial 我详细解释了这一切。

为 Slim 4 设置一个 URL 基本路径检测器。 按照这里的步骤 https://github.com/selective-php/basepath

<?php

use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Selective\BasePath\BasePathMiddleware;
use Slim\Factory\AppFactory;

require_once __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

// Add Slim routing middleware
$app->addRoutingMiddleware();

// Set the base path to run the app in a subdirectory.
// This path is used in urlFor().
$app->add(new BasePathMiddleware($app));

$app->addErrorMiddleware(true, true, true);

// Define app routes
$app->get('/', function (Request $request, Response $response) {
    $response->getBody()->write('Hello, World!');
    return $response;
})->setName('root');

// Run app
$app->run();
?> 

那应该可以正常工作。