首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php composer加载类时遇到的问题

使用php composer加载类时遇到的问题
EN

Stack Overflow用户
提问于 2018-09-14 07:13:35
回答 2查看 114关注 0票数 2

我有这样一个目录网站:

代码语言:javascript
复制
- my application
- apps
--- Backend
--- Core
---- Core \ Config
---- Core \ Drivers (Db.php)
---- Core \ Main
--- Frontend

我的composer.json文件:

代码语言:javascript
复制
{
    "autoload": {
        "psr-4": {
            "Core\\": "apps/Core/",
            "Web\\": "apps/Frontend",
            "Cms\\": "apps/Backend"
        }
    },
    "require": {
        "php": ">=7.0",
        "phpmailer/phpmailer": "~6.0",
        "monolog/monolog": "~1.23",
        "mpdf/mpdf": "~7.0",
        "twig/twig": "~2.5"
    },
    "config": {
        "vendor-dir": "apps/vendor"
    }
}

当我想在文件中调用我的应用程序\ index.php时:

代码语言:javascript
复制
require_once ("../apps/vendor/autoload.php");
use Core\Drivers;
use Core\Main;
$bl = new Core\Drivers\Db();

Db.php文件如下所示:

代码语言:javascript
复制
namespace Core\Drivers;


class Db
{

...

}

我收到一个错误:

致命错误:未捕获错误:未在

为什么?

编辑

代码语言:javascript
复制
// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname(dirname($vendorDir));

return array(
    'Web\\' => array($baseDir . '/apps/Frontend'),
    'Twig\\' => array($vendorDir . '/twig/twig/src'),
    'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
    'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
    'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
    'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
    'Mpdf\\' => array($vendorDir . '/mpdf/mpdf/src'),
    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
    'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
    'Core\\' => array($baseDir . '/apps/Core'),
    'Cms\\' => array($baseDir . '/apps/Backend'),
);
EN

回答 2

Stack Overflow用户

发布于 2018-09-14 14:12:10

一切看起来都很酷,但我建议您将secret/index.php的内容更改为:

代码语言:javascript
复制
require_once __DIR__.'/../apps/vendor/autoload.php';   //A cleaner approach for requiring files

use Core\Drivers\Db;    //So, you don't have to use slash when using your class in your code.
use Core\Main;

$bl = new Db();
票数 0
EN

Stack Overflow用户

发布于 2018-09-14 08:40:19

使用根目录,如下所示:

代码语言:javascript
复制
use \Core\Drivers;
use \Core\Main;
$bl = new \Core\Drivers\Db();

在根目录中使用php将在当前命名空间中搜索给定的类。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52326729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档