未找到 Firebase\JWT\JWT 类

问题描述 投票:0回答:7

我想在我的代码中使用纯 firebase/php-jwt 库。首先,我转到

/var/www/html/
,就像官方图书馆页面所建议的那样,我这样做

composer require firebase/php-jwt

运行此命令后,我看到在

/var/www/html/
内创建了一个新的供应商文件夹,其中包含许多文件和子文件夹。然后,我在
token.php
中创建我的
/var/www/html/
文件,其内容与官方页面类似:

<?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 中找不到类“Firebase\JWT\JWT”:12 堆栈跟踪:#0 {main} 在 /var/www/html/token.php 中抛出12号线

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

php composer-php autoloader
7个回答
31
投票

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

例如,在您的 php 文件中:

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

但是...通常您的

vendor
文件夹将与您的 html 文件夹(您在其中提供内容的文件夹)
处于同一级别

例如:

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

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

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

很高兴您尝试使用 Composer 和模块,但如果我是您,我会尝试阅读一些有关 php 的 自动加载功能 的内容,以便您了解发生了什么以及如何从中获利。


8
投票

如果不使用composer来维护结构。只需删除

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 <[email protected]>
* @author   Anant Narayanan <[email protected]>
* @license  http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
* @link     https://github.com/firebase/php-jwt

形成您的 JWT.php 文件。我知道它工作得很好。


4
投票

我只在您的代码中添加了一行以使我的代码正常工作:

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

/* the rest of your code after this */

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


2
投票

取决于你是否使用composer, 如果不使用 Composer,请尝试删除 use 部分:

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

如果您使用 Composer,请确保您的自动加载器已加载


0
投票

当我不使用 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;

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


0
投票

最近发现了这个。问题似乎是某个地方的命名空间发生冲突。解决方案;我将 JWT 类复制到本地库文件夹 (App/Libraries) 中,并使用

App\Libraries\JWT
命名空间从该文件夹导入。完美运作。


0
投票

您可以使用此代码。我认为它可以正常工作

<?php
require './vendor/autoload.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);
?>
© www.soinside.com 2019 - 2024. All rights reserved.