找不到类Firebase \ JWT \ JWT

时间:2017-01-22 19:08:46

标签: php composer-php autoloader

我想在我的代码中使用纯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:12中找不到类'Firebase \ JWT \ JWT'堆栈跟踪:/ var / www / html / token中抛出#0 {main}第12行的.php

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

5 个答案:

答案 0 :(得分:11)

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

,例如,在你的php文件中:

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

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

E.g:

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

然后在你的index.php中你做了:

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

你尝试使用作曲家和模块很好,但如果我是你,我会尝试阅读有关php autoloading features的内容,这样你才能理解&#39;继续,以及如何从中获利。

答案 1 :(得分:4)

如果不使用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 <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文件。它对我来说很好。

答案 2 :(得分:1)

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

import openpyxl
wb = openpyxl.load_workbook(filename = "C:/test/Book1.xlsx", keep_vba=True)
ws = wb[wb.sheetnames[0]]
print(wb.sheetnames) # Prints the right sheet name
ws['A1'] = "Hey"  # Does not Write
wb.save("Book1.xlsx")

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

  return (
      <section>
        {
          tweets.map(({name, tweet}) => (
            <div>
              <h1>{name}</h1>
              <p>{tweet}</p>
            </div>
          ))
        }
          
      </section>
  )

在 Auth.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;

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