【问题标题】:Slim\Exception\HttpNotFoundException苗条\异常\HttpNotFoundException
【发布时间】:2022-04-23 10:05:42
【问题描述】:

我正在创建一个新的 Slim 项目并收到以下错误: Slim 应用程序错误: 由于以下错误,应用程序无法运行:

错误详情

Type: Slim\Exception\HttpNotFoundException
Code: 404
Message: Not found.
File: C:\xampp\htdocs\MyApi\vendor\slim\slim\Slim\Middleware\RoutingMiddleware.php
Line: 91

追踪

#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}

这是我的 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();

这可能是一个基本问题。但我是新手。需要帮助。

【问题讨论】:

  • 您要访问什么网址?你在超薄应用中添加了什么代码?
  • 您提供的信息不足以识别问题。请考虑为您的问题添加更多详细信息。最重要的是,您尝试访问的 URL 和代码中的路由定义。
  • 请提供您的 index.php 所在的目录以及您使用的导致错误的 URL。

标签: php slim


【解决方案1】:

为了解决 Slim 4 的问题,我就是这样做的:

1/ 紧接着

$app = AppFactory::create();

我补充说:

$app->setBasePath("/myapp/api"); // /myapp/api is the api folder (http://domain/myapp/api)

2/ 在我的 .htaccess 中:

RewriteEngine on  
RewriteCond %{ENV:REDIRECT_STATUS} !200 
RewriteRule ^api/(.*)$ api/index.php/$1

3/ 最后处理 'HttpNotFoundException' Slim 异常我添加了一个 try/catch(我不知道为什么 Slim 内部不处理它 => 可能给我们更多的可能性?)

try {
    $app->run();     
} catch (Exception $e) {    
  // We display a error message
  die( json_encode(array("status" => "failed", "message" => "This action is not allowed"))); 
}

希望对你有帮助

** 已编辑 => 强制 Slim 处理异常,之后:**

$app = AppFactory::create();

添加:

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

参考:http://www.slimframework.com/docs/v4/middleware/body-parsing.html

【讨论】:

  • 也许你应该在你的 .htaccess 代码中正确地标记规则,因为如果 RewriteRule 不在正确的行上,它会抛出一个内部服务器错误(“bad flag delimiters”)。
  • 已经完成了,谢谢 FranP
【解决方案2】:

这对我有用(基于 Mandien 的回答)。

我刚刚在 setBasePath(...) 中添加了 index.php,不需要 .htaccess。

$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

显示你好,世界

Linux、Apache、Slim 4

【讨论】:

  • setBasePath() 开始将我的开发机器挂起,这是一个非常规范的机器,需要重新启动。
  • 这对我有用并且更便携:app-&gt;setBasePath(preg_replace('/(.*)\/.*/', '$1', $_SERVER['SCRIPT_NAME']));
【解决方案3】:

我遇到了同样的错误,让我描述一下我到底在做什么以及它是如何工作的!
我正在使用终端上的命令运行本地服务器 php -S localhost:8002
该命令返回了Document root is /Users/Codeus/Desktop/,当我导航到localhost:8002 时出现错误

然后我再次从 index.php 或您想要运行的目录中运行 localhost ,它对我来说效果很好。例如,对我来说,它是两个级别,然后命令php -S localhost:8002 返回Document root is /Users/Codeus/Desktop/myslim/src/public,这正是我的 index.php 文件所在的位置。希望这也适用于你。

【讨论】:

    【解决方案4】:

    如果您使用的是 slim 和新手,请尝试此代码,它会起作用

    只需稍微更改您的代码。 现在,你们都有这个代码:

    $app->get('/hello/{name}', function (Request $request, Response $response, array $args) { ... }
    

    将其更改为完整的命名约定:

    $app->get('/[my-appname]/public/hello/{name}', function (Request $request, Response $response, array $args) { .. }
    

    完整代码

     <?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();
    
    //here i used the url change to your project name on [my-appname]
     $app->get('/[my-appname]/public/hello/{name}', function (Request $request, 
     Response $response, array $args) {
        $name = $args['name'];
        $response->getBody()->write("Hello, $name");
        return $response;
     });
    
    $app->run();
    

    【讨论】:

      【解决方案5】:

      经过近 3 个小时的紧张浏览,我想出了解决方案,即从项目的根目录降级 Slim 框架的版本。 我使用的是 v4.3.0,由于一些奇怪的原因,我不想按照预期的方式行事,而且解决方案超出了我的理解。 步骤如下:

      • 进入项目根目录,在文件路径中输入cmd 命令提示符窗口。
      • 输入 composer require slim/slim:3.*

      • 完成后,您需要在
        上替换预先存在的代码 public/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 = new \Slim\App;
      
      $app->get('/hello/{name}', function (Request $request, Response $response, array $args) {
          $name = $args['name'];
          $response->getBody()->write("Hello, $name");
          return $response;
      });
      
      $app->run();
      

      上面的 sn-p 基本上是介绍页面代码,但来自 Slim v3.12.3

      【讨论】:

      • 显然没有解决 v4 的问题。请参阅 Slim 论坛上的 this answer
      【解决方案6】:

      在您的项目根目录中打开 CMD - 输入

      composer require slim/slim:3.*
      

      然后它会更新 然后刷新浏览器就可以了。

      【讨论】:

      • 这和 Slim 4 有什么关系?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2023-02-21
      • 2020-12-05
      相关资源
      最近更新 更多