Laravel 5プロジェクト構造分析と中国語ドキュメントの読み方まとめ
HTTPルーティング
ミドルウェア
コントローラー
HTTPリクエスト
http サービスプロバイダー
*
Laravel Elixir*
暗号化
ファイルシステム/クラウドストレージ
ハッシュ
補助メソッド
ローカリゼーション*
メール*
拡張パック開発*
ページネーション*
キュー*
セッション
ブレードテンプレート
単体テスト*
データ検証
データベースの使い方の基本
クエリコンストラクター
構造ジェネレーター
移行とデータ入力
雄弁なORM
HTTPルーティング
基本ルーティング
定義さまざまな
Http Method のルート (例:
Route::get('/', function(){
Route: :post) ('foo/bar', function(){
Route::match(['get', 'post'], '/', function(){ # 複数のメソッド
Route::any('foo', function(){ # すべてのメソッド
はurlメソッドを使用して URLを生成します: $url = url('foo');
CSRF
保護 Laravelは、各ユーザーのセッションにランダムなトークンを自動的に配置します。 VerifyCsrfTokenミドルウェアは、sessionに保存されたリクエストと入力tokenを組み合わせて、tokenを検証します。 CSRF トークン を「POST」パラメータとして検索することに加えて、ミドルウェアは X-XSRF-TOKEN リクエスト ヘッダーもチェックします。 CSRFトークンをフォームに挿入します: csrf_token() ?>"> を使用したBladeテンプレートエンジン: _token" value="{{ csrf_token()}}"> が X-XSRF-TOKEN リクエスト ヘッダー に追加されました:
csrf_token()}}" /> $.ajaxSetup ({ ヘッダー: { } ... こうして、すべてのajax リクエストには次のヘッダー情報が含まれます: $.ajax({ }) メソッドチート } ) ;}); サブドメインルーティング Route::group(['domain' => ' {アカウント}。 myapp.com'], function() { {
Route::get('user/{id}', function($account 、$id) { // ); }); 'prefix' => 'admin'], function() { Route::get('users', function() { // "/admin/users" URL }); }); はルーティング プレフィックス Parameters で定義されていますRoute::group(['prefix' => 'accounts/ '], function() { ルート::get('詳細', function( ) ルートモデルバインディング モデル バインディングは、モデル エンティティをルートに注入する便利な方法 を提供します ユーザー ID を注入する代わりに、 を注入することを選択できます指定された ID に一致する User クラスのエンティティ。 RouteServiceProvider::bootメソッドでモデルバインディングを定義します: public function boot(Router $router){ 親::ブート($router ; {user} パラメータルート: Route::get('profile/{user} AppUser $user){ ) / / }); profile/1へのリクエストは、1 のIDを挿入しますエンティティユーザー 。エンティティが存在しない場合は、404をスローします。クロージャを 3 番目のパラメータとして渡して、クロージャが見つからない場合の動作を定義できます。 404 エラーをスローします 2 つのメソッド: ort (404); # 基本的に SymfonyComponentHttpKernelExceptionHttpException をスローします 特定のステータス コード付き。 または: HttpException を手動でスローします新しいミドルウェアphp職人が作る: middleware OldMiddleware # 新しいミドルウェアを作成します
ミドルウェアの主な機能はhandle()メソッドに実装されています: class OldMiddleware { 公共関数handle($request, Closure $next){ if (xxx){ redirect('xx'); 戻る $next ($request); } その構造を分析すると、基本的には、判断を下し、リダイレクトまたは先に進むという実行であることがわかります。 グローバルミドルウェア HTTP リクエストによってミドルウェアを実行したい場合は、ミドルウェアクラスを app/Http/ に追加するだけです カーネル.php $middleware プロパティ リスト。 ミドルウェアをルーティングに割り当てます 新しいミドルウェアを作成したら、app/Http/Kernel.phpに移動します ファイルキー名とクラス名の間のマッピング関係。このキー名をルーティングで使用してルートを割り当てることができます: Route::get('admin/profile', ['middleware' = > 'auth', function(){ Terminableミドルウェア
TerminableミドルウェアはTerminableMiddlewareから継承する必要があります そして terminate()を実装しますメソッド。その目的は、 HTTP 応答がクライアントに送信された後に実行することです。Terminable ミドルウェアを app/Http/ Kernel.php のグローバル ミドルウェア リストに追加する必要があります。 コントローラー 基本コントローラー すべてのコントローラーは基本コントローラークラスを拡張する必要があります
AppHttpControllers コントローラーを使用します。 クラス UserController Controllerを拡張 { # 継承Controller public function showProfile($id ) # Action { は次のように定義されます:
namespace BorogadiHttpControllers; IlluminateFoundationBusDispatchesJobsを使用します; use IlluminateRoutingController IlluminateFoundationValidationValidatesRequests を使用する BaseController { 最終的にはIlluminateRoutingControllerクラスから継承されていることがわかります。 # 名前付きコントローラールート Route::get('foo', ['uses' => 'FooController@method', ]); # コントローラーを指すURL $url = アクション ( 'AppHttpControllersFooController@ メソッド') ;または: URL::setRootControllerNamespace('AppHttpControllers'); $url アクション ('FooController@ コントローラーミドルウェア 2つの方法があり、1つはコントローラールートで指定する方法です: :get('プロフィール', [ 'ミドルウェア' => 'auth', 'Uses' => 'UserController@showProfile' ]); class UserController extends Controller { public function __construct(){ $this->miドルウェア (' 認証'); $this->ミドルウェア('log', ['only' => ['fooAction', 'barAction']]); 暗黙的コントローラー 暗黙的コントローラーの実装は、コントローラー内の各動作を処理する単一のルートを定義します: ルートを定義します: ルート::コントローラー( 'users', 'UserController'); コントローラー クラスの実装を定義します: class UserController extends BaseController { パブリック関数 getIndex(){ # user public function postProfile(){ # post way への応答 user/profile パブリック関数 anyLogin( ){ user/login のすべてのメソッドへの応答 "-" を使用することで、マルチワード コントローラーの動作をサポートできます。 public function getAdminProfile() {} # users/admin-profile への応答user/adminprofileではありません。アクション名で使用されているキャメルケースの命名方法に注意してください
RESTfulリソースコントローラー は、実際には暗黙的コントローラーの特定のアプリケーションです。
ルートキャッシュ アプリケーションでコントローラールーティングのみが使用されている場合、ルートキャッシュを使用してパフォーマンスを向上させることができます。 php職人ルート:キャッシュ キャッシュルートファイルはapp/Http/routes.phpファイルの代わりに使用されます 2 つの方法でリクエストを取得します 1 つは Request ファサード を使用する方法です: $name = Request::input('name'); 、または依存関係注入経由: コンストラクターまたはコントローラーのメソッドのクラス で型ヒント を使用します。 。現在リクエストされているインスタンスは、サービス コンテナによって自動的に挿入されます : use IlluminateHttpRequest; IlluminateRoutingControllerを使用します; class UserController は、Controller { パブリック関数ストア( $request){ を拡張します$name $name $name リクエスト、 ; ){
入力データを取得$name = Request:: ('name') ; # 特定の入力を取得データ $name = Request::input('name', 'Sally'); 特定の入力データを取得し、そうでない場合はデフォルト値を取得します if (Request::) has('name')){ # 入力データがあるか確認 $input = Request::all(); # 入力データを全て取得 $input = Request::only('username', 'password'); # 入力データを取得します $input = Request:: Except('credit_card'); # 部分入力データ除外メソッドを取得 $input = Request::input('products.0.name'); # データを取得配列形式で 古い入力データRequest::flash (); # 現在の入力データを保存しますセッション中
Request::flashOnly('username', 'email') # セッションにデータを保存します リクエスト::flashExcept ('password'); # セッション、削除メソッドreturn redirect('form')-> withInput(); 現在の入力データを session にリダイレクトしてキャッシュします return redirect('form')->withInput(Request::Except('password')); # 現在の入力データの一部をsessionにリダイレクトしてキャッシュします。 old('username'); # 1回限りのセッションを取得します # bladetemplateに古い入力データを表示しています Cookies L cookie aravel 作成 暗号化して認証マークを追加します。 Request::cookie('name') # Cookievalueを取得します # Cookies$response = new IlluminateHttpResponse('Hello World'); $response-> withCookie(cookie('name', 「価値」 , $ minutes)); $response-> (cookie()->forever('name', 'value')); # 追加永続的なCookie # キューモードで Cookieを追加します。つまり、実際に応答を送信する前にCookieを設定します Cookie::キュー# アップロードされたファイルが有効かどうかを確認します Request::file('photo')->move($destinationPath); # アップロードされたファイルを移動 Request::file( 'photo')->move($destinationPath, $fileName); # アップロードしたファイルを移動し、名前を変更します その他のリクエスト情報 $uri = Request::path( ); # リクエストを取得する if (Request::ajax()) リクエストが AJAX を使用するかどうかを判断する if (Request:: isMethod(' post')) # リクエストパスが特定の形式を満たしているか確認します $url = Request::url(); リクエストの取得URL HTTPレスポンス ルート::get(' /', function(){ # return string return 'Hello World'; # Responses 例としては、 2 つのメソッド return オブジェクト: use IlluminateHttpResponse; return (new ) 応答($content, $status)) - -> header('Content-Type', $value); または 補助メソッドを使用します: return response($content, $status)->header('Content-Type', $value);
# ビューに戻る return response()->view('hello')-> header('Content-Type', $type); return response($content); (cookie('name', 'value')); リダイレクト ('ユーザー/ログイン'); redirectリダイレクトメソッドを使用します return redirect ('user/login')->with('message', 'Login Failed'); # 現在のデータを Session にリダイレクトして保存しますreturn redirect()-> back() ; # 前の場所にリダイレクトします リダイレクトを返す( )->route('login'); # 特定のルートにリダイレクト # パラメータを使用して特定のルートにリダイレクト return redirect()->route('profile', [1]); # routed URI は: profile/{id} return redirect()- >route('profile', ['user' => 1]); # ルーティングされた URI は: profile/{user} # コントローラーアクションに基づいてリダイレクトreturn redirect()-> ('AppHttpControllersHomeController@index'); return redirect()->action('App HttpControllerUserController @profile', ['user' => 1]); # パラメーター付き その他の回答 # return ジソン return response()-> ; (['name' => 'アビゲイル', 'state' => 'CA']); json([' name' => 'アビゲイル', '州' => 'CA']) - ->setCallback($request->input('callback')); ファイルダウンロードreturn response()->download($pathToFile, $name, $headers); レスポンスマクロ レスポンス マクロを定義します。通常は Provider メソッドで定義されます Response::macro ( , function($value) ($response){ # PHP デフォルトでは、匿名関数は、それが配置されているコード ブロックのコンテキスト変数を呼び出すことはできませんが、use キーワードを使用する必要があります。 useは変数のコピーをクロージャにコピーし、 use ( &$rmb ) return $response->make などの参照形式もサポートします。 (strtoupper( $value));}); # 応答マクロを呼び出すreturn response() &g t;キャップ(' foo'); View # ビュー定義 ファイルパスとファイル名: resources/views/greeting.php
# 呼び出しを見る Route::get('/', function() { return view( 'greeting', [ 'name' => 'James']); # }); # resources/views/admin/profile。 php return view(' admin.profile ', $data); # データをビューに渡すその他の方法 $view =ビュー( 'greeting')->with ( 'name', 'Victoria'); # 伝統的な方法 $view = view('greeting')->withName ('Victoria'); # メソッド $view = view('greetings', $data); # は配列ですキーと値のペア # すべてのビューにデータを共有 プロバイダをカスタマイズするか、 のブート メソッドAppServiceProvider: view( )->share('data', [1, 2, 3]); または: 表示: :share
# ビューが存在するか確認 if (view()-> exists # ファイルパスからビューを生成 return view()-> ファイル
View コンポーネント View コンポーネントは、ビューがレンダリングされる前に呼び出されるクロージャまたはクラス メソッドです。 # ビューコンポーネントを定義する
Viewを使用します。 IlluminateSupportServiceProviderを使用します; view :: ( 'profile'、 'apphttpviewcomposersprofilecomposer'); ... という名前のメソッドビューがレンダリングされる前に、指定されたクラスの compose が呼び出されます。上の例のように、 クラスは次のように定義されます:
IlluminateContractsViewViewを使用します; UserRepositoryとしてIlluminateUsersRepositoryを使用します; class ProfileComposer { protected $users; public function __construct(UserRepository $users){ # サービス コンテナ は必要なパラメータを自動的に解析します パブリック関数 compose(View $view){ # compose メソッドには View のインスタンスが渡され、パラメータは View $ view->with('count', $this->users->count に渡すことができます) ()); } } # View::composer('* ', function($view){ # は、すべてのビューに対して定義することと同等です #
View::composer(['profile', 'dashboard'], 'AppHttpViewComposersMyViewComposer'); #
View: :作曲家([ 'AppHttpViewComposersUserComposer' => 'AppHttpViewComposersProductComposer' => 'product' ]); 各カスタム プロバイダ IlluminateSupportServiceProviderから継承 config/app.php の Providers 配列 に登録されます。カスタム Provider は、登録時の動作を定義するために使用される register() メソッド を定義する必要があります。さらに、2 つのオプションのメソッドとオプションの属性があります。 boot() メソッド は、すべての Provider がロードされるまで呼び出されず、 provides() メソッド $defer オプション属性 と組み合わせて使用され、 バッファリング 機能を提供します。 サービスプロバイダーを通じてサービスを提供するというアイデア: 実際の作業を完了するクラスを実装し、Providerを定義し、のregister()メソッドで使用します。 Provider 実際のワーククラスをシステムコンテナに登録し、実際のワーククラスインスタンスを取得するメソッド。次に、このプロバイダーをアプリケーション構成に登録します。このようにして、アプリケーションの初期化時にすべての Provider の register() メソッドが呼び出され、実際のワーキング クラス インスタンスを取得する方法を間接的に登録します。 # 基本的なプロバイダーを定義する
RiakConnectionを使用する; IlluminateSupportServiceProviderを使用する) #
,,,,,,,,,,,,,,,,,, , 新しい接続を返す($app ['config' ]['riak']); サービスコンテナ で 内では、$this->app
依存関係を登録するには、コールバック インターフェイス メソッドとバインディング インスタンス インターフェイスの 2 つの主な方法があります。 # クロージャーコールバックの方法 $this->app->bind('FooBar', function($app){ Return new FooBar($app['SomethingElse']); });
# シングルトンとして登録され、後続の呼び出しは同じインスタンスを返します $this->app->singleton('FooBar', function($app){ return new FooBar($app['SomethingElse']); });
# 既存のインスタンスにバインド $fooBar = new FooBar(new SomethingElse); $this ->アプリ- >instance('FooBar', $fooBar);
コンテナからインスタンスを解決するには 2 つの方法があります: $fooBar = $this-> ;app- >make('FooBar'); # メソッドを使用して $fooBar = $this->app['FooBar']; # コンテナは インターフェースを実装しているため、配列アクセスフォームを使用できます 登録情報と解析情報を定義した後、それをコンストラクターで直接使用できますクラス type-hint を介して必要な依存関係を指定すると、 コンテナは必要な依存関係をすべて自動的に挿入します 。 UserRepositoryとしてAppUsersRepositoryを使用します; クラス UserController は、Controller {を拡張します protected $users; public function __construct( UserRepository $users){ # type-hint $users; } public function show($id){ } } バインディングインターフェース インターフェース EventPusher { パブリック関数push($event, array $data); }
クラス PusherEventPusher 実装 EventPusher {... } PusherEventPusher EventPusherを実装しているため $this->app->bind('AppContractsEventPusher', 'AppServicesPusherEventPusher '); Whenクラスには EventPusher が必要です PusherEventPusher を注入する必要があることを伝えます。 コンテキストバインディング $this->app->when('AppHandlersCommandsCreateOrderHandler') tPusher'); tag
}); }); それらを適切に解析します: $this->app->bind('ReportAggregator', function($app){ ) return new ReportAggregator($app->タグ付き (' reports')); });コンテナイベント
コンテナは各オブジェクトを解析するときにイベントをトリガーします。 resolve メソッドを使用して、このイベントをリッスンできます (解析されたオブジェクトはクロージャ メソッドに渡されます): $this->app->resolve(function($object, $ app){#コンテナがあらゆる種類の依存関係を解決したときにコレートします... }); ;resolve(function(FooBar $fooBar, $app){ # コンテナがタイプ FooBar'
... タイプの依存関係を解決するときに呼び出されます。 }); ContractsContractsは、すべての Laravelメインコンポーネントの実装で使用されるインターフェースです。 契約 ディレクトリ ディレクトリ構造はIlluminateと同じです。 Contractsはインターフェース定義であり、Illuminateは特定の実装です。 /laravel /framework
/src /イルミネーション /認証/放送 /バス ... /契約 /認証 /放送 /バス ... ファサード基本的な使用法ファサード サービスコンテナでアクセスできるクラスに静的インターフェースを提供します。 (デザインパターンにおける「装飾モード」のアプリケーションは、主に class_alias を使用してカテゴリー名を作成し、また を使用して静的プロキシを提供し、最終的にはモックオブジェクト PHP を使用してシミュレートされます。 オブジェクトを呼び出し、オブジェクトのメソッドを呼び出します) Laravelのファサードとあなたが作成するカスタムファサードは基本クラスFacadeを継承し、実装する必要があるメソッドは1つだけです: getFacadeAccessor ()。 Cache など、この facade は次のように呼ばれます: Cache:: get( 'キー'); class Cache extends Facade { getFacadeAccessor () { 'キャッシュ' を返す } ; # This このメソッドの機能は、ユーザーが Cache の ファサード で静的メソッドを実行したとき、サービス コンテナ バインディングの名前を返すことです } 、Laravel はサービスコンテナからバインドされたキャッシュを解決し、リクエストされたメソッド(この例ではget)を実行します そのオブジェクトでは、すべての ファサード facade キャッシュを使用します; Importキャッシュファサード class PhotosController はコントローラー { public関数インデックス(){ $ photos = Cache::get('photos'); } }

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

HTTPキャッシュヘッダーの主要なプレーヤーには、キャッシュコントロール、ETAG、およびラスト修飾が含まれます。 1.Cache-Controlは、キャッシュポリシーを制御するために使用されます。例:キャッシュコントロール:Max-Age = 3600、public。 2。ETAGは、一意の識別子を介してリソースの変更を検証します。例:ETAG: "686897696A7C876B7E"。 3. Last-Modifiedは、リソースの最後の変更時間を示しています。

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

WebStorm Mac版
便利なJavaScript開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
