找不到类 Firebase\JWT\JWT

Posted

技术标签:

【中文标题】找不到类 Firebase\\JWT\\JWT【英文标题】:Class Firebase\JWT\JWT not found找不到类 Firebase\JWT\JWT 【发布时间】:2017-06-07 07:04:41 【问题描述】:

我想在我的代码中使用纯 firebase/php-jwt 库。首先,我去/var/www/html/,就像官方图书馆页面建议的那样,我这样做

composer require firebase/php-jwt

运行此命令后,我看到在 /var/www/html/ 内创建了一个新的供应商文件夹,其中包含很多文件和子文件夹。然后我在/var/www/html/ 中创建我的token.php 文件,其内容类似于官方页面中的内容:

<?php
use \Firebase\JWT\JWT;

$key = "example_key";
$token = array(
    "iss" => "http://example.org",
    "aud" => "http://example.com",
    "iat" => 1356999524,
    "nbf" => 1357000000
);

$jwt = JWT::encode($token, $key);
$decoded = JWT::decode($jwt, $key, array('HS256'));

print_r($decoded);

但是,当我转到 localhost/token.php 时,我收到以下错误消息:

致命错误:未捕获的错误:在 /var/www/html/token.php:12 中找不到类 'Firebase\JWT\JWT' 堆栈跟踪:在 /var/www/html/token 中抛出 #0 main .php 在第 12 行

我不确定这是否重要,但我的 PHP 版本是 7.0。

【问题讨论】:

这一切是什么意思?为什么官方收据不起作用? 基本上,您正在加载作曲家的自动加载器。但是您的项目结构也需要注意。 那么,如果我使用require __DIR__ . '/vendor/autoload.php';,它会起作用吗? 【参考方案1】:

根据documentation,您需要包含自动加载器。

例如,在您的 php 文件中:

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

但是...通常,您的 vendor 文件夹与您的 html 文件夹(您提供内容的文件夹)处于同一级别

例如:

- Project root
--- vendor
--- html
----- index.php

然后在你的 index.php 中你会这样做:

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

很高兴您尝试使用 composer 和模块,但如果我是您,我会尝试阅读有关 php 的 autoloading features 的内容,以便您了解发生了什么,以及如何从它们中获利。

【讨论】:

在我的情况下,您不需要使用 use \Firebase\JWT\JWT;如果你使用 require DIR 。 '/vendor/autoload.php';【参考方案2】:

如果不使用作曲家来维护结构。只需删除

namespace Firebase\JWT;
use \DomainException;
use \InvalidArgumentException;
use \UnexpectedValueException;
use \DateTime;

* 
* JSON Web Token implementation, based on this spec:
* https://tools.ietf.org/html/rfc7519
 *
* PHP version 5
*
* @category Authentication
* @package  Authentication_JWT
* @author   Neuman Vong <neuman@twilio.com>
* @author   Anant Narayanan <anant@php.net>
* @license  http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
* @link     https://github.com/firebase/php-jwt

形成您的 JWT.php 文件。对我来说效果很好。

【讨论】:

【参考方案3】:

我只在你的代码中添加了一行来让我的代码工作:

require __DIR__ . '\vendor\autoload.php';
use Firebase\JWT\JWT;

/* the rest of your code after this */

我根本不需要修改 jwt.php 文件。

【讨论】:

嗨!当我发现同样的问题时,我会“提升”主题,使用 MVC: 我的控制器使用其他作曲家加载的类,具有以下内容:use \Firebase\JWT\JWT; 仍然是这个@ 987654323@ 将给出与上述相同的错误!【参考方案4】:

取决于你是否使用作曲家, 如果不使用作曲家,请尝试删除使用部分:

namespace Firebase\JWT;
use \DomainException;
use \InvalidArgumentException;
use \UnexpectedValueException;
use \DateTime;

如果您使用的是作曲家,请确保您的自动加载器已加载

【讨论】:

【参考方案5】:

当我不使用 Composer 时,我只是在我的入口点 PHP 文件中加载所有 JWT 类,然后在类中使用主命名空间而不是必须使用 JWT。例如,在我的 index.php 中:

require_once 'vendor/jwt/JWT.php';
require_once 'vendor/jwt/SignatureInvalidException.php';
require_once 'vendor/jwt/BeforeValidException.php';
require_once 'vendor/jwt/ExpiredException.php';
require_once 'vendor/jwt/JWK.php';

//Namespaces
use \Firebase\JWT\JWT;

在 Auth.php 类文件中:

//Import the Namespace again
use \Firebase\JWT\JWT;

当您没有自动加载文件(通常是非常小的项目)时,我真的不知道这是否是正确的方法,但它适用于我,并且可能其他人也在处理这个问题。但是,我认识到最好的方法是安装 composer :)

【讨论】:

以上是关于找不到类 Firebase\JWT\JWT的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot找不到类异常解决

找不到 Spring Boot Mongo Reactive 类 - 找不到类 [org.springframework.data.mongodb.MongoDatabaseFactory]

找不到xml找不到类

java 主启动类找不到

找不到类 'dalvik.system....'

eclipse 保存后就找不到类