5

良い一日!

読めば読むほど、これについて混乱します。ファサードとエイリアスの違いは何ですか?

私はこのクラスを持っています:

/app/libraries/Project/Data.php

namespace PJ;

class Data {

    // It is much like a data container, with static methods and properties for saving info

}

そして、対応するファサードなので、PJD::だけを使用してアクセスできます。

いくつかのウェブページによると:

... Laravel Facade はプロキシです。それらはラップアラウンドし、コードの真の実装の基礎となる関数を呼び出します。さらに、Laravel アプリケーションのコンテキストでは、これらの Facade はエイリアスに割り当てることによってアクセスされます。このように依存性注入コンテナーを使用すると、File を呼び出すだけで Illuminate\Support\Facades\Filesystem などを参照できます。( http://ryantablada.com/post/proxies-service-locators-alias-facades-and-war )

しかし、次のようなものを追加することも発見し、テストに成功しました。

__app/config/app.php__

'aliases' => array(
    //....,
    'PJD'             => 'PJ\Data',
),

同じ方法でクラスにアクセスすることもできます。

それで、違いは何ですか?

ありがとう

編集 #01

/app/libraries/Project/Data.phpに Data という名前のクラスを作成しました

namespace PJ;

class Data {
    // It is much like a data container, with static methods and properties for saving info
}

このクラス データ/app/libraries/Project/DataFacade.phpのファサード クラスがあります。

use Illuminate\Support\Facades\Facade;   
class PJD extends Facade {
    protected static function getFacadeAccessor() { 
        return 'PJData';
    } 
}

そして、私はそれらのためのサービスプロバイダーを持っています: /app/libraries/Project/DataServiceProvider.php

use Illuminate\Support\ServiceProvider;

class DataServiceProvider extends ServiceProvider {
    public function register() {
        $this->app->singleton('PJData', function() {
            return new PJ\Data;
        });
    }
}

/app/config/app.phpにも追加しました:

'providers' => array(
    // ....
    'DataServiceProvider',
),

composer.jsonにpsr-4 行を追加して、PJ 名前空間を /app/libraries/Project に誘導しました

"psr-4": {
     "PJ\\": "app/libraries/Project"
},

これらすべてを行うことで、PJ\Data:: の代わりに PJD:: を使用するだけで、プロジェクトのどこからでもクラスにアクセスできます。

ただし、 /app/config/app.phpに追加するだけで気付きました

'aliases' => array(
    //....,
    'PJD'             => 'PJ\Data',
),

ファサードと ServiceProvider がなくても、まったく同じ結果が得られます。それで、どちらかのポイントは何ですか?

ありがとう、そして大きな投稿でごめんなさい。

4

1 に答える 1