Laravel学習ノート
18603 ワード
PHP取付
https://www.php.net/downloads...
composerインストール
インストール方法
https://getcomposer.org/downl...
composerミラーダウンロードアドレスの構成
Laravelインストール
環境要件
Laravelインストーラによる
composerによるプロジェクトの作成
ローカルサーバの起動
ディレクトリ構造
ルートディレクトリの下にある各ディレクトリ
appディレクトリの下の多くのディレクトリはコマンドによって生成されます.ComposerがPSR-4を使用して標準自動ローディングを自動ローディングします.
生成コマンドの表示:
WEBサーバ構成
apache
nginx
コンフィギュレーション
構成ディレクトリ
スペースのある値は二重引用符で
Debugページの環境変数を非表示にする
取得の設定
メンテナンスモード
優先ロード:resources/views/errors/503.blade.php
要求ライフサイクル
すべてのリクエストは、まず
まずcomposerをロードしてファイルを自動的にロードし、
フレームワークは、すべての要求をHTTP/Consoleカーネル
アプリケーションのすべてのサービスプロバイダは、
まずregisterメソッドをすべてのプロバイダで呼び出し、その後、すべてのプロバイダが登録番号を取得するとbootメソッドが呼び出されます.アプリケーションが起動されると、
サービスコンテナ
サービスコンテナ内のバインド、解析、イベントの解析
バインディング
ベースバインド
単一バインディング
インスタンスバインド
インスタンスの初期値
インタフェースバインド
コンテキストに応じて異なるバインドを提供
バインドにラベルを設定する
拡張バインディング
解析の例
きそかいせき
コンテナイベント
サービスコンテナは、オブジェクトを解析するたびにイベントをトリガーします.
サービスプロバイダ
サービスプロバイダのロードは、フレームワークの起動の重要なステップの1つであり、主に異なるコンポーネント(データベース、キュー、検証、ルーティングなど)の起動を担当し、サービスプロバイダは
すべてのサーバは
サービスプロバイダを作成
サービスプロバイダは、主に2つの方法:
サービスプロバイダは、
遅延サービスプロバイダを作成
サービスプロバイダがサービスコンテナにのみ登録されている場合は、登録バインドされたサービスが本当に必要なときにロードされるまで、バインドを遅延ロードすることを選択します.遅延ロードのようなプロバイダは、要求されるたびにロードに入るわけではありません.
ロードプロバイダを遅延させるには、
Facades
Facadesの原理
LaravelアプリケーションではFacadeはコンテナからオブジェクトにアクセスできるクラスです.コアの部品は
原生用法vsリアルタイム用法
facadesリスト
Facade
Class
Service Container Binding
App
IlluminateFoundationApplication
Artisan
IlluminateContractsConsoleKernel
Auth
IlluminateAuthAuthManager
Auth (Instance)
IlluminateContractsAuthGuard
Blade
IlluminateViewCompilersBladeCompiler
Broadcast
IlluminateContractsBroadcastingFactory
Broadcast (Instance)
IlluminateContractsBroadcastingBroadcaster
Bus
IlluminateContractsBusDispatcher
Cache
IlluminateCacheCacheManager
Cache (Instance)
IlluminateCacheRepository
Config
IlluminateConfigRepository
Cookie
IlluminateCookieCookieJar
Crypt
IlluminateEncryptionEncrypter
DB
IlluminateDatabaseDatabaseManager
DB (Instance)
IlluminateDatabaseConnection
Event
IlluminateEventsDispatcher
File
IlluminateFilesystemFilesystem
Gate
IlluminateContractsAuthAccessGate
Hash
IlluminateContractsHashingHasher
Lang
IlluminateTranslationTranslator
Log
IlluminateLogLogManager
Mail
IlluminateMailMailer
Notification
IlluminateNotificationsChannelManager
Password
IlluminateAuthPasswordsPasswordBrokerManager
Password (Instance)
IlluminateAuthPasswordsPasswordBroker
Queue
IlluminateQueueQueueManager
Queue (Instance)
IlluminateContractsQueueQueue
Queue (Base Class)
IlluminateQueueQueue
Redirect
IlluminateRoutingRedirector
Redis
IlluminateRedisRedisManager
Redis (Instance)
IlluminateRedisConnectionsConnection
Request
IlluminateHttpRequest
Response
IlluminateContractsRoutingResponseFactory
Response (Instance)
IlluminateHttpResponse
Route
IlluminateRoutingRouter
Schema
IlluminateDatabaseSchemaBuilder
Session
IlluminateSessionSessionManager
Session (Instance)
IlluminateSessionStore
Storage
IlluminateFilesystemFilesystemManager
Storage (Instance)
IlluminateContractsFilesystemFilesystem
URL
IlluminateRoutingUrlGenerator
Validator
IlluminateValidationFactory
Validator (Instance)
IlluminateValidationValidator
View
IlluminateViewFactory
View (Instance)
IlluminateViewView
契約書
契約とFacadesは、丈夫で十分にテストされたLaravelアプリケーションを構築するために使用できます.
キャッシュ実装の高結合コード
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.php
はIlluminate\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.php
のproviders
配列に構成されています.すべてのサーバは
Illuminate\Support\ServiceProvider
クラスを継承し、このクラスはregister
メソッドとboot
メソッドを含み、register
メソッドでは、サービスをサービスコンテナにバインドするだけでよい.サービスプロバイダを作成
artisan
コマンドラインツールmake:provider
によって新しいプロバイダが生成されるphp artisan make:provider RiakServiceProvider
サービスプロバイダは、主に2つの方法:
register
およびboot
によって提供される.register
は、容器に何かをバインドするだけです.boot
は、コンテナがすべてのサービスプロバイダのregister
メソッドを呼び出した後、boot
メソッドを呼び出すために、タイププロンプト解析などを使用して、任意のやりたいことを完了することができます.サービスプロバイダは、
config/app.php
のproviders
配列に登録される.遅延サービスプロバイダを作成
サービスプロバイダがサービスコンテナにのみ登録されている場合は、登録バインドされたサービスが本当に必要なときにロードされるまで、バインドを遅延ロードすることを選択します.遅延ロードのようなプロバイダは、要求されるたびにロードに入るわけではありません.
ロードプロバイダを遅延させるには、
\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
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)) {
//
}
}
}