Laravelフレームワークにおけるアプリケーションのアーキテクチャの分析

不言
リリース: 2018-07-31 16:36:47
オリジナル
2680 人が閲覧しました
laravel フレームワーク は、ネットワーク サービスからデータベース管理、HTML 生成まですべてを処理するため、「フルスタック」フレームワークと呼ばれます。垂直統合された Web 開発環境は、開発者に優れたエクスペリエンスを提供します。

典型的なプログラマーは、コマンドラインツールを通じて Laravel と対話し、Laravel プロジェクト環境を生成および管理します。 Laravel には、フレームワーク コードとデータベース スキーマの生成に使用できる Artisan と呼ばれる優れたコマンド ライン ツールが付属しており、データベース スキーマの移行からリソースと構成の管理まですべてを処理できます。

設定よりも規約

Laravel の興味深い機能の 1 つは、Web アプリケーションの構築方法にかなり深刻な制限を課していることです。驚くべきことに、これらの制限により、アプリケーションの作成がはるかに簡単になります。その理由を見てみましょう。

Laravel が他の垂直統合開発環境と違うのは、構成よりも規約を強く好むことです。一部の Java、Python、または PHP フレームワークでは多くの XML 構成が必要になることがよくありますが、Laravel では最初からほとんど構成が必要ありません (おそらく PHP では数行だけで済みます)。この構成ファイルの回避により、非常にユニークなものとなり、認識可能なコード構造はすべての Laravel アプリケーションで同じになります。

すべてを支配する 1 つのプロジェクト構造!

当然のことですが、すべての Laravel プロジェクトは基本的に同じディレクトリ構造を持ち、その中のすべてのファイルには指定された場所があります。この合意されたディレクトリ結果を通じて、開発者は「Laravel 方式」に従って作業することが保証されます。

図 1.1 は、Laravel プロジェクトのディレクトリ構造がどのようなものかを示しています:

図 1.1 Laravel プロジェクトのディレクトリ構造

ご覧のとおり、laravel には 4 つのフォルダーしか含まれておらず、これらの 4 つのフォルダーの下にはいくつかのサブフォルダーがあります。このような豊富なサブフォルダーを初めて見るのでしょうか?一つずつ紹介していきます。開発作業のほとんどは app/ フォルダーの下で実行されます。

各フォルダーとファイルの基本的な説明は次のとおりです:

上で述べたように、/app はすべての楽しいことが起こる場所です。このディレクトリの構造を詳しく見てみましょう。

図 1.2 は /app フォルダーの詳細を示しています:

図 1.2 アプリフォルダーの詳細

以下は詳細な紹介です:

最上位フォルダー

Function

app

サイトのコントローラーが含まれます(コントローラー)、モデル (モデル)、ビュー (ビュー)、およびアセット (リソース)。これらは Web サイトを実行する主要なコード部分であり、ほとんどの時間をこれらのコードに費やすことになります。

bootstrap

は、システムの起動時に必要なファイルを保存するために使用されます。これらのファイルは、index.phpなどのファイルによって呼び出されます。

public

このフォルダーは外部から見える唯一のフォルダーであり、Web サーバーのディレクトリを指す必要があります。このディレクトリには、laravelフレームワークのコアブートファイルindex.phpが含まれており、css、JavaScript、画像などのパブリック静的リソースを保存するために使用することもできます。

vendor

は、典型的な Laravel アプリケーションにすべてのサードパーティ コードを保存するために使用されます。これには、Laravel ソース コードとその関連、および事前にパッケージ化された追加機能を含むプラグインが含まれます。

ファイルのフォルダー

関数

/app/config/

アプリケーションのランタイムルール、データベース、セッションなどを設定します。フレームワークのさまざまな側面を変更するための多数の構成ファイルが含まれています。構成ファイルで返されるほとんどのオプションは、PHP 配列に関連付けられています。

/app/config/app.php

ゾーン、ロケール(ロケール)、デバッグモード、固有の暗号化キーなどのさまざまなアプリケーションレベルの設定。

/app/config/auth.php

は、アプリケーション、つまり認証ドライバーでの認証の実行方法を制御します。

/app/config/cache.php

アプリケーションが応答時間を短縮するためにキャッシュを利用する場合は、ここでその機能を設定します。

/app/config/compile.php

ここで、「artisan optimize」コマンドによって要求されたコンパイル済みファイルを含めるために、いくつかの追加クラスを指定できます。これらは、基本的にアプリケーションへのすべてのリクエストに含まれるクラスである必要があります。

/app/config/database.php

には、データベースの関連構成情報、つまりデフォルトのデータベースエンジンと接続情報が含まれています。

/app/config/mail.php

はメール送信エンジン、つまりSMTPサーバーの設定ファイルです。 From: header

/app/ config/ session.php

は、Laravelがユーザーセッション、つまりセッションドライバー、セッションの有効期間を管理する方法を制御します。

/app/config/view.php

テンプレートシステムのその他の設定。

/app/controllers

には、基本的なロジック、データモデルの対話、アプリケーションのビューファイルの読み込みを提供するコントローラークラスが含まれています。

/app/database/migrations/

には、Laravelが現在のデータベースのスキーマを更新し、データベースのすべてのバージョンを同時に同期できるようにするいくつかのPHPクラスが含まれています。移行ファイルは Artisan ツールを使用して生成されます。

/app/database/seeds/

には、Artisanツールがデータベーステーブルにリレーショナルデータを設定できるようにするPHPファイルが含まれています。

/app/lang/

PHP ファイルには、アプリケーションを簡単にローカライズできるようにする文字列の配列が含まれています。デフォルトでは、ディレクトリには英語のページングおよびフォーム検証用の言語行が含まれています。

/app/models/

モデルとは、アプリケーションの情報(データ)とそのデータを操作するためのルールを表すクラスです。ほとんどの場合、データベース内の各テーブルはアプリケーション内のモデルに対応します。アプリケーション ビジネス ロジックの大部分はモデルに集中します。

/app/start/

アーティザン ツールとグローバルおよびローカル コンテキストに関連するカスタム設定が含まれます。

/app/storage/

このディレクトリには、セッション、キャッシュ、コンパイルされたビューテンプレートなどのさまざまなLaravelサービスの一時ファイルが保存されます。このディレクトリは Web サーバー上で書き込み可能である必要があります。このディレクトリは Laravel によって管理されており、私たちは気にしません。

/app/tests/

このフォルダーは、単体テストを実行するのに便利な場所を提供します。 PHPUnit を使用する場合は、Artisan ツールを使用してすべてのテストを一度に実行できます。

/app/views/

このフォルダーには、コントローラーまたはルートで使用される HTML テンプレートが含まれています。このフォルダーにはテンプレート ファイルのみを配置できることに注意してください。 CSS、JavaScript、画像ファイルなどの他の静的リソース ファイルは、/public フォルダーに配置する必要があります。

/app/routes.php

これはアプリケーションのルーティングファイルで、受信リクエストをルートによって処理されるクロージャ、コントローラ、アクションに接続する方法をLaravelに指示するルーティングルールが含まれています。このファイルには、エラー ページのイベント宣言など、ビュー コンポーザーの定義に使用できるいくつかのイベント宣言も含まれています。

/app/filters.php

このファイルには、アプリケーションの結果を変更するために使用できるさまざまなアプリケーションとルートのフィルタリング メソッドが含まれています。 Laravel には、アクセス制御と XSS 保護のための事前定義されたフィルターがいくつかあります。

フォルダーの作成と名前付けについてよく考えてください。そうすれば、優れたファイル システムを備えたアプリケーションが得られます。

ここで得られるもの: MVC

Model-View-Controller (MVC)

Laravel アプリケーションがどのように動作するかの高レベルの概要を見てみましょう。標準の Laravel アプリケーション構造は、アプリケーション ディレクトリ app/ で構成されており、このディレクトリには、models/、views/、およびcontrollers/の 3 つのサブディレクトリが含まれていることに気づいたかもしれません。これは、Laravel がモデル ビュー コントローラー (MVC) アーキテクチャ パターンに従っていることを示しています。これにより、グラフィカル ユーザー インターフェイス (GUI) からの論理関係を表示するための「ビジネス ロジック」入力が強制的に分離されます。 Laravel Web アプリケーションの場合、ビジネス ロジックは通常、ユーザー、ブログ投稿などのデータ モデルで構成されます。 GUI はブラウザ上の単なる Web ページです。 MVC デザイン パターンは、Web 開発の分野で非常に人気があります。

MVCパターンの3つのコンポーネント:

  • Model

  • View

  • Controller

[注] MVCの3つについては原著者がここで詳しく紹介しています これらのコンポーネントはスペースの関係でここでは紹介しておりません。

Laravel コンポーネント

一般的な Laravel アプリケーションには、以下に示すように、上記の MVC コンポーネントが含まれています:

Laravelフレームワークにおけるアプリケーションのアーキテクチャの分析

Laravel と対話するとき、ブラウザはリクエストを送信し、Web サーバーはリクエストを受信します。 Laravelルーティングエンジンに渡されます。 Laravel ルーティングはリクエストを受信し、ルートの URL パターンに基づいて適切なコントローラー クラス メソッドにリダイレクトします。

その後、コントローラークラスが引き継ぎます。場合によっては、コントローラーは、HTML に変換されてブラウザーに送り返されるテンプレートであるビューをすぐにレンダリングします。動的 Web サイトではより一般的に、コントローラーはモデルと対話します。モデルは、アプリケーション内の要素 (ユーザー、ブログ投稿など) を表す PHP オブジェクトであり、データベースとの通信を担当します。モデルを呼び出した後、コントローラーは最終ビュー (HTML、CSS、および画像) をレンダリングし、完全な Web ページをユーザーのブラウザーに返します。

Laravel は、モデル、ビュー、コントローラーを異なるディレクトリの個別のコード ファイルに保存することで、これらの要素をかなり独立した状態に保つ必要があるという概念を推進しています。ここでLaravelのディレクトリ構造が登場します。

MVC のようなデザイン パターンは、開発者の作業を楽にするために作成されました。この点は、パターンを使用しない PHP よりも Laravel の方が優れている点です。この議論が抽象的であっても、心配しないでください。 Laravel を使い始めると、自分がデザインパターンで作業していることにさえ気づかないでしょう。しばらくすると自然になります。

データモデル

データモデルはあらゆるアプリケーションの基盤であり、アプリケーションのビジネスロジックを記述します。データはすべてデータベース テーブルで表されます。 Laravel は、データベースへのアクセスを簡素化するためのいくつかのテクニックを提供します。

Laravelは、データベース内のテーブル行を簡単に操作できるPHPオブジェクトに変換することで、アプリケーションのデータモデルとデータベーステーブルを接続します。また、ビジネス ルールを適用したり、アプリケーション内のさまざまなデータ モデル間の関係を記述したりすることもできます。たとえば、ある人の家族関係は、Laravel Eloquent OR/M を使用して次のように説明できます。

class Person extends Eloquent
{
    public function mother()
    {
        return $this->belongsTo('Mother');
    }

    public function father()
    {
        return $this->belongsTo('Father');
    }

    public function spouse()
    {
        return $this->hasOne('Spouse');
    }

    public function sisters()
    {
        return $this->hasMany('Sister');
    }

    public function brothers()
    {
        return $this->hasMany('Brother');
    }
}
ログイン後にコピー

上記がこの記事の全内容です。laravel の内容については、laravel フレームワークの紹介を参照してください。チュートリアル。

おすすめ関連記事:

LaravelフレームワークのAutoloaderモジュールのコード分析

おすすめコース:

2017年最新のLaravelビデオチュートリアルおすすめ5本

以上がLaravelフレームワークにおけるアプリケーションのアーキテクチャの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート