未找到Laravel包特性



我正在开发一个包,并在我的PSR-4结构中添加了一个"Traits"目录,这反映在包的composer.json中。

{
    "name": "my-private-repo/prefs",
    "description": "Preferences package.",
    "type": "package",
    "keywords": [
        "prefs",
        "preferences"
    ],
    "require": {
        "php": ">=5.5.9",
        "illuminate/support": "5.2.*",
        "laravelcollective/html": "5.2.*",
        "anahkiasen/former": "~4"
    },
    "autoload": {
        "classmap": [
            "src/controllers",
            "src/models"
        ],
        "psr-4": {
            "MyPrivateRepo\Prefs\": "src/"
        },
        "files": [
            "src/Prefs/helpers.php"
        ]
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

src/目录中是这样的结构:

Prefs/
    Traits/
        HasPrefs.php
    Prefs.php
    PrefsServiceProvider.php
    helpers.php

HasPrefs.php的内容如下:

namespace MyPrivateRepoPrefsTraits;
use MyPrivateRepoPrefsPrefs;
trait HasPrefs
{
    public function prefs($key = null, $value = null)
    {
        //...do pref related stuff here...
    }
}

我已经加载了私人项目,当直接调用Prefs类时,一切都很好。然后我决定测试将HasPrefs特性添加到我的User模型中:

namespace App;
use CartalystSentinelUsersEloquentUser;
use IlluminateDatabaseEloquentSoftDeletes;
use IlluminateAuthAuthenticatable;
use IlluminateAuthPasswordsCanResetPassword;
use IlluminateFoundationAuthAccessAuthorizable;
use IlluminateContractsAuthAuthenticatable as AuthenticatableContract;
use IlluminateContractsAuthAccessAuthorizable as AuthorizableContract;
use IlluminateContractsAuthCanResetPassword as CanResetPasswordContract;
use MyPrivateRepoPrefsTraitsHasPrefs;
class User extends EloquentUser implements
    AuthenticatableContract,
    AuthorizableContract,
    CanResetPasswordContract
{
    use SoftDeletes,
        Authenticatable,
        Authorizable,
        HasPrefs,
        CanResetPassword;
    //...do lots of user related stuff here...
}

现在,每次我尝试做任何事情,我得到这个错误:

[SymfonyComponentDebugExceptionFatalErrorException]
Trait 'MyPrivateRepoPrefsTraitsHasPrefs' not found

然后我做了composer update,但当它到达运行php artisan optimize的脚本部分时,得到了与上面相同的错误。

我在User中注释掉了对HasPrefs的引用,并重新运行了artisan optimize,没有问题。

未注释的HasPrefs和所有的工作如预期的没有错误…直到下次我需要在项目上再次运行composer update。然后,我又不得不再次注释掉对HasPrefs的引用,并手动运行artisan optimize

考虑到这是需要部署到生产服务器的东西,我不能在每次有自动部署触发的composer updatecomposer install时手动编辑使用该特性的每个文件。

我尝试了以下方法来解决这个问题,但没有成功:

  • 工匠clear-cache
  • 作曲家的由来
  • composer clear &&作曲器更新- 0
  • 在再次注释掉HasPrefs之后:artisan clear-compiled &&工匠优化
  • rm作曲家。锁,,作曲器更新- 0
  • rm -rf vendor/* &&作曲家安装

如果上述任何一种方法暂时解决了问题,则只需调用composer update即可再次打破它。

你知道这是怎么回事吗?

如图所示:

"psr-4": {
    "MyPrivateRepo\Prefs\": "src/"
},

src dir指定为MyPrivateRepoPrefs命名空间。所以当你想在目录Traits中使用这个特性时你的命名空间应该是这样的:

MyPrivateRepoPrefsPrefsTraits

因为你也有一个Prefs,所以你的use语句在这个特质中看起来像:

 use MyPrivateRepoPrefsPrefsPrefs;

我的建议是将作曲家的条目更改为:

"psr-4": {
    "MyPrivateRepo\": "src/"
},

相关内容

  • 没有找到相关文章

最新更新