【问题标题】:Fatal error due to composer.json in slim tree framework由于 composer.json 在苗条树框架中的致命错误
【发布时间】:2018-08-05 11:37:39
【问题描述】:

我一直在关注Alex Gareth's tutorial on building a shopping cart。 我是股票,因为我认为 composer.json 没有正确自动加载我的文件。 这是我的错误:

“致命错误:未捕获的错误:在 C:\xampp\htdocs\order\bootstrap\app.php 中找不到类 'Order\App':10 堆栈跟踪:#0 C:\xampp\htdocs\order\public \index.php(3): require() #1 {main} 抛出 C:\xampp\htdocs\order\bootstrap\app.php 第 10 行"

composer.json 文件

    {
    "require": {
        "slim/slim": "^3.0",
        "slim/twig-view": "^2.4",
        "php-di/slim-bridge": "^2.0",
        "illuminate/database": "^5.6"
    },

    "autoload": {
        "psr-4": {
            "Order\\": "Order"
        }
    }
}

应用类

    namespace Order;

    use DI\ContainerBuilder;
    use DI\Bridge\Slim\App as DIBridge;

    class App extends DIBridge{

        protected function configureContainer(ContainerBuilder $builder){
            $builder->addDefinitions([
                'settings.displayErrorDetails' => true
            ]);

            //
        }

}

app.php 文件是引导文件

<?php

use Order\App;

session_start();

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

$app = new App;

如果我取消注释我在 App.php 中拉入的 require 行,它可以正常工作。

目录结构:

操作系统:Windows 10

【问题讨论】:

  • 您能告诉我们您的应用程序的文件和文件夹结构吗?或者至少对于上述文件和文件夹)。此外,请确保文件和文件夹的大小写正确。许多操作系统对此都很挑剔(Windows 除外)。例如,如果您有Order\App,则文件必须有大小写:Order/App.php,而order/app.php 将失败。
  • 让我试着写一下(我是初学者,请原谅我) order/ 是我的根目录,顺序为 app [dir]、Bootstrap[dir]、public[dir]、vendor[dir] , composer.json, composer.lock app[dir] >>> App.php bootstrap[dir] >>> app.php public[dir]>>> .htaccess, index.php vendor[dir] >>> 所有框架文件
  • 请编辑您的问题以包含该信息(以及您可以在哪里编写适当的目录树)。还包括您正在使用的操作系统。
  • 我已经这样做了

标签: php slim composer-php


【解决方案1】:

尝试将autoload更改为以下:

"autoload": {
    "psr-4": {
        "Order\\": ""
    }
}

【讨论】:

  • @cornelking 也将 dir app 重命名为 App
  • @cornelking 尝试运行composer dumpautoload
【解决方案2】:

您应该将自动加载更改为以app/ 文件夹为目标,因为您的App.php 所在的位置是:

"autoload": {
    "psr-4": {
        "Order\\": "app/"
    }
}

这实际上是告诉自动加载器所有具有命名空间Order\ 的类都存在于app/ 中。

那么从现在开始,如果你要在app/创建子文件夹:

app/
    App.php
    Foo/
        Bar.php

那么Bar.php 应该有命名空间Order\Foo,您可以使用$bar = new Order\Foo\Bar() 访问该类。

注意:这是文件/文件夹大小写很重要的地方。命名空间大小写和类名必须与文件和文件夹具有相同的大小写。否则,它仍然可以在 Windows 上为您工作,但在其他操作系统(如 linux)上会失败。

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多