パッケージを開発していて、PSR-4構造に「Traits」ディレクトリを追加しました。これはパッケージのcomposer.jsonに反映されています。 src/
ディレクトリ内Laravelパッケージの特性が見つかりません
{
"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
}
は、この構造である:ここでは
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
クラスを直接呼び出します。その後、私は私のUser
モデルに追加HasPrefs
形質をテストすることを決めた:、今
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
への参照をUser
にコメントし、問題なく動作したartisan optimize
を再実行しました。
コメントを外してHasPrefs
とすると、エラーなしですべて正常に動作しています。次に、プロジェクトでcomposer update
を再度実行する必要があります。次に、私はHasPrefs
への参照をコメントアウトして、手動でartisan optimize
を実行する必要があることに戻っています。
プロダクションサーバーに展開する必要があることを考えると、自動展開によってcomposer update
またはcomposer install
がトリガーされるたびに、この特性を使用するすべてのファイルを手動で編集することはできません。
ノー成功にこれを解決するには、次を試してみた:
- 職人クリアキャッシュ再びHasPrefsを外してください:職人がクリアコンパイル& &職人最適化
- rm composer.loc
- -o & &作曲更新をk個のrm -rfベンダー/ * & &作曲
をインストールし、それが取るすべては上記のいずれかが一時的に問題を修正した場合にすべての繰り返しそれを破るためにcomposer update
への単一の呼び出しです。
ここで何が間違っていますか?
私はちょうど '「MyPrivateRepo \\」をやってに実行する問題:「SRC /」は'マルチがあるということですこの同じプライベートレポから他のパッケージも購入できます。これらの他のすべてのパッケージには、同じ種類のPSR-4宣言があります。たとえば、「MyPrivateRepo \\ SDK \\」:「src /」という別のcomposer.jsonもあります。 – eComEvo
2つのコンポーザーを使いたい場合は、1つの 'src'でそれらを使うべきではありません。 'MyPrivateRepo/Sdk/src/...'と 'MyPrivateRepo/Prefs/src/...'のように他のパッケージに分割して、anathorディレクトリに分割してみてください。 –
Greateので、 'src'の中から' Prefs'ディレクターを削除することができます(それで、すべてのディレクトリは 'src'の中に直接あります)。あなたは 'PSR-4'を理解する必要があります、それはそのように動作します。 –