簡體   English   中英

在laravel 5 app.php中使用自動加載psr-4定義的名稱空間,給出未找到的錯誤

[英]namespace defined in autoload psr-4 using in laravel 5 app.php giving not found error

我的頭陷入了一些錯誤。我沒有走錯地方。 我正在使用laravel 5並安裝它。我想使用l5-repository所以我使用composer commnad安裝了https://github.com/prettus/l5-repository這個存儲庫:

composer require prettus/l5-repository

並且我根據安裝文檔進行了所有更改,並且工作正常。

使用composer安裝存儲庫后,我的目錄結構如下:

curovis
|-- composer.json
|-- composer.lock
|-- app
|-- bootstarp
|-- config
|-- database
`-- vendor
    |-- composer
    `-- prettus
        `-- l5-repository
            |-- src
            |   `-- Prettus
            |       `-- Repository
            `-- composer.json

之后,按照文檔,我在/var/www/curovis/config/app.php輸入了以下內容: Prettus\\Repository\\Providers\\RepositoryServiceProvider::class,它的工作正常。 現在我想更改根目錄條目的composer.json ,如下所示:

"autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/",
            "Prettus\\Repository\\": "vendor/prettus/l5-repository/src/Prettus"
        }
    },

並使用composer update命令。 它也可以正常工作。 現在我想使用另一個名字使用相同的倉庫,所以我改變了以下的composer.json

"autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/",
            "RepoTest\\Repository\\": "vendor/repotest/l5-repository/src/RepoTest"
        }
    },

並在app.php file.run composer update命令中添加RepoTest\\Repository\\Providers\\RepositoryServiceProvider::class, 然后給出以下錯誤:

FatalErrorException in /var/www/curovis/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php line 146: Class 'RepoTest\Repository\Providers\RepositoryServiceProvider' not found

我不明白為什么laravel正在尋找/var/www/curovis/vendor/laravel/framework/src這個路徑,而不是以"RepoTest\\\\Repository\\\\": "vendor/repotest/l5-repository/src/RepoTest"在composer.json中。 是我想念的東西還是作曲家中的任何錯誤。 感謝幫助。

您永遠不會為在主composer.json添加的軟件包添加自動加載功能。 路徑“供應商”不應在此處出現。

我知道您正在嘗試添加一個程序包,然后對其進行修改並改用它。 您已將自動加載前綴從“ Prettus”更改為“ RepoTest”,但是還更改了PHP文件中的名稱空間嗎? 簡單地重命名路徑不會影響PHP類的名稱和名稱空間,因此,如果重命名文件,並且在該文件內未定義匹配的類,則自動加載將失敗。

無論您要做什么,我都認為最好問這個問題,而不是要解決由於您解決原始問題的方式而認為必要的問題。 如果您想知道如何修改現有項目並使用其變體:詢問它。

通過改變作曲家進入上述錯誤sovled:當我有看到autoload_classmap.phpautoload_psr4.php的文件/vendor/composer/文件夾autoload_classmap.php文件不包含我需要的命名空間。 所以我在composer.json做了以下更改:

"autoload": {
        "classmap": [
            "database","vendor/repotest/src/Repotest/Repository/"
        ],
        "psr-4": {
            "App\\": "app/",
            "Repotest\\Repository\\": "vendor/repotest/src/Repotest/Repository/"
        }
    },

因此,通過在"classmap":進行輸入:在autoload_classmap.php進行輸入,現在可以正常工作。 感謝@sven的幫助。

例:

"autoload": {
    "classmap": [
        "database"
    ],
    "files": [
        "app/helper.php"
    ],
    "psr-4": {
        "App\\": "app/"
    }
}

要加載的默認Composer文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM