Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ
Search
namizatork
January 22, 2020
Programming
1
1.1k
Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ
2019.1.22 大阪Laravel勉強会主催
namizatork
January 22, 2020
Tweet
Share
More Decks by namizatork
See All by namizatork
PHPのエラーを理解して適切なエラーハンドリングを学ぼう
namizatork
2
3.7k
もう細かいレビューは したくない、されたくない
namizatork
1
1.4k
PHPの静的解析 ついでにLarastan
namizatork
1
570
Laravel8.xまでの大きな変更点を振り返る
namizatork
0
510
Livewireは魔法??コードリーディング してみた
namizatork
1
340
Laravelの「Hello World」を 表示するまでの処理を追ってみた
namizatork
0
1.4k
Laravel Hands-on
namizatork
0
360
SPA/PWA/AMPってなに?
namizatork
1
17k
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
310
AIコーディングAgentとの向き合い方
eycjur
0
260
Updates on MLS on Ruby (and maybe more)
sylph01
1
180
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
110
1から理解するWeb Push
dora1998
7
1.8k
Android 16 × Jetpack Composeで縦書きテキストエディタを作ろう / Vertical Text Editor with Compose on Android 16
cc4966
0
170
Improving my own Ruby thereafter
sisshiki1969
1
160
Oracle Database Technology Night 92 Database Connection control FAN-AC
oracle4engineer
PRO
1
440
Design Foundational Data Engineering Observability
sucitw
3
190
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
110
HTMLの品質ってなんだっけ? “HTMLクライテリア”の設計と実践
unachang113
4
2.7k
Ruby Parser progress report 2025
yui_knk
1
420
Featured
See All Featured
Being A Developer After 40
akosma
90
590k
We Have a Design System, Now What?
morganepeng
53
7.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.5k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
A Modern Web Designer's Workflow
chriscoyier
696
190k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Transcript
⼤阪Laravel勉強会 # ⼤阪Laravel勉強会 でツイート 登壇(15min) Laravelワカンネ(゚⊿゚)から「完全に理解した()」までス テップアップ LaravelとSymfony Laravel5 と
Laravel6 の違い -認証編- LT(5min) LaravelでSNSログインを実装 LaravelのコアコードからMiddlewareとControllerの実 ⾏⼿順を理解する MySQLと⽂字コードの話 故Laravel4でやっていく時のTips Amazon LightsailにLaravel環境作ってみた
Laravelワカンネ(゚⊿゚)から 「完全に理解した()」までステップアップ Namizato
エンジニアの「完全に理解した()」 ⾃信 理解度 完全に理解した なんも分からん チョットワカル
以上。 前ページ踏まえた上でご視聴ください。
⾃⼰紹介 Laravelのライフサイクル Laravelでよく⽬にするやつ
Namizato @namizatop Work : サーバーサイド Like : ⽝ バスケ Age
: 25 Laravelコミュニティ参加⾃由です
Laravelのライフサイクル
Laravelをwebに公開する時、 publicフォルダのみを公開 フォルダとします。 そこに存在するCSS・JS等 以外のファイルへのアクセ スは全てindex.phpを通して、 実⾏されます。 公開フォルダ
HTTPカーネル http://laravel 1 エントリポイント ルーティング ミドルウェア コントローラー 2 3 4
5 6 7 実⾏フロー
オートロードファイルの読み込み フレームワークの起動 アプリケーション実⾏ HTTPレスポンス送信 終了処理 エントリポイント
通常のPHPでは別のPHP ファイルを参照する際、 require⽂を読み込む必要が ありますが、Laravelでは ファイルの上部でuse宣⾔す ると⾃動でそれらのファイ ル郡を⾃動で読み込んで使 ⽤できます。 オートロード
Laravelの根幹とも⾔えるApplicationイ ンスタンスを⽣成します。 このApplicationインスタンスでは Laravelの様々な機能を提供する部品を 管理しており、Laravelではサービスコ ンテナと呼んでいます。 ここではHTTPカーネル/Consoleカー ネル/エラーハンドラーをsingletonでバ インドしてindex.php(エンドポイント) に返します。
※サービスコンテナは別ページで説明します。 アプリケーション実⾏
前ページでsingletonを利⽤してバイン ドしたHTTPカーネルの⼀例です。 HTTPカーネルではリクエストの実⾏前 に処理される機能(CSRFや認証など) を配列($middleware)で定義します。 ここで定義した処理はRequestインスタ ンスに対して必ず実⾏されます。 また、任意で処理を追加、削除が可能 です。 ※定義した処理はミドルウェアで実⾏されます。
HTTPカーネル
特定のURL (http://laravel/◦◦◦)に対して どの処理を呼び出して実⾏するのか を管理するのがルーティングです。 図①では/homeにアクセスされた時 に図②の`HomeController`クラスの `index`メソッドを呼び出しています。 ルーティング http://laravel/home 1
2
ミドルウェアとはRequestに対して(つまり Laravelアプリケーション全体)フィルタリン グをする機能の事です。 例えば右の図の様にログイン機能を追加しよう と思った時にそれぞれのコントローラーで認証 ロジックを書くのは⼤変です。 その処理をコントローラーとは別に実⾏する仕 組みを⽤意したものになります。 右の図の様にミドルウェア->コントローラー を通った後に再度ミドルウェアに戻っている様
にコントローラーの前後どちらでも設定が可能 です。 ※認証ロジックだけでなくCSRFトークンのチェックなど 様々な処理が初期設定で存在します。 ミドルウェア ミドルウェア コントローラー 5 6 ~~~~~~省略~~~~~~ ログイン ここで認証ロジック など ʻʻ実⾏フローから引⽤ʼʼ
LaravelはMVCフレームワークです。 ControllerはModelとViewの制御を ⾏う中⼼となる部分です。 右の図の様にLaravelのControllerは 通常、Controllerクラスを継承してい ます。 継承せずともControllerとして機能し ますが、前ページで説明した、ミド ルウェアへのアクセスが出来なくな ります。
コントローラー
Laravelでよく⽬にするやつ
DIとはオブジェクト同⼠の 依存をなくして疎結合にし ようという考え⽅です。 右の図では`User`クラスは `Phone`クラスに依存して います。 このままでは`User`クラス の単体テストができません。 DI(依存性の注⼊) Phoneクラスに依存している
右の図ではresolve()という関数にク ラス名を渡しています。 この記述をする事で、外部でインス タンス⽣成を⾏い、疎結合にしたと いう事になります。 これにより`Phone`クラスのモック を与えた`User`クラスの単体テスト が可能になりました。 では外部からインスタンスを⽣成す るとはどういう事か次ページで追っ
てみます。 DI(依存性の注⼊) Phoneクラスに依存していない
サービスコンテナとはアプリケーショ ン全体のインスタンスを管理する機能 の事です。 前ページで紹介したresolve()はグロー バル関数として使⽤でき、クラス名を 渡すと該当のクラスのインスタンスを リターンする事ができます。 resolve()は説明するためにあえて使い ましたが、メソッドに直接クラス名を 渡すと⾃動で同様にインスタンスを外
部から注⼊する事ができるメソッドイ ンジェクションがよく使われます。 サービスコンテナ サービスコンテナ インスタンス⽣成し てくだぱい あいよ (インスタンスを渡す)
ご静聴ありがとうございました。 Namizato