Slide 1

Slide 1 text

⼤阪Laravel勉強会 # ⼤阪Laravel勉強会 でツイート 登壇(15min) Laravelワカンネ(゚⊿゚)から「完全に理解した()」までス テップアップ LaravelとSymfony Laravel5 と Laravel6 の違い -認証編- LT(5min) LaravelでSNSログインを実装 LaravelのコアコードからMiddlewareとControllerの実 ⾏⼿順を理解する MySQLと⽂字コードの話 故Laravel4でやっていく時のTips Amazon LightsailにLaravel環境作ってみた

Slide 2

Slide 2 text

Laravelワカンネ(゚⊿゚)から 「完全に理解した()」までステップアップ Namizato

Slide 3

Slide 3 text

エンジニアの「完全に理解した()」 ⾃信 理解度 完全に理解した なんも分からん チョットワカル

Slide 4

Slide 4 text

以上。 前ページ踏まえた上でご視聴ください。

Slide 5

Slide 5 text

⾃⼰紹介 Laravelのライフサイクル Laravelでよく⽬にするやつ

Slide 6

Slide 6 text

Namizato @namizatop Work : サーバーサイド Like : ⽝ バスケ Age : 25 Laravelコミュニティ参加⾃由です

Slide 7

Slide 7 text

Laravelのライフサイクル

Slide 8

Slide 8 text

Laravelをwebに公開する時、 publicフォルダのみを公開 フォルダとします。 そこに存在するCSS・JS等 以外のファイルへのアクセ スは全てindex.phpを通して、 実⾏されます。 公開フォルダ

Slide 9

Slide 9 text

HTTPカーネル http://laravel 1 エントリポイント ルーティング ミドルウェア コントローラー 2 3 4 5 6 7 実⾏フロー

Slide 10

Slide 10 text

オートロードファイルの読み込み フレームワークの起動 アプリケーション実⾏ HTTPレスポンス送信 終了処理 エントリポイント

Slide 11

Slide 11 text

通常のPHPでは別のPHP ファイルを参照する際、 require⽂を読み込む必要が ありますが、Laravelでは ファイルの上部でuse宣⾔す ると⾃動でそれらのファイ ル郡を⾃動で読み込んで使 ⽤できます。 オートロード

Slide 12

Slide 12 text

Laravelの根幹とも⾔えるApplicationイ ンスタンスを⽣成します。 このApplicationインスタンスでは Laravelの様々な機能を提供する部品を 管理しており、Laravelではサービスコ ンテナと呼んでいます。 ここではHTTPカーネル/Consoleカー ネル/エラーハンドラーをsingletonでバ インドしてindex.php(エンドポイント) に返します。 ※サービスコンテナは別ページで説明します。 アプリケーション実⾏

Slide 13

Slide 13 text

前ページでsingletonを利⽤してバイン ドしたHTTPカーネルの⼀例です。 HTTPカーネルではリクエストの実⾏前 に処理される機能(CSRFや認証など) を配列($middleware)で定義します。 ここで定義した処理はRequestインスタ ンスに対して必ず実⾏されます。 また、任意で処理を追加、削除が可能 です。 ※定義した処理はミドルウェアで実⾏されます。 HTTPカーネル

Slide 14

Slide 14 text

特定のURL (http://laravel/○○○)に対して どの処理を呼び出して実⾏するのか を管理するのがルーティングです。 図①では/homeにアクセスされた時 に図②の`HomeController`クラスの `index`メソッドを呼び出しています。 ルーティング http://laravel/home 1 2

Slide 15

Slide 15 text

ミドルウェアとはRequestに対して(つまり Laravelアプリケーション全体)フィルタリン グをする機能の事です。 例えば右の図の様にログイン機能を追加しよう と思った時にそれぞれのコントローラーで認証 ロジックを書くのは⼤変です。 その処理をコントローラーとは別に実⾏する仕 組みを⽤意したものになります。 右の図の様にミドルウェア->コントローラー を通った後に再度ミドルウェアに戻っている様 にコントローラーの前後どちらでも設定が可能 です。 ※認証ロジックだけでなくCSRFトークンのチェックなど 様々な処理が初期設定で存在します。 ミドルウェア ミドルウェア コントローラー 5 6 ~~~~~~省略~~~~~~ ログイン ここで認証ロジック など ʻʻ実⾏フローから引⽤ʼʼ

Slide 16

Slide 16 text

LaravelはMVCフレームワークです。 ControllerはModelとViewの制御を ⾏う中⼼となる部分です。 右の図の様にLaravelのControllerは 通常、Controllerクラスを継承してい ます。 継承せずともControllerとして機能し ますが、前ページで説明した、ミド ルウェアへのアクセスが出来なくな ります。 コントローラー

Slide 17

Slide 17 text

Laravelでよく⽬にするやつ

Slide 18

Slide 18 text

DIとはオブジェクト同⼠の 依存をなくして疎結合にし ようという考え⽅です。 右の図では`User`クラスは `Phone`クラスに依存して います。 このままでは`User`クラス の単体テストができません。 DI(依存性の注⼊) Phoneクラスに依存している

Slide 19

Slide 19 text

右の図ではresolve()という関数にク ラス名を渡しています。 この記述をする事で、外部でインス タンス⽣成を⾏い、疎結合にしたと いう事になります。 これにより`Phone`クラスのモック を与えた`User`クラスの単体テスト が可能になりました。 では外部からインスタンスを⽣成す るとはどういう事か次ページで追っ てみます。 DI(依存性の注⼊) Phoneクラスに依存していない

Slide 20

Slide 20 text

サービスコンテナとはアプリケーショ ン全体のインスタンスを管理する機能 の事です。 前ページで紹介したresolve()はグロー バル関数として使⽤でき、クラス名を 渡すと該当のクラスのインスタンスを リターンする事ができます。 resolve()は説明するためにあえて使い ましたが、メソッドに直接クラス名を 渡すと⾃動で同様にインスタンスを外 部から注⼊する事ができるメソッドイ ンジェクションがよく使われます。 サービスコンテナ サービスコンテナ インスタンス⽣成し てくだぱい あいよ (インスタンスを渡す)

Slide 21

Slide 21 text

ご静聴ありがとうございました。 Namizato