【问题标题】:Class not found using Namespaces and Autoloader使用命名空间和自动加载器找不到类
【发布时间】:2017-04-18 20:33:57
【问题描述】:

当我尝试在服务器上运行我的 PHP 代码时,我遇到了一个非常奇怪的错误,但在查看代码时没有突出显示。这是我第一次使用 Composers 和命名空间等构建的新项目的一部分。错误是:

[18-Apr-2017 20:06:32 UTC] PHP Fatal error:  Uncaught Error: Class 'ThomasSmyth\LoginSystem' not found in /home/thomassm/public_html/php/functions/fncregister.php:4

文件布局:

登录系统.php

namespace ThomasSmyth;

class LoginSystem {
    private $core;
    private $builder;
    private $config;

    function __construct(){
        $this->core = new coreFunctions();
        $this->builder = new \NilPortugues\Sql\QueryBuilder\Builder\GenericBuilder();
        $this->config = require('core.config.php');
    }
//...
}

fncRegister.php

require_once "../../vendor/autoload.php";
$LoginManager = new \ThomasSmyth\LoginSystem();

echo $LoginManager->Register($_POST["StrSurname"], $_POST["StrForename"], $_POST["StrEmail"], $_POST["StrPassword"], $_POST["DteDoB"], $_POST["StrGender"], $_POST["StrToken"]);

composer.json

{
    "require": {
        "nilportugues/sql-query-builder": "^1.5"
    },
    "autoload": {
        "psr-4": {
            "ThomasSmyth\\": "php/lib/"
        }
    }
}

是否有人对可能导致此问题的原因有任何建议,无论是代码还是服务器设置?

【问题讨论】:

  • 对不起,我之前问过一些不相关的事情.. 缺少的是登录系统。路径和文件名没问题,作曲家没问题——你在尝试之前运行过composer dump-autoload 吗?并注意查看自动加载文件。也许这会带来一些启示。
  • 我没有做转储,我现在应该试试吗?另外,我应该在自动加载文件中寻找什么?它只有 2 行日志,但我注意到它没有结束 ?> 标记,可以吗?
  • 为什么你的文件有不同的图标?
  • 是的,您应该先尝试转储。自动加载文件包含与路径配对的命名空间数组。也可以没有结束标记 - 因为整个文件都在 php 中。
  • @Hackerman PHPStorm 我认为它是一个类文件,因为该类与文件同名。不知道为什么它对 coreFunctions 文件不做同样的事情。

标签: php namespaces composer-php


【解决方案1】:

虽然在评论中我们已经解决了这个问题,但我决定为此写一个答案。

问题已经有了正确的文件路径、命名空间和 composer.json 配置。唯一缺少的是使用composer dump-autoload 生成自动加载脚本。

此命令将创建几个autoload*.php 文件,其中包含与其命名空间配对的文件路径。如Composer Website 中所述。

【讨论】:

    猜你喜欢
    • 2016-05-18
    • 2014-12-07
    • 2016-01-22
    • 2021-06-29
    • 2015-12-03
    • 2011-09-09
    • 2013-10-24
    • 2020-01-11
    相关资源
    最近更新 更多