ホームページ  >  記事  >  バックエンド開発  >  Laravel 5 ドキュメントの読み方の概要

Laravel 5 ドキュメントの読み方の概要

WBOY
WBOYオリジナル
2016-08-10 08:48:38857ブラウズ

Laravel 5プロジェクト構造分析と中国語ドキュメントの読み方まとめ

HTTPルーティング1

ミドルウェア 5

コントローラー5

HTTPリクエスト 7

http サービスプロバイダー11

サービスコンテナ

12

契約

13

ファサード

14

リクエストライフサイクル

15

アプリケーションの構造

16

認証

20

キャッシュ

24

コレクション

26

職人コンソール

26

拡張フレームワーク

*27

Laravel Elixir*27

暗号化27

エラーとログ

28

イベント

28

ファイルシステム/クラウドストレージ30

ハッシュ31

補助メソッド 31

ローカリゼーション*31

メール* 31

拡張パック開発*31

ページネーション*31

キュー*31

セッション32

ブレードテンプレート 33

単体テスト* 35

データ検証35

データベースの使い方の基本 36

クエリコンストラクター38

構造ジェネレーター41

移行とデータ入力41

雄弁なORM41

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トークンをフォームに挿入します:

を使用したBladeテンプレートエンジン:

< input type="hidden" name=" _token" value="{{ csrf_token()}}">

X-XSRF-TOKEN リクエスト ヘッダー に追加されました:

csrf_token()}}" />

$.ajaxSetup ({

ヘッダー: {

}

});

...

#

こうして、すべてのajax リクエストには次のヘッダー情報が含まれます:

$.ajax({

url: "/foo/bar",

})

メソッドチート

} ) ;});

サブドメインルーティング

Route::group(['domain' => ' {アカウント}。 myapp.com'], function()

{

{

Route::get('user/{id}', function($account 、$id)

{

//

);

});

Route::group([

'prefix' => 'admin'], function()

{

Route::get('users', function()

{

// "/admin/users" URL

});

});

#

はルーティング プレフィックス Parameters で定義されていますRoute::group(['prefix' => 'accounts/

{account_id}

'], function()

{

ルート::get('詳細', function(

$account_id

)

ルートモデルバインディング

モデル バインディングは、モデル エンティティをルートに注入する便利な方法 を提供します

:

ユーザー ID を注入する代わりに、 を注入することを選択できます指定された

ID に一致する User

クラスのエンティティ。 RouteServiceProvider::bootメソッドでモデルバインディングを定義します:

public function boot(Router $router){ 親::ブート($router ; {user} パラメータルート:

Route::get('profile/{user}

', function(

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){

return

redirect('xx');

戻る $next

($request); }

その構造を分析すると、基本的には、判断を下し、リダイレクトまたは先に進むという実行であることがわかります。

グローバルミドルウェア

すべての

HTTP リクエストによってミドルウェアを実行したい場合は、ミドルウェアクラスを app/Http/ に追加するだけです カーネル.php

$middleware プロパティ リスト。

ミドルウェアをルーティングに割り当てます

新しいミドルウェアを作成したら、app/Http/Kernel.phpに移動します

$routeMiddleware に中間を追加します

ファイルキー名とクラス名の間のマッピング関係。このキー名をルーティングで使用してルートを割り当てることができます:

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

{

AppHttpControllersController

は次のように定義されます:

namespace BorogadiHttpControllers;

IlluminateFoundationBusDispatchesJobsを使用します;

use IlluminateRoutingController

as BaseController;

IlluminateFoundationValidationValidatesRequests を使用する

抽象クラス コントローラーは

BaseController

{

DispatchesJobs、ValidatesRequests を使用します;

}

最終的にはIlluminateRoutingControllerクラスから継承されていることがわかります。

# 名前付きコントローラールート

Route::get('foo', ['uses' => 'FooController@method',

「として」 => '名前'

]);

# コントローラーを指すURL

$url = アクション

( 'AppHttpControllersFooController@ メソッド') ;または:

URL::setRootControllerNamespace('AppHttpControllers');

$url アクション

('FooController@

コントローラーミドルウェア 2つの方法があり、1つはコントローラールートで指定する方法です: :get('プロフィール', [

'ミドルウェア' => 'auth',

'Uses' => 'UserController@showProfile' ]);

もう 1 つは、コントローラー コンストラクターで直接指定する方法です:

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ファイルの代わりに使用されます

HTTP リクエスト

2 つの方法でリクエストを取得します

1 つは

Request ファサード を使用する方法です:

;

$name =

Request::input('name');

、または依存関係注入経由: コンストラクターまたはコントローラーのメソッドのクラス

で型ヒント を使用します。 。現在リクエストされているインスタンスは、サービス コンテナによって自動的に挿入されます :

use IlluminateHttpRequest;

IlluminateRoutingControllerを使用します;

class UserController は、Controller {

パブリック関数ストア(

Request

$request){ を拡張します$name $name $name リクエスト、

$id

; ){

入力データを取得$name = Request::

input

('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にリダイレクトしてキャッシュします。

$username = Request::

old('username'); # 1回限りのセッションを取得します

{{ old(' username') }}

# bladetemplateに古い入力データを表示しています

Cookies

L

cookie aravel 作成 暗号化して認証マークを追加します。

$value =

Request::cookie('name') # Cookievalueを取得します

#

で応答

Cookies$response = new IlluminateHttpResponse('Hello World');

$response->

withCookie(cookie('name', 「価値」 , $ minutes));

$response->

withCookie

(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'))

if (Request::is('admin/*'))

# リクエストパスが特定の形式を満たしているか確認します

$url = Request::url();

#

リクエストの取得URL

HTTPレスポンス

ルート::get(' /', function(){ # return string

return 'Hello World';

#

完了に戻る

Responses 例としては、 2 つのメソッド

return

Responses

オブジェクト:

use IlluminateHttpResponse;

return (new ) 応答($content, $status)) - ->

header('Content-Type', $value);

または

response

補助メソッドを使用します:

return response($content, $status)->header('Content-Type', $value);

# ビューに戻る

return response()->view('hello')-> header('Content-Type', $type);

return response($content);

withCookie

(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()->

action

('AppHttpControllersHomeController@index');

return redirect()->action('App HttpControllerUserController @profile', ['user' => 1]); # パラメーター付き

その他の回答

# return ジソン

return response()-> ;

json

(['name' => 'アビゲイル', 'state' => 'CA']); json([' name' => 'アビゲイル', '州' => 'CA'])

- ->setCallback($request->input('callback'));

#

ファイルダウンロードreturn response()->down​​load($pathToFile, $name, $headers);

レスポンスマクロ

#

レスポンス マクロを定義します。通常は Provider メソッドで定義されます

Response::macro (

'caps'

, 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

('data', [1, 2 , 3]);

# ビューが存在するか確認

if (view()-> exists

('emails .customer'))

# ファイルパスからビューを生成

return view()-> ファイル

($pathToFile, $data);

View コンポーネント

View コンポーネントは、ビューがレンダリングされる前に呼び出されるクロージャまたはクラス メソッドです。

#

ビューコンポーネントを定義する

Viewを使用します。

IlluminateSupportServiceProviderを使用します; view ::

composer

( 'profile'、 'apphttpviewcomposersprofilecomposer'); ...

という名前のメソッドビューがレンダリングされる前に、指定されたクラスの compose が呼び出されます。上の例のように、

ProfileComposer'

クラスは次のように定義されます:

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: :作曲家([

'AppHttpViewComposersAdminComposer' => ['admin.index', 'admin.profile'],

'AppHttpViewComposersUserComposer' =>

'AppHttpViewComposersProductComposer' => 'product'

]);

サービスプロバイダ

各カスタム

プロバイダ

IlluminateSupportServiceProviderから継承

そして

config/app.phpProviders 配列 に登録されます。カスタム Provider は、登録時の動作を定義するために使用される register() メソッド を定義する必要があります。さらに、2 つのオプションのメソッドとオプションの属性があります。 boot() メソッド は、すべての Provider がロードされるまで呼び出されず、 provides() メソッド $defer オプション属性 と組み合わせて使用​​され、 バッファリング 機能を提供します。 サービスプロバイダーを通じてサービスを提供するというアイデア: 実際の作業を完了するクラスを実装し、Providerを定義し、register()メソッドで使用します。 Provider

実際のワーククラスをシステムコンテナに登録し、実際のワーククラスインスタンスを取得するメソッド。次に、このプロバイダーをアプリケーション構成に登録します。このようにして、アプリケーションの初期化時にすべての Providerregister() メソッドが呼び出され、実際のワーキング クラス インスタンスを取得する方法を間接的に登録します。 # 基本的なプロバイダーを定義する

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'); #

make()

メソッドを使用して

$fooBar = $this->app['FooBar'];

# コンテナは

ArrayAccess

インターフェースを実装しているため、配列アクセスフォームを使用できます

登録情報と解析情報を定義した後、それをコンストラクターで直接使用できますクラス 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('SpeedReport', function(){

});

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

}); それらを適切に解析します:

$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は特定の実装です。

Illuminateの各具象実装クラスは、

Contractsの対応するインターフェースを拡張します。このインターフェイスと実装の分離により、依存関係の注入の結合度が低くなります。

/laravel

/framework

/src

/イルミネーション /認証/放送

/バス

...

/契約

/認証

/放送

/バス

...

ファサード基本的な使用法ファサード

は、アプリケーションの

サービスコンテナでアクセスできるクラス静的インターフェースを提供します。 (デザインパターンにおける「装飾モード」のアプリケーションは、主に class_alias を使用してカテゴリー名を作成し、また

__callStatic()

を使用して静的プロキシを提供し、最終的にはモックオブジェクト PHP を使用してシミュレートされます。 オブジェクトを呼び出し、オブジェクトのメソッドを呼び出します)

Laravelファサードとあなたが作成するカスタムファサードは基本クラスFacadeを継承し、実装する必要があるメソッドは1つだけです: getFacadeAccessor ()

Cache など、この facade は次のように呼ばれます: Cache:: get( 'キー');

クラスの実装を見てください:

class

Cache extends Facade {

protected static function

getFacadeAccessor () { 'キャッシュ' を返す } ; # This このメソッドの機能は、ユーザーが Cacheファサード で静的メソッドを実行したとき、サービス コンテナ バインディングの名前を返すことです

}

Laravel はサービスコンテナからバインドされたキャッシュを解決し、リクエストされたメソッド(この例ではget)を実行します そのオブジェクトでは、すべての ファサード

がグローバル名前空間に存在します。ネストされた名前空間で使用する場合は、

facade

クラスを名前空間にインポートする必要があります:

キャッシュを使用します;

#

Importキャッシュファサード

class PhotosController はコントローラー { public関数インデックス(){

$ photos = Cache::get('photos');

}

}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。