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();
?>
那应该可以正常工作。
我正在创建一个网络应用程序,由于 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();
?>
那应该可以正常工作。