为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 类未被作曲家自动加载或至少未找到

PHP 类未被作曲家自动加载或至少未找到

PHP
BIG阳 2023-03-04 16:21:04
我正在启动一个 lumen 项目,但我遇到了命名空间和自动加载的问题。在我的项目根目录中的 composer.json 文件中,它声明如下:   "autoload": {        "classmap": [            "database/seeds",            "database/factories"        ],        "psr-4": {            "App\\": "app/"        }    },在根目录中,我们有以下目录结构(以及其他):./app/   ->  Common/TokenFactory.php   ->  Http/       ->   Controllers/UserController.phpTokenFactory.php 包含以下非常简单的代码:<? phpnamespace App\Common;class TokenFactory{    public function generateToken($tokenLength = 40)    {        $length_div = round($tokenLength/2, 0, PHP_ROUND_HALF_DOWN);        return bin2hex(openssl_random_pseudo_bytes($length_div));    }}?>我希望在我有以下代码的 UserController.php 文件中使用此类:<?phpnamespace App\Http\Controllers;use App\User;use Illuminate\Http\Request;use App\Common\TokenFactory;class UserController extends Controller{ .............但是当我尝试在 UserController 类中实例化 TokenFactory 时,出现错误:Class 'App\Common\TokenFactory' Not foud.我究竟做错了什么?我自己创建了 Common 目录,但我的理解是 Autoloader 应该能够使用命名空间定义来根据需要定位和加载文件。我已经为此苦苦挣扎了很长一段时间,任何建议将不胜感激。附加说明:我注意到,在调用该服务时,虽然我收到了找不到该类的消息,但该文件的内容显示在错误消息中,这意味着它以某种方式定位和加载文件但无法识别在使用 use 子句的文件中调用它时的类。见下图。
查看完整描述

2 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

我们发现在这种情况下,一个小的错字是罪魁祸首。不幸的是,这种情况时有发生。我会说命令行 php 确实有一个语法检查器/linter,如果您的编辑器或 IDE 错过了这样的东西,它可以提供帮助。


php -l myscript.php

它在过去帮助了我几次。


在这种情况下,问题是:


<? php

namespace App\Common;


class TokenFactory

{

开始标签必须是<?php


查看完整回答
反对 回复 2023-03-04
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

首先,我将删除 TokenFactory 末尾的结束 PHP 标记“?>”。

在那之后,我建议在你的控制器中每只手都需要 TokenFactory-File:如果你这样做,它会起作用吗?


查看完整回答
反对 回复 2023-03-04
  • 2 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号