亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Composer - 在新包中設置自動加載

Composer - 在新包中設置自動加載

PHP
桃花長相依 2023-07-21 16:18:13
我正在嘗試制作一個作曲家包,但我正在努力設置自動加載以在我正在開發它的項目中工作。我有兩個項目:Project Foo(我正在其中開發包)。項目欄(我在其中安裝了包:)composer require myhandle/mypackage。在 Project Foo 中,我(顯然)也必須能夠使用該包。但是在我自己的包中設置自動加載不起作用。然而...當我將更改提交到 Github、在 Packagist 更新包并composer update在 Project Bar 中運行時,它就可以工作了(?!)。奇怪的是......如果我composer update從 Project Foo (該項目不起作用)中進行操作。因此,將軟件包更新到當前版本(?),使其開始工作。所以它一定與我如何設置自動加載有關。一張紙條:我通過在供應商目錄中創建一個新的(空)文件夾來啟動該包,然后在那里構建該包。我認為這很聰明,因為它會反映出如果我有composer required包裹的話它會是什么樣子。我不知道這是否是不好的做法,因為 Composer 不再“控制”供應商目錄中的所有文件。有大量關于如何制作 Composer 包的指南,但沒有一個指南解釋了在正在開發包的項目中構建文件的好方法。以下是我為“獲取錯誤”所做的操作(在 Project Foo 中):創建新的類文件,例如:myhandle/mypackage/src/Test.php然后我像這樣實例化它:$test = new MyNamespace\MyPackageName\Test();然后我收到錯誤:致命錯誤:未捕獲錯誤:未找到類“MyNamespace\MyPackageName\Test”這就是 Project Bar 中的工作原理(完全相同的代碼)。我找不到有關如何在我正在開發的包中正確設置自動加載的指南。我正在使用這個自動加載文件,這是我在另一個作曲家項目中找到的。我已將其放在我的項目的根目錄中。它看起來像這樣:<?phpnamespace MyNamespace\MyPackageName;spl_autoload_register(function($cls) {    $cls = ltrim($cls, '\\');    if (strpos($cls, __NAMESPACE__) !== 0) {        return;    }    $classWithoutBaseNamespace = str_replace(__NAMESPACE__, '', $cls);    // Load files from 'src' directory based on their class name without    // the StoutLogic\AcfBuilder namespace.    $path = dirname(__FILE__).            DIRECTORY_SEPARATOR.            'src'.            str_replace('\\', DIRECTORY_SEPARATOR, $classWithoutBaseNamespace).            '.php';    require_once($path);});我在 Composer 文檔中找不到它,如何在新項目/包中設置它。不過,我可以找到無數關于如何使用自動加載的指南。
查看完整描述

1 回答

?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

檢查getcomposer.org上有關自動加載的文檔

刪除您的自定義自動加載器定義,在composer.json 中注冊您的命名空間(希望您已經遵循 PSR-4),運行composer dump-autoload.

最后但并非最不重要的一點是,無論您何時何地需要使用它,只需包含

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


查看完整回答
反對 回復 2023-07-21
  • 1 回答
  • 0 關注
  • 115 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號