我正在啟動一個 lumen 項目,但我遇到了命名空間和自動加載的問題。在我的項目根目錄中的 composer.json 文件中,它聲明如下: "autoload": { "classmap": [ "database/seeds", "database/factories" ], "psr-4": { "App\\": "app/" } },在根目錄中,我們有以下目錄結(jié)構(gòu)(以及其他):./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{ .............但是當(dāng)我嘗試在 UserController 類中實例化 TokenFactory 時,出現(xiàn)錯誤:Class 'App\Common\TokenFactory' Not foud.我究竟做錯了什么?我自己創(chuàng)建了 Common 目錄,但我的理解是 Autoloader 應(yīng)該能夠使用命名空間定義來根據(jù)需要定位和加載文件。我已經(jīng)為此苦苦掙扎了很長一段時間,任何建議將不勝感激。附加說明:我注意到,在調(diào)用該服務(wù)時,雖然我收到了找不到該類的消息,但該文件的內(nèi)容顯示在錯誤消息中,這意味著它以某種方式定位和加載文件但無法識別在使用 use 子句的文件中調(diào)用它時的類。見下圖。
2 回答

慕碼人8056858
TA貢獻(xiàn)1803條經(jīng)驗 獲得超6個贊
我們發(fā)現(xiàn)在這種情況下,一個小的錯字是罪魁禍?zhǔn)?。不幸的是,這種情況時有發(fā)生。我會說命令行 php 確實有一個語法檢查器/linter,如果您的編輯器或 IDE 錯過了這樣的東西,它可以提供幫助。
php -l myscript.php
它在過去幫助了我?guī)状巍?/p>
在這種情況下,問題是:
<? php
namespace App\Common;
class TokenFactory
{
開始標(biāo)簽必須是<?php

回首憶惘然
TA貢獻(xiàn)1847條經(jīng)驗 獲得超11個贊
首先,我將刪除 TokenFactory 末尾的結(jié)束 PHP 標(biāo)記“?>”。
在那之后,我建議在你的控制器中每只手都需要 TokenFactory-File:如果你這樣做,它會起作用嗎?
- 2 回答
- 0 關(guān)注
- 129 瀏覽
添加回答
舉報
0/150
提交
取消