Slide 1

Slide 1 text

実はLaravelで使われている!? Symfonyコンポーネントを紹介! PHPカンファレンス沖縄2023 株式会社カルテットコミュニケーションズ 北村 邦彦

Slide 2

Slide 2 text

自己紹介 北 村 邦 彦 ・株式会社カルテットコミュニケーションズ ・前職: 営業職 → 現職: バックエンドエンジニア (PHP+Symfony) Twitter:@kuni__94 GitHub:@kitamurakunihiko キタムラ クニヒコ

Slide 3

Slide 3 text

Symfonyに興味を持っていただいて 日本語の記事を一緒に増やしていきたい!! 目的

Slide 4

Slide 4 text

1. Symfony コンポーネント?

Slide 5

Slide 5 text

Symfonyコンポーネント HttpClient HttpFoundation VarDumper Mailer ErrorHandler Console Cache Routing EventDispatcher EventDispatcher Mailer

Slide 6

Slide 6 text

Symfonyコンポーネント HttpClient HttpFoundation VarDumper Mailer ErrorHandler Console Cache Routing EventDispatcher EventDispatcher Mailer

Slide 7

Slide 7 text

Laravelプロジェクトを作成した際に 何個のSymfonyコンポーネントが そのプロジェクトに依存しているでしょうか? 問題

Slide 8

Slide 8 text

Laravelプロジェクトを作成した際に何個の Symfonyコンポーネントがそのプロジェクトに 依存しているでしょうか? 問題 $ composer create-project laravel/laravel phpcon-okinawa2023 ①26個 ②34個 ③59個

Slide 9

Slide 9 text

①26個 ②34個 ③59個 Laravelプロジェクトを作成した際に何個の Symfonyコンポーネントがそのプロジェクトに 依存しているでしょうか? 問題 $ composer create-project laravel/laravel phpcon-okinawa2023 ※自分調べ

Slide 10

Slide 10 text

2. Routing ・ルートの定義と登録 ・URL生成 ・リクエストの処理

Slide 11

Slide 11 text

class Router implements BindingRegistrar, RegistrarContract { … public function dispatchToRoute(Request $request) { return $this->runRoute($request, $this->findRoute($request)); } … } Illuminate∖Routing∖Router.php

Slide 12

Slide 12 text

class Router implements BindingRegistrar, RegistrarContract { … public function dispatchToRoute(Request $request) { return $this->runRoute($request, $this->findRoute($request)); } … } Illuminate∖Routing∖Router.php

Slide 13

Slide 13 text

class Router implements BindingRegistrar, RegistrarContract { … public function dispatchToRoute(Request $request) { return $this->runRoute($request, $this->findRoute($request)); } … } Illuminate∖Routing∖Router.php

Slide 14

Slide 14 text

複数ファイル内検索 // ⌘ + ⇧(shift) + F 'Symfony∖Component∖Routing'

Slide 15

Slide 15 text

3. HttpFoundation ・HTTPリクエスト処理 ・HTTPレスポンス処理 ・セッションとクッキー 管理 ・ファイルアップロード

Slide 16

Slide 16 text

use Symfony∖Component∖HttpFoundation∖Request as SymfonyRequest; class Request extends SymfonyRequest implements Arrayable, ArrayAccess { use Concerns∖CanBePrecognitive, Concerns∖InteractsWithContentTypes, … ; protected $json; … } Illuminate∖Http∖Request

Slide 17

Slide 17 text

Symfony∖Component∖HttpFoundation∖Request class_exists(AcceptHeader::class); class Request { public const HEADER_FORWARDED = 0b000001; // When using RFC 7239 public const HEADER_X_FORWARDED_FOR = 0b000010; ... protected static $trustedProxies = []; protected static $trustedHostPatterns = []; ... }

Slide 18

Slide 18 text

use Symfony∖Component∖HttpFoundation∖Request as SymfonyRequest; class Request extends SymfonyRequest implements Arrayable, ArrayAccess { use Concerns∖CanBePrecognitive, Concerns∖InteractsWithContentTypes, … ; protected $json; … } Illuminate∖Http∖Request

Slide 19

Slide 19 text

4. VarDumper ・デバッグ ・トラブルシューティング

Slide 20

Slide 20 text

use Symfony∖Component∖VarDumper∖VarDumper; function dump(mixed ...$vars): mixed { ... if (array_key_exists(0, $vars) && 1 === count($vars)) { VarDumper::dump($vars[0]); $k = 0; } else { foreach ($vars as $k => $v) { VarDumper::dump($v, is_int($k) ? 1 + $k : $k); } } ... return $vars[$k]; } symfony∖var-dumper∖Resources∖functions

Slide 21

Slide 21 text

class VarDumper { private static $handler; public static function dump(mixed $var/* , string $label = null */) { $label = 2 <= ¥func_num_args() ? func_get_arg(1) : null; if (null === self::$handler) { self::register(); } return (self::$handler)($var, $label); } } symfony∖var-dumper∖Resources∖functions

Slide 22

Slide 22 text

HttpClient Console Mime HttpKernel EventDispatcher Process Uid Finder

Slide 23

Slide 23 text

Laravelの幻のLTS v9

Slide 24

Slide 24 text

エンジニア・デザイナー大募集しています! フルリモート勤務可能🏠 https://quartetcom.co.jp/recruit/engineer/