Laravel学習ノート

18603 ワード

PHP取付
https://www.php.net/downloads...
composerインストール
インストール方法
https://getcomposer.org/downl...
composerミラーダウンロードアドレスの構成
//    
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
//      
composer config -g --unset repos.packagist
//    
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
//        
composer config --unset repos.packagist

Laravelインストール
環境要件
PHP> = 7.2.0
BCMath PHP  
Ctype PHP  
JSON PHP  
Mbstring PHP  
OpenSSL PHP  
PDO PHP  
Tokenizer PHP  
XML PHP  

Laravelインストーラによる
composer global require laravel/installer
laravel new blog

composerによるプロジェクトの作成
composer create-project --prefer-dist laravel/laravel blog

ローカルサーバの起動
php artisan serve

ディレクトリ構造
ルートディレクトリの下にある各ディレクトリapp:アプリケーションのコアディレクトリで、ほとんどのプロジェクトのすべてのクラスがここにあります.bootstrap:フレーム起動ファイルapp.phpと、起動時にパフォーマンスを最適化するために生成されたファイルとを含む.config:すべてのプロファイルが含まれます.これらのファイルを読んで、簡単に構成できる内容を理解したほうがいいです.database:データベースの移入、移行、モデルファクトリファイルが含まれます.SQLiteデータベース格納ディレクトリとして使用できます.public:静的リソースディレクトリであり、トップページファイルindex.phpを含む.resource:コンパイルされていないソースファイル(テンプレート、言語、リソース)が含まれています.routes:すべてのルーティング定義が含まれています.storage:コンパイルされたテンプレートファイル、sessionファイル、キャッシュファイル、ログなどのファイルが含まれています.tests:自動テストファイルが含まれています.テストコマンドphp vendor/bin/phpunitを実行します.vendor:composer依存ディレクトリ.appディレクトリの下にある各ディレクトリ
appディレクトリの下の多くのディレクトリはコマンドによって生成されます.ComposerがPSR-4を使用して標準自動ローディングを自動ローディングします.
生成コマンドの表示:php artisan make:list.Broadcasting:broadcast channelクラスをすべて含みます.Console:カスタムコマンドと、コマンドを登録し、計画タスクを定義するカーネルファイルが含まれます.Events:イベントディレクトリ.Exceptions:例外および例外処理ディレクトリ.Http:コントローラ、ミドルウェア、フォームリクエストが含まれます.ほとんどのリクエストの処理ロジックはここに置かれています.Jobs:キュータスクを格納します.Listeners:イベントのリスニングを格納します.Mail:メールクラスディレクトリを格納します.Notifications:通知クラスが格納されます.Laravelには、email、Slack、SMS、databaseという多くのドライバが内蔵されています.Policies:ライセンスポリシークラスディレクトリ.Providers:すべてのサービスプロバイダが含まれています.サービスプロバイダは、サービスコンテナにサービスをバインドしたり、イベントを登録したり、他のタスクを実行したりすることで、アプリケーションを起動します.Rules:カスタム検証ルール・オブジェクトが格納されます.routesディレクトリの下にある各ディレクトリweb.php内のルーティングは、webミドルウェアグループ(機能:session状態、CSRF保護、cookie暗号化など)を適用する.api.php内のルーティングは、apiミドルウェアグループ(機能:アクセスレート制御など)を適用する.すべてのリクエストはtoken認証に合格し、セッションステータスはありません.consoles.phpは、コンソールコマンドに基づくすべての閉パケットを定義する.channels.phpは、すべてのイベント放送チャンネルを登録している.
WEBサーバ構成
apache
Options +FollowSymLinks -Indexes
RewriteEngine On

RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

nginx
location / {
    try_files $uri $uri/ /index.php?$query_string;
}

コンフィギュレーション
構成ディレクトリconfig環境設定.envファイル内の変数は、システムレベルまたはサーバレベルの変数によって上書きされます.
スペースのある値は二重引用符でAPP_NAME="My Application"に含めてください.envファイル内の変数はenv()関数で取得され、configディレクトリ下の変数はconfig()関数で取得されます.PHPUnitテストを実行するとき、または--env=testingオプションArtisanコマンドを実行するとき、.env.testing.envファイルの値を上書きします.
$environment = App::environment();

if (App::environment('local')) {
    //     local
}

if (App::environment(['local', 'staging'])) {
    //     local   staging...
}

Debugページの環境変数を非表示にする
# config/app.php
return [
    // ...
    'debug_blacklist' => [
        '_ENV' => [
            'APP_KEY',
            'DB_PASSWORD',
        ],

        '_SERVER' => [
            'APP_KEY',
            'DB_PASSWORD',
        ],

        '_POST' => [
            'password',
        ],
    ],
];

取得の設定
$value = config('app.timezone');                           //   
config(['app.timezone' => 'America/Chicago']);             //   

メンテナンスモード
優先ロード:resources/views/errors/503.blade.php
php artisan down 
php artisan down --message="Upgrading Database" --retry=60 
php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16`
//            
php artisan up

要求ライフサイクル
すべてのリクエストは、まずpublic/index.phpを通過します.
まずcomposerをロードしてファイルを自動的にロードし、bootstrap/app.phpで基礎サービスコンテナをインスタンス化します.
フレームワークは、すべての要求をHTTP/Consoleカーネルapp/Http/Kernel.phpおよびapp/Console/Kernel.phpに送信するapp/Http/Kernel.phpIlluminate\Foundation\Http\Kernelを継承し、要求が実行される前に実行され、主に構成エラー処理、ログ、環境チェック、すでに他の要求が処理される前に実行しなければならないタスク、例えばHTTPミドルウェア、セッション管理、CSRFトークンなどである.Illuminate\Foundation\Http\Kernelは、Requestを取得し、Responseを返します.
アプリケーションのすべてのサービスプロバイダは、config/app.phpプロファイルのproviders配列に構成されています.
まずregisterメソッドをすべてのプロバイダで呼び出し、その後、すべてのプロバイダが登録番号を取得するとbootメソッドが呼び出されます.アプリケーションが起動されると、Requestは、割り当てのためにrouterに渡される.routerは、要求をルーティングまたはコントローラに割り当て、ルーティング固有のミドルウェアを実行します.
サービスコンテナ
サービスコンテナ内のバインド、解析、イベントの解析
バインディング
ベースバインド
$this->app->bind('redis.connection', function ($app) {
    return $app['redis']->connection();
});

単一バインディング
$this->app->singleton('redis', function ($app) { $config = $app->make('config')->get('database.redis', []);
    return new RedisManager($app, Arr::pull($config, 'client', 'predis'), $config);
});

インスタンスバインド
$api = new HelpSpot\API(new HttpClient);
$this->app->instance('HelpSpot\API', $api);

インスタンスの初期値
$this->app->when('App\Http\Controllers\UserController')
          ->needs('$variableName')
          ->give($value);

インタフェースバインド
$this->app->bind(
    'App\Contracts\EventPusher',
    'App\Services\RedisEventPusher'
);

コンテキストに応じて異なるバインドを提供
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\PhotoController;
use App\Http\Controllers\VideoController;
use Illuminate\Contracts\Filesystem\Filesystem;

$this->app->when(PhotoController::class)
          ->needs(Filesystem::class)
          ->give(function () {
              return Storage::disk('local');
          });

$this->app->when([VideoController::class, UploadController::class])
          ->needs(Filesystem::class)
          ->give(function () {
              return Storage::disk('s3');
          });

バインドにラベルを設定する
$this->app->bind('SpeedReport', function () {
    //
});

$this->app->bind('MemoryReport', function () {
    //
});

$this->app->tag(['SpeedReport', 'MemoryReport'], 'reports');
taggedの方法で簡単に解析できます
$this->app->bind('ReportAggregator', function ($app) {
    return new ReportAggregator($app->tagged('reports'));
});

拡張バインディングextendメソッドは、解決されたサービスを修正することができる.
$this->app->extend(Service::class, function ($service) {
    return new DecoratedService($service);
});

解析の例
きそかいせき
$api = $this->app->make('HelpSpot\API');

//    $app ,  resolve  
$api = resolve('HelpSpot\API');

//              
$api = $this->app->makeWith('HelpSpot\API', ['id' => 1]);

コンテナイベント
サービスコンテナは、オブジェクトを解析するたびにイベントをトリガーします.resolvingの方法でこのイベントを監視できます.
//           
$this->app->resolving(function ($object, $app) {
    // Called when container resolves object of any type...
});
//    HelpSpot\API   
$this->app->resolving(HelpSpot\API::class, function ($api, $app) {
    // Called when container resolves objects of type "HelpSpot\API"...
});

サービスプロバイダ
サービスプロバイダのロードは、フレームワークの起動の重要なステップの1つであり、主に異なるコンポーネント(データベース、キュー、検証、ルーティングなど)の起動を担当し、サービスプロバイダはconfig/app.phpproviders配列に構成されています.
すべてのサーバはIlluminate\Support\ServiceProviderクラスを継承し、このクラスはregisterメソッドとbootメソッドを含み、registerメソッドでは、サービスをサービスコンテナにバインドするだけでよい.
サービスプロバイダを作成artisanコマンドラインツールmake:providerによって新しいプロバイダが生成される
php artisan make:provider RiakServiceProvider

サービスプロバイダは、主に2つの方法:registerおよびbootによって提供される.registerは、容器に何かをバインドするだけです.bootは、コンテナがすべてのサービスプロバイダのregisterメソッドを呼び出した後、bootメソッドを呼び出すために、タイププロンプト解析などを使用して、任意のやりたいことを完了することができます.
サービスプロバイダは、config/app.phpproviders配列に登録される.
遅延サービスプロバイダを作成
サービスプロバイダがサービスコンテナにのみ登録されている場合は、登録バインドされたサービスが本当に必要なときにロードされるまで、バインドを遅延ロードすることを選択します.遅延ロードのようなプロバイダは、要求されるたびにロードに入るわけではありません.
ロードプロバイダを遅延させるには、\Illuminate\Contracts\Support\DeferrableProviderインタフェースを実装し、providesメソッドを配置する必要がある.このprovidesメソッドは、プロバイダが登録したサービスコンテナバインドを返す.
app->singleton(Connection::class, function ($app) {
            return new Connection($app['config']['riak']);
        });
    }

    /**
     *            。
     *
     * @return array
     */
    public function provides()
    {
        return [Connection::class];
    }
}

Facades
Facadesの原理
LaravelアプリケーションではFacadeはコンテナからオブジェクトにアクセスできるクラスです.コアの部品はFacade種類です.Laravelが所有するFacadesも、カスタムFacadesもIlluminate\Support\Facades\Facadeクラスから継承されています.Facadeベースクラスは、__callStatic()マジックメソッドを使用し、オブジェクトがコンテナから解析されるまで呼び出されません.
use Illuminate\Support\Facades\Cache;

Route::get('/cache', function () {
    return Cache::get('key');
});

原生用法vsリアルタイム用法
#     
use App\Contracts\Publisher;
public function publish(Publisher $publisher)
{
    $this->update(['publishing' => now()]);
    $publisher->publish($this);
}
#     
use Facades\App\Contracts\Publisher;
Publisher::publish($this);

facadesリスト
Facade
Class
Service Container Binding
App
IlluminateFoundationApplication app
Artisan
IlluminateContractsConsoleKernel artisan
Auth
IlluminateAuthAuthManager auth
Auth (Instance)
IlluminateContractsAuthGuard auth.driver
Blade
IlluminateViewCompilersBladeCompiler blade.compiler
Broadcast
IlluminateContractsBroadcastingFactory
 
Broadcast (Instance)
IlluminateContractsBroadcastingBroadcaster
 
Bus
IlluminateContractsBusDispatcher
 
Cache
IlluminateCacheCacheManager cache
Cache (Instance)
IlluminateCacheRepository cache.store
Config
IlluminateConfigRepository config
Cookie
IlluminateCookieCookieJar cookie
Crypt
IlluminateEncryptionEncrypter encrypter
DB
IlluminateDatabaseDatabaseManager db
DB (Instance)
IlluminateDatabaseConnection db.connection
Event
IlluminateEventsDispatcher events
File
IlluminateFilesystemFilesystem files
Gate
IlluminateContractsAuthAccessGate
 
Hash
IlluminateContractsHashingHasher hash
Lang
IlluminateTranslationTranslator translator
Log
IlluminateLogLogManager log
Mail
IlluminateMailMailer mailer
Notification
IlluminateNotificationsChannelManager
 
Password
IlluminateAuthPasswordsPasswordBrokerManager auth.password
Password (Instance)
IlluminateAuthPasswordsPasswordBroker auth.password.broker
Queue
IlluminateQueueQueueManager queue
Queue (Instance)
IlluminateContractsQueueQueue queue.connection
Queue (Base Class)
IlluminateQueueQueue
 
Redirect
IlluminateRoutingRedirector redirect
Redis
IlluminateRedisRedisManager redis
Redis (Instance)
IlluminateRedisConnectionsConnection redis.connection
Request
IlluminateHttpRequest request
Response
IlluminateContractsRoutingResponseFactory
 
Response (Instance)
IlluminateHttpResponse
 
Route
IlluminateRoutingRouter router
Schema
IlluminateDatabaseSchemaBuilder
 
Session
IlluminateSessionSessionManager session
Session (Instance)
IlluminateSessionStore session.store
Storage
IlluminateFilesystemFilesystemManager filesystem
Storage (Instance)
IlluminateContractsFilesystemFilesystem filesystem.disk
URL
IlluminateRoutingUrlGenerator url
Validator
IlluminateValidationFactory validator
Validator (Instance)
IlluminateValidationValidator
 
View
IlluminateViewFactory view
View (Instance)
IlluminateViewView
契約書
契約とFacadesは、丈夫で十分にテストされたLaravelアプリケーションを構築するために使用できます.
キャッシュ実装の高結合コード
cache = $cache;
    }
    
    /**
     *    ID     
     *
     * @param  int  $id
     * @return Order
     */
    public function find($id)
    {
        if ($this->cache->has($id)) {
            //
        }
    }
}