検索
ホームページPHPフレームワークLaravelLaravelのコントラクトとファサードの詳細な説明

Contracts

Contracts は実際、分離の目的を達成するためにインターフェイス指向のプログラミングを提唱しています。これらの共通インターフェイスは、Laravel によって設計されています。これらはコントラクトです。

では、Laravel はどの実装を使用する必要があるかをどのようにして知るのでしょうか?

Laravel のデフォルトの Contracts バインディングでは、「Illuminate/Foundation/Application.php」にそのような定義があります: これは、デフォルトのインターフェース実装のバインディングです。

Recommendation: " laravel チュートリアル>>

/**
     * Register the core class aliases in the container.
     *
     * @return void
     */
    public function registerCoreContainerAliases()
    {
        $aliases = [
            'app'                  => ['Illuminate\Foundation\Application', 'Illuminate\Contracts\Container\Container', 'Illuminate\Contracts\Foundation\Application'],
            'auth'                 => 'Illuminate\Auth\AuthManager',
            'auth.driver'          => ['Illuminate\Auth\Guard', 'Illuminate\Contracts\Auth\Guard'],
            'auth.password.tokens' => 'Illuminate\Auth\Passwords\TokenRepositoryInterface',
            'blade.compiler'       => 'Illuminate\View\Compilers\BladeCompiler',
            'cache'                => ['Illuminate\Cache\CacheManager', 'Illuminate\Contracts\Cache\Factory'],
            'cache.store'          => ['Illuminate\Cache\Repository', 'Illuminate\Contracts\Cache\Repository'],
            'config'               => ['Illuminate\Config\Repository', 'Illuminate\Contracts\Config\Repository'],
            'cookie'               => ['Illuminate\Cookie\CookieJar', 'Illuminate\Contracts\Cookie\Factory', 'Illuminate\Contracts\Cookie\QueueingFactory'],
            'encrypter'            => ['Illuminate\Encryption\Encrypter', 'Illuminate\Contracts\Encryption\Encrypter'],
            'db'                   => 'Illuminate\Database\DatabaseManager',
            'db.connection'        => ['Illuminate\Database\Connection', 'Illuminate\Database\ConnectionInterface'],
            'events'               => ['Illuminate\Events\Dispatcher', 'Illuminate\Contracts\Events\Dispatcher'],
            'files'                => 'Illuminate\Filesystem\Filesystem',
            'filesystem'           => ['Illuminate\Filesystem\FilesystemManager', 'Illuminate\Contracts\Filesystem\Factory'],
            'filesystem.disk'      => 'Illuminate\Contracts\Filesystem\Filesystem',
            'filesystem.cloud'     => 'Illuminate\Contracts\Filesystem\Cloud',
            'hash'                 => 'Illuminate\Contracts\Hashing\Hasher',
            'translator'           => ['Illuminate\Translation\Translator', 'Symfony\Component\Translation\TranslatorInterface'],
            'log'                  => ['Illuminate\Log\Writer', 'Illuminate\Contracts\Logging\Log', 'Psr\Log\LoggerInterface'],
            'mailer'               => ['Illuminate\Mail\Mailer', 'Illuminate\Contracts\Mail\Mailer', 'Illuminate\Contracts\Mail\MailQueue'],
            'auth.password'        => ['Illuminate\Auth\Passwords\PasswordBroker', 'Illuminate\Contracts\Auth\PasswordBroker'],
            'queue'                => ['Illuminate\Queue\QueueManager', 'Illuminate\Contracts\Queue\Factory', 'Illuminate\Contracts\Queue\Monitor'],
            'queue.connection'     => 'Illuminate\Contracts\Queue\Queue',
            'redirect'             => 'Illuminate\Routing\Redirector',
            'redis'                => ['Illuminate\Redis\Database', 'Illuminate\Contracts\Redis\Database'],
            'request'              => 'Illuminate\Http\Request',
            'router'               => ['Illuminate\Routing\Router', 'Illuminate\Contracts\Routing\Registrar'],
            'session'              => 'Illuminate\Session\SessionManager',
            'session.store'        => ['Illuminate\Session\Store', 'Symfony\Component\HttpFoundation\Session\SessionInterface'],
            'url'                  => ['Illuminate\Routing\UrlGenerator', 'Illuminate\Contracts\Routing\UrlGenerator'],
            'validator'            => ['Illuminate\Validation\Factory', 'Illuminate\Contracts\Validation\Factory'],
            'view'                 => ['Illuminate\View\Factory', 'Illuminate\Contracts\View\Factory'],
        ];

カスタム インターフェイスを実装する場合、バインディングのために ServiceProvider で使用できます:

$this->app->bind('App\Contracts\EventPusher', 'App\Services\PusherEventPusher');

Facades

Facades は提供しますアプリケーションのサービスコンテナで利用可能なクラスの「静的」インターフェース。 Laravelの「ファサード」は、サービスコンテナ内の基本クラスの「静的プロキシ」として機能します。理解しにくいです?

プロジェクト ディレクトリの config/app.php を開き、

/*
    |--------------------------------------------------------------------------
    | Class Aliases
    |--------------------------------------------------------------------------
    |
    | This array of class aliases will be registered when this application
    | is started. However, feel free to register as many as you wish as
    | the aliases are "lazy" loaded so they don't hinder performance.
    |
    */
    'aliases' => [
        'App'       => Illuminate\Support\Facades\App::class,
        'Artisan'   => Illuminate\Support\Facades\Artisan::class,
        'Auth'      => Illuminate\Support\Facades\Auth::class,
        'Blade'     => Illuminate\Support\Facades\Blade::class,
        'Bus'       => Illuminate\Support\Facades\Bus::class,
        'Cache'     => Illuminate\Support\Facades\Cache::class,
        'Config'    => Illuminate\Support\Facades\Config::class,
        'Cookie'    => Illuminate\Support\Facades\Cookie::class,
        'Crypt'     => Illuminate\Support\Facades\Crypt::class,
        'DB'        => Illuminate\Support\Facades\DB::class,
        'Eloquent'  => Illuminate\Database\Eloquent\Model::class,
        'Event'     => Illuminate\Support\Facades\Event::class,
        'File'      => Illuminate\Support\Facades\File::class,
        'Gate'      => Illuminate\Support\Facades\Gate::class,
        'Hash'      => Illuminate\Support\Facades\Hash::class,
        'Input'     => Illuminate\Support\Facades\Input::class,
        'Lang'      => Illuminate\Support\Facades\Lang::class,
        'Log'       => Illuminate\Support\Facades\Log::class,
        'Mail'      => Illuminate\Support\Facades\Mail::class,
        'Password'  => Illuminate\Support\Facades\Password::class,
        'Queue'     => Illuminate\Support\Facades\Queue::class,
        'Redirect'  => Illuminate\Support\Facades\Redirect::class,
        'Redis'     => Illuminate\Support\Facades\Redis::class,
        'Request'   => Illuminate\Support\Facades\Request::class,
        'Response'  => Illuminate\Support\Facades\Response::class,
        'Route'     => Illuminate\Support\Facades\Route::class,
        'Schema'    => Illuminate\Support\Facades\Schema::class,
        'Session'   => Illuminate\Support\Facades\Session::class,
        'Storage'   => Illuminate\Support\Facades\Storage::class,
        'URL'       => Illuminate\Support\Facades\URL::class,
        'Validator' => Illuminate\Support\Facades\Validator::class,
        'View'      => Illuminate\Support\Facades\View::class,
    ],

を見つけます。何か見つかりましたか?はい、ファサードは実際には、config/app.php で定義された一連のクラスのエイリアスです。ただし、これらのクラスにはすべて、基本的な Illuminate\Support\Facades\Facade クラスを継承し、メソッド getFacadeAccessor が名前を返すという共通の機能があります。

カスタマイズされたファサード

リファレンス http://www.tutorialspoint.com/laravel/laravel_facades.htm

ステップ 1 -TestFacadesServiceProvider という名前の ServiceProvider を作成し、次のコマンドを使用します:

php Artisan make:provider TestFacadesServiceProvider

ステップ 2 - 基礎となるプロキシ クラスを作成し、「TestFacades」という名前を付けます.php” (「App/Test」)。

App/Test/TestFacades.php

<?php
namespace App\Test;
class TestFacades{
   public function testingFacades(){
      echo "Testing the Facades in Laravel.";
   }
}
?>

ステップ 3 - 「TestFacades.php」という名前の Facade クラスを次の場所に作成します。 「App/Test/Facades」.

App/Test/Facades/TestFacades.php

<?php
namespace app\Test\Facades;
use Illuminate\Support\Facades\Facade;
class TestFacades extends Facade{
   protected static function getFacadeAccessor() { return &#39;test&#39;; }
}

ステップ 4 -「TestFacadesServiceProviders.php」という名前の ServiceProviders クラスを次の場所に作成します。 「App/Test/Facades」.

App/Providers/TestFacadesServiceProviders.php

<?php
namespace App\Providers;
use App;
use Illuminate\Support\ServiceProvider;
class TestFacadesServiceProvider extends ServiceProvider {
   public function boot() {
      //
   }
   public function register() {
     //可以这么绑定,这需要use App;
    //  App::bind(&#39;test&#39;,function() {
    //     return new \App\Test\TestFacades;
    //  });
     
     //也可以这么绑定,推荐。这个test对应于Facade的getFacadeAccessor返回值
        $this->app->bind("test", function(){
            return new MyFoo(); //给这个Facade返回一个代理实例。所有对Facade的调用都会被转发到该类对象下。
        });
   }
}

ステップ 5 - ServiceProvider を config/app.php クラスに登録します

ステップ 6 -config/app.phpでカスタム Facade エイリアスを登録します。

Use test:

app/ Http/routes.php に次の行を追加します。

Route::get(&#39;/facadeex&#39;, function(){
   return TestFacades::testingFacades();
});

ステップ 9 -次の URL にアクセスしてファサードをテストします。

http://localhost:8000/facadeex 出力を表示します

以上がLaravelのコントラクトとファサードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はsegmentfaultで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Laravel(PHP)vs。Python:異なるユースケースとアプリケーションLaravel(PHP)vs。Python:異なるユースケースとアプリケーションApr 18, 2025 am 12:16 AM

LaravelまたはPythonの選択は、プロジェクトの要件に依存します。1)Webアプリケーションをすばやく開発し、ORMと認証システムを使用する必要がある場合は、Laravelを選択します。 2)データ分析、機械学習、または科学的コンピューティングが含まれる場合は、Pythonを選択します。

LaravelとPython:適切なツールを見つけるLaravelとPython:適切なツールを見つけるApr 18, 2025 am 12:14 AM

LaravelはWebアプリケーションを迅速に構築するのに適しており、Pythonは柔軟性と汎用性を必要とするプロジェクトに適しています。 1)Laravelは、PHPエコシステムに適したORMやルーティングなどの豊富な機能を提供します。 2)Pythonは、簡潔な構文と強力なライブラリエコシステムで知られており、Web開発やデータサイエンスなどのフィールドに適しています。

LaravelとPHP:動的なWebサイトの作成LaravelとPHP:動的なWebサイトの作成Apr 18, 2025 am 12:12 AM

LaravelとPHPを使用して、動的なWebサイトを効率的に楽しく作成します。 1)LaravelはMVCアーキテクチャに従い、ブレードテンプレートエンジンはHTMLの書き込みを簡素化します。 2)ルーティングシステムと要求処理メカニズムにより、URL定義とユーザー入力処理が簡単になります。 3)Eloquentormはデータベース操作を簡素化します。 4)データベースの移行、CRUD操作、ブレードテンプレートの使用は、ブログシステムの例を介して実証されています。 5)Laravelは、強力なユーザー認証と承認機能を提供します。 6)デバッグスキルには、ロギングシステムと職人ツールの使用が含まれます。 7)パフォーマンスの最適化の提案には、怠zyなロードとキャッシュが含まれます。

Laravelとフルスタック:フロントとバックを一緒にLaravelとフルスタック:フロントとバックを一緒にApr 18, 2025 am 12:07 AM

Laravelは、ブレードテンプレートエンジン、Eloquentorm、Artisan Tools、Laravelmixを介してフルスタック開発を実現します。1。ブレードは、フロントエンド開発を簡素化します。 2. Eloquentはデータベース操作を簡素化します。 3。職人は開発効率を向上させます。 4。Laravelmixは、フロントエンドリソースを管理します。

Laravel:現代のWeb開発のためのフレームワークLaravel:現代のWeb開発のためのフレームワークApr 18, 2025 am 12:05 AM

Laravelは、MVCアーキテクチャモデルに従い、豊富なツールと機能を提供し、Web開発プロセスを簡素化する最新のPHPベースのフレームワークです。 1)データベースインタラクション用のEloquentorm、2)高速コード生成のための職人コマンドラインインターフェイス、3)効率的なビュー開発のためのブレードテンプレートエンジン、4)URL構造を定義するための強力なルーティングシステム、5)ユーザー管理のための認証システム、6)リアルタイム機能のためのイベントリスニングとブロードキャスト、7)パフォーマンスを維持するためのパフォーマンスを維持します。

Laravel(PHP)vs。Python:長所と短所を計量しますLaravel(PHP)vs。Python:長所と短所を計量しますApr 17, 2025 am 12:18 AM

LaravelはWebアプリケーションを迅速に構築するのに適していますが、Pythonはより広い範囲のアプリケーションシナリオに適しています。 1.Laravelは、Web開発を簡素化するために、Eloquentorm、Bladeテンプレートエンジン、職人ツールを提供します。 2。Pythonは、その動的なタイプ、リッチ標準ライブラリ、サードパーティのエコシステムで知られており、Web開発、データサイエンス、その他の分野に適しています。

Laravel vs. Python:フレームワークとライブラリの比較Laravel vs. Python:フレームワークとライブラリの比較Apr 17, 2025 am 12:16 AM

LaravelとPythonにはそれぞれ独自の利点があります。Laravelは、機能が豊富なWebアプリケーションを迅速に構築するのに適しており、Pythonはデータサイエンスと一般的なプログラミングの分野でうまく機能します。 1.Laravelは、最新のWebアプリケーションの構築に適したEloquentormおよびBladeテンプレートエンジンを提供します。 2。Pythonには豊富な標準的な図書館とサードパーティライブラリがあり、DjangoとFlaskのフレームワークはさまざまな開発ニーズを満たしています。

Laravelの目的:堅牢でエレガントなWebアプリケーションの構築Laravelの目的:堅牢でエレガントなWebアプリケーションの構築Apr 17, 2025 am 12:13 AM

Laravelは、コード構造を明確にし、開発プロセスをより芸術的にすることができるため、選択する価値があります。 1)LaravelはPHPに基づいており、MVCアーキテクチャに従い、Web開発を簡素化します。 2)Eloquentorm、Artisan Tools、Bladeテンプレートなどのコア機能は、開発の優雅さと堅牢性を高めます。 3)ルーティング、コントローラー、モデル、ビューを通じて、開発者はアプリケーションを効率的に構築できます。 4)キューやイベントモニタリングなどの高度な機能により、アプリケーションのパフォーマンスがさらに向上します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、