在 laravel 5 app.php 中使用自动加载 psr-4 定义的命名空间给出未找到错误
namespace defined in autoload psr-4 using in laravel 5 app.php giving not found error
把我的脑袋卡在了一些 errors.i 不明白我犯错的地方。
我正在使用 laravel 5
并安装了 it.I 想要使用 l5-repository
所以我安装了 https://github.com/prettus/l5-repository 这个存储库使用 composer
commnad:
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
命令。它也可以正常工作。
现在我想用另一个名字使用相同的 repo,所以我用 follwing 更改了 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
这条路径,而不是 composer.json 中提供的 "RepoTest\Repository\": "vendor/repotest/l5-repository/src/RepoTest"
。
是我遗漏的任何东西或作曲家的任何错误。
感谢您的帮助。
您永远不会为您添加到主 composer.json
中的包添加自动加载。路径 "vendor" 不应该出现在那里。
我知道您正在尝试添加一个包,然后修改它并改用它。您将自动加载前缀从 "Prettus" 更改为 "RepoTest",但是您是否还更改了 PHP 文件中的名称空间?简单地重命名路径不会影响 PHP class 名称和命名空间,因此如果您重命名文件,并且在该文件中没有定义匹配的 class,自动加载将失败。
无论你想做什么,我认为最好问一下这个问题,而不是因为你解决原始问题的方式而要求解决你认为必要的问题。如果您想知道如何修改现有项目并使用它的变体:询问它。
通过更改作曲家条目解决了上述错误:
当我看到 /vendor/composer/
文件夹的 autoload_classmap.php
和 autoload_psr4.php
文件时 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 文件。
把我的脑袋卡在了一些 errors.i 不明白我犯错的地方。
我正在使用 laravel 5
并安装了 it.I 想要使用 l5-repository
所以我安装了 https://github.com/prettus/l5-repository 这个存储库使用 composer
commnad:
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
命令。它也可以正常工作。
现在我想用另一个名字使用相同的 repo,所以我用 follwing 更改了 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
这条路径,而不是 composer.json 中提供的 "RepoTest\Repository\": "vendor/repotest/l5-repository/src/RepoTest"
。
是我遗漏的任何东西或作曲家的任何错误。
感谢您的帮助。
您永远不会为您添加到主 composer.json
中的包添加自动加载。路径 "vendor" 不应该出现在那里。
我知道您正在尝试添加一个包,然后修改它并改用它。您将自动加载前缀从 "Prettus" 更改为 "RepoTest",但是您是否还更改了 PHP 文件中的名称空间?简单地重命名路径不会影响 PHP class 名称和命名空间,因此如果您重命名文件,并且在该文件中没有定义匹配的 class,自动加载将失败。
无论你想做什么,我认为最好问一下这个问题,而不是因为你解决原始问题的方式而要求解决你认为必要的问题。如果您想知道如何修改现有项目并使用它的变体:询问它。
通过更改作曲家条目解决了上述错误:
当我看到 /vendor/composer/
文件夹的 autoload_classmap.php
和 autoload_psr4.php
文件时 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 文件。