我正在开发一个程序包,并在我的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 MyPrivateRepo\Prefs\Traits;
use MyPrivateRepo\Prefs\Prefs;
trait HasPrefs
{
public function prefs($key = null, $value = null)
{
//...do pref related stuff here...
}
}
我已经加载了私有项目,Prefs
直接调用该类时,一切工作都很好。然后,我决定测试将HasPrefs
特质添加到我的User
模型中:
namespace App;
use Cartalyst\Sentinel\Users\EloquentUser;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use MyPrivateRepo\Prefs\Traits\HasPrefs;
class User extends EloquentUser implements
AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use SoftDeletes,
Authenticatable,
Authorizable,
HasPrefs,
CanResetPassword;
//...do lots of user related stuff here...
}
现在,每次尝试执行任何操作时,都会收到以下错误消息:
[Symfony\Component\Debug\Exception\FatalErrorException]
Trait 'MyPrivateRepo\Prefs\Traits\HasPrefs' not found
然后我做到composer update
了,但是到达运行的脚本部分时遇到了与上面相同的错误php artisan optimize
。
我注释掉了对HasPrefs
in的引用,User
然后重新运行artisan optimize
,但没有任何问题。
取消注释HasPrefs
和所有正在工作,没有错误预期......接下来的时间,我需要运行,直到composer update
该项目的一次。然后,我回到必须HasPrefs
再次注释掉引用并手动运行的位置artisan optimize
。
鉴于这是需要部署到生产服务器的内容,因此我不能在每次有自动部署composer update
或composer install
由自动部署触发时手动编辑使用此特征的每个文件。
我尝试了以下方法来解决此问题,但未成功:
composer update
如果上述任何一项临时解决了此问题,则只需一个电话即可将其重新打断。
有什么主意在这里吗?
如您在这里看到的:
"psr-4": {
"MyPrivateRepo\\Prefs\\": "src/"
},
您将src
dir指向MyPrivateRepo\Prefs
命名空间。因此,当您想在名为dir的目录中使用此特征时,Traits
名称空间应如下所示:
MyPrivateRepo\Prefs\Prefs\Traits
因为您还有一个Prefs
,所以您use
在此特征中的声明将如下所示:
use MyPrivateRepo\Prefs\Prefs\Prefs;
我的建议是将作曲家的条目更改为:
"psr-4": {
"MyPrivateRepo\\": "src/"
},
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句