# ありがとうSymfony ## Symfony Meetup Kansai #1 by smdhogehoge ---- ## Who? - @smdhogehoge - カルテットコミュニケーションズ - バックエンドエンジニア - 和歌山在住リモートワーカー ---- ## インタビュー記事が出ました https://www.remotework-labo.jp/2019/05/quartet-communications-1/ ![](https://i.imgur.com/IqQLGE6.jpg) ---- ## 今日話したいこと - これまで手がけたサービス達を例に上げつつ - 婚活アプリ,ブログメディア - Symfonyの良いところを上げていきつつ - 僕にとってのSymfonyとは --- # 婚活アプリ ---- # :cold_sweat: ---- ## 会員の種別がめっちゃ多い :cold_sweat: - 男性/女性 :couple: - 有料/無料会員 :moneybag: - クーポンの有無 :ticket: - 〇〇サイト経由の登録会員 :office: - etc... ---- ## かつ、できることが違う :cold_sweat: | 種別 | 機能A | B| C | D|E|F| | --- | --- | --- | --- | --- | --- | --- | | 男性 | :o: | :x: | :x: | :x: | :x: | :x: | | 女性 | :o: | :o: | :o: | :o: | :x: | :x: | | 有料 | :o: | :o: | :o: | :x: | :o: | :x: | | クーポン有 | :o: | :o: | :x: | :x: | :o: | :x: | | 〇〇経由 | :o: | :o: | :o: | :x: | :x: | :o: | ---- # :innocent: ---- <!-- .slide: data-background="https://i.imgur.com/U9A2GNf.png"--> ---- ```php <?php class MessageController extends Controller { public function showAction(Request $request) { $user = $this->getUser(); if ($user->isMale()) { if ($user->getStatus() === 'premium') { if ($user->getCoupons()->getType === 'message') { // ... } else { // ... } } else { if ($user->getCoupons()->getType === 'message') { // ... } else { // ... } } } else { if ($user->getStatus() === 'premium') { if ($user->getCoupons()->getType === 'message') { // ... } else { // ... } } else { // ... } } } } ``` ---- # :skull:if分岐地獄:skull: ---- # :skull:Fat Controller:skull: --- # どうしたか ---- ## Authorization ---- | 種別 | 機能A | B| C | D|E|F| | --- | --- | --- | --- | --- | --- | --- | | 男性 | :o: | :x: | :x: | :x: | :x: | :x: | | 女性 | :o: | :o: | :o: | :o: | :x: | :x: | | 有料 | :o: | :o: | :o: | :x: | :o: | :x: | | クーポン有 | :o: | :o: | :x: | :x: | :o: | :x: | | 〇〇経由 | :o: | :o: | :o: | :x: | :x: | :o: | ---- 結局『〇〇ができるorできない』 ---- ```php <?php class MessageController extends Controller { /** * @Security("has_role('ROLE_SHOW_MESSAGE')") */ public function showAction(Request $request) { // } } ``` ※注:当時の書き方です ---- ``` php <?php class User extends BaseUser { public function getRoles() { $roles = []; if ($this->isFemale()) { $roles[] = 'ROLE_SHOW_MESSAGE'; } } } ``` ---- symfonyの良いところ① ## if分岐地獄だったコード ## →「権限」で管理する、という考え方 ---- symfonyの良いところ① # より良い考え方を授けてくれる --- # ブログメディア ---- # :cold_sweat: ---- ## :cold_sweat: 記事の種類が多い - 通常記事 - 連載記事 - 寄稿記事 - ユーザー記事 ---- ## :cold_sweat: 紐づくEntityが違う - 通常記事:記者が書く - 連載記事:「連載」毎にグルーピング - 寄稿記事:(記者とは違う)特別な執筆者が書く - ユーザー記事:ユーザーが書く ---- # :innocent: --- # どうしたか ---- # Table Inheritance ---- ![](https://i.imgur.com/xPMP0t0.png) ---- # Doctrine頼もしい :muscle: ---- 他にも - いろんな「いいね」機能をPolymorphicで - https://gitpitch.com/shimokei53/slide_symfony17#/ - Doctrine Criteria - https://tech.quartetcom.co.jp/2018/12/23/criteria-sample/ ---- symfonyの良いところ② # Doctrineが賢すぎる ---- symfonyの良いところ② # DBまで含めた設計が柔軟 --- # 僕にとってのSymfony ---- - より良い設計、考え方が身につく! - データ設計なども幅広くカバー! ---- たとえPHPを離れても 基礎となる考え方や、応用の効くコアな概念を 知るきっかけをくれる ---- ![](https://i.imgur.com/4GC66MZ.png) ---- ## しかも仕事にも出会える ![](https://i.imgur.com/ZkW0uO6.jpg) --- # ありがとうSymfony!
{"metaMigratedAt":"2023-06-14T21:43:07.223Z","metaMigratedFrom":"YAML","title":"ありがとうSymfony","breaks":true,"description":"View the slide with \"Slide Mode\".","contributors":"[{\"id\":\"2f761ee7-727c-4e76-82d1-8270f4040e75\",\"add\":7322,\"del\":3491}]"}
    1015 views