-1

我正在尝试为我的网站创建购物车,我正在遵循以下教程:https ://www.youtube.com/watch?v=tRh467FX12U&list=PLfdtiltiRHWH9JN1NBpJRFUhN96KBfPmd&index=2

在教程中,他使用了来自 GitHub 的 3 种不同的导入,这就是使用 composer 在终端中安装它们的方式:

rosscurrie = ~用户的名字

@Ross-Air = Macbook 的名称

MobileMastersNew = 包含所有网站文件的文件夹的名称

composer = 全局安装

require <...> = 来自 GitHub 的导入

  1. rosscurrie@Rosss-Air MobileMastersNew % 作曲家需要苗条/苗条:^4.0
  2. rosscurrie@Rosss-Air MobileMastersNew % 作曲家需要 slim/twig-view:^3.0
  3. rosscurrie@Rosss-Air MobileMastersNew % 作曲家需要 php-di/slim-bridge
  4. rosscurrie@Rosss-Air MobileMastersNew % 作曲家需要照明/数据库

我对 Laravel 的经验有限,但并不完全陌生。当我尝试加载 index.php 页面时,会出现以下错误:

Fatal error: Uncaught Error: Class 'DI\Bridge\Slim\App' not found in /Users/rosscurrie/Sites/MobileMastersNew/app/App.php:8 Stack trace: #0 /Users/rosscurrie/Sites/MobileMastersNew/vendor/composer/ClassLoader.php(444): include() #1 /Users/rosscurrie/Sites/MobileMastersNew/vendor/composer/ClassLoader.php(322): Composer\Autoload\includeFile('/Users/rosscurr...') #2 [internal function]: Composer\Autoload\ClassLoader->loadClass('Cart\\App') #3 /Users/rosscurrie/Sites/MobileMastersNew/bootstrap/app.php(9): spl_autoload_call('Cart\\App') #4 /Users/rosscurrie/Sites/MobileMastersNew/public/index.php(3): require('/Users/rosscurr...') #5 {main} thrown in /Users/rosscurrie/Sites/MobileMastersNew/app/App.php on line 8

我的文件夹目录如下:

在此处输入图像描述

我的 ../MobileMasters/app/App.php 是:

<?php

namespace Cart;

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

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

        //
    }
}

我的 ../MobileMasters/bootstrap/app.php 是:

<?php

session_start();

use Cart\App;

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

$app  = new App;

我的 ../MobileMasters/public/.htaccess 文件是:

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

我的 ../MobileMasters/public/index.php 是:

<?php

require __DIR__ . '/../bootstrap/app.php';

$app->run();

我的 ../MobileMasters/vendor/autoload.php 是:

<?php

// autoload.php @generated by Composer

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInit2e9ebb4be0f95ed0dbfb26486b8ba4b7::getLoader();

最后,我的 ../MobileMasters/composer.json 是:

{
    "require": {
        "slim/slim": "^4.0",
        "slim/twig-view": "^3.0",
        "php-di/slim-bridge": "^3.0",
        "illuminate/database": "^7.2"
    },
    "autoload": {
        "psr-4": {
            "Cart\\": "app"
        }
    }
}
4

3 回答 3

1

您应该在自动加载后使用 use 语句:

<?php

namespace Cart;

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

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

        //
    }
}

并更改此文件:

session_start();

require __DIR__ . '/../vendor/autoload.php';
use Cart\App;

$app  = new App;
于 2020-03-23T11:49:04.820 回答
0

您使用了错误的命名空间use DI\Bridge\Slim\App as DIBridge;。包中不再有App类。DI

反而

使用以下代码use DI\Bridge\Slim\Bridge as DIBridge;

于 2020-09-11T11:16:35.947 回答
0

您的 composer.json 需要看起来几乎与教程中的一模一样。我有同样的问题。要要求旧版本,您只需执行composer remove slim/slimthen之类的操作composer require slim/slim ^3.0

特别是,您的 php-di 需要低于 v1.1。我的作曲家.json:

{
    {
    "require": {
        "slim/slim": "^3.0",
        "slim/twig-view": "^2.1",
        "illuminate/database": "^5.2",
        "php-di/slim-bridge": "v1.0.2"
    },
    "autoload": {
        "psr-4": {
            "Cart\\": "app/"
        }
    }
}
于 2021-10-21T13:17:35.923 回答