Skip to main content
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
EN
Upload
Download free for 30 days
Sign in
Uploaded by
Yuichi Okada
6,332 views
EventListener使いこなし術 - Symfony勉強会#10
Symfony勉強会#10 の LT枠で発表してきた内容です。 ブログ http://okapon-pon.hatenablog.com/entry/2014/07/29/015745
Technology
◦
Read more
5
Save
Share
Embed
Save to Drive
Download now
Download to read offline
1
/ 35
2
/ 35
3
/ 35
4
/ 35
5
/ 35
6
/ 35
7
/ 35
8
/ 35
9
/ 35
10
/ 35
11
/ 35
12
/ 35
13
/ 35
14
/ 35
15
/ 35
16
/ 35
17
/ 35
18
/ 35
19
/ 35
20
/ 35
More Related Content
PDF
GoによるWebアプリ開発のキホン
by
Akihiko Horiuchi
33 slides
61.9K views
PPTX
BuildKitによる高速でセキュアなイメージビルド
by
Akihiro Suda
27 slides
45.8K views
PDF
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
by
日本マイクロソフト株式会社
26 slides
1.5K views
PDF
20200526 AWS Black Belt Online Seminar AWS X-Ray
by
Amazon Web Services Japan
99 slides
34.6K views
PDF
20190514 AWS Black Belt Online Seminar Amazon API Gateway
by
Amazon Web Services Japan
74 slides
25.1K views
PDF
社内Java8勉強会 ラムダ式とストリームAPI
by
Akihiro Ikezoe
54 slides
55.5K views
PPTX
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
by
Atsushi Nakamura
75 slides
8.6K views
PPTX
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
by
Hitachi, Ltd. OSS Solution Center.
22 slides
943 views
GoによるWebアプリ開発のキホン
by
Akihiko Horiuchi
33 slides
61.9K views
BuildKitによる高速でセキュアなイメージビルド
by
Akihiro Suda
27 slides
45.8K views
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
by
日本マイクロソフト株式会社
26 slides
1.5K views
20200526 AWS Black Belt Online Seminar AWS X-Ray
by
Amazon Web Services Japan
99 slides
34.6K views
20190514 AWS Black Belt Online Seminar Amazon API Gateway
by
Amazon Web Services Japan
74 slides
25.1K views
社内Java8勉強会 ラムダ式とストリームAPI
by
Akihiro Ikezoe
54 slides
55.5K views
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
by
Atsushi Nakamura
75 slides
8.6K views
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
by
Hitachi, Ltd. OSS Solution Center.
22 slides
943 views
What's hot
KEY
やはりお前らのMVCは間違っている
by
Koichi Tanaka
66 slides
153.6K views
PDF
Pythonによる黒魔術入門
by
大樹 小倉
35 slides
47.1K views
PDF
こんなに使える!今どきのAPIドキュメンテーションツール
by
dcubeio
52 slides
27K views
PDF
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
by
Yahoo!デベロッパーネットワーク
49 slides
44.4K views
PDF
Oss貢献超入門
by
Michihito Shigemura
145 slides
29.5K views
PDF
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
by
都元ダイスケ Miyamoto
58 slides
148.4K views
PDF
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
by
if kakao
86 slides
21.1K views
PDF
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
by
Kazuhito Miura
55 slides
25.8K views
PDF
WebSocketのキホン
by
You_Kinjoh
63 slides
24.8K views
PPTX
Spring Boot ユーザの方のための Quarkus 入門
by
tsukasamannen
102 slides
950 views
PDF
PHPでWebSocketを実装してみてわかったこと
by
ksimoji
33 slides
13K views
PPTX
MQ入門
by
HIRA
28 slides
7.8K views
PDF
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
by
shinjiigarashi
31 slides
10.6K views
PDF
Spring Security 5.0 解剖速報
by
Takuya Iwatsuka
72 slides
16.1K views
PDF
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
by
Hironobu Isoda
30 slides
2.8K views
PDF
30分でわかるマイクロサービスアーキテクチャ 第2版
by
Naoki (Neo) SATO
59 slides
2K views
PPTX
Amazon EKS によるスマホゲームのバックエンド運用事例
by
gree_tech
43 slides
8.5K views
PDF
分散システムの限界について知ろう
by
Shingo Omura
60 slides
34.5K views
KEY
塹壕よりLivetとMVVM
by
Hiroshi Maekawa
45 slides
13.9K views
PDF
PHP の GC の話
by
y-uti
156 slides
19.9K views
やはりお前らのMVCは間違っている
by
Koichi Tanaka
66 slides
153.6K views
Pythonによる黒魔術入門
by
大樹 小倉
35 slides
47.1K views
こんなに使える!今どきのAPIドキュメンテーションツール
by
dcubeio
52 slides
27K views
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
by
Yahoo!デベロッパーネットワーク
49 slides
44.4K views
Oss貢献超入門
by
Michihito Shigemura
145 slides
29.5K views
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
by
都元ダイスケ Miyamoto
58 slides
148.4K views
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
by
if kakao
86 slides
21.1K views
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
by
Kazuhito Miura
55 slides
25.8K views
WebSocketのキホン
by
You_Kinjoh
63 slides
24.8K views
Spring Boot ユーザの方のための Quarkus 入門
by
tsukasamannen
102 slides
950 views
PHPでWebSocketを実装してみてわかったこと
by
ksimoji
33 slides
13K views
MQ入門
by
HIRA
28 slides
7.8K views
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
by
shinjiigarashi
31 slides
10.6K views
Spring Security 5.0 解剖速報
by
Takuya Iwatsuka
72 slides
16.1K views
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
by
Hironobu Isoda
30 slides
2.8K views
30分でわかるマイクロサービスアーキテクチャ 第2版
by
Naoki (Neo) SATO
59 slides
2K views
Amazon EKS によるスマホゲームのバックエンド運用事例
by
gree_tech
43 slides
8.5K views
分散システムの限界について知ろう
by
Shingo Omura
60 slides
34.5K views
塹壕よりLivetとMVVM
by
Hiroshi Maekawa
45 slides
13.9K views
PHP の GC の話
by
y-uti
156 slides
19.9K views
Viewers also liked
PDF
Symfony2のイベントリスナーについて
by
tnuuu
14 slides
3.8K views
PDF
管理画面のアクセスコントロール
by
Masao Maeda
33 slides
25K views
PPTX
Doctrineアカンパターン
by
Hidetaka Okamoto
15 slides
1.6K views
PPTX
日本電子卒業生とPHPとsymfony
by
Katsuhiro Ogawa
34 slides
1.3K views
PDF
Symfony勉強会#9 form
by
Yuichi Okada
30 slides
4.9K views
PDF
こわくないSymfony2 - 業務で使って気づいた7つの良いところ
by
Go Nakanishi
82 slides
4.5K views
PDF
Api設計
by
Yuto Suzuki
28 slides
4.9K views
Symfony2のイベントリスナーについて
by
tnuuu
14 slides
3.8K views
管理画面のアクセスコントロール
by
Masao Maeda
33 slides
25K views
Doctrineアカンパターン
by
Hidetaka Okamoto
15 slides
1.6K views
日本電子卒業生とPHPとsymfony
by
Katsuhiro Ogawa
34 slides
1.3K views
Symfony勉強会#9 form
by
Yuichi Okada
30 slides
4.9K views
こわくないSymfony2 - 業務で使って気づいた7つの良いところ
by
Go Nakanishi
82 slides
4.5K views
Api設計
by
Yuto Suzuki
28 slides
4.9K views
EventListener使いこなし術 - Symfony勉強会#10
1.
EventListener 使いこなし術 Symfony 勉強会 #10 岡田祐一
@okapon_pon
2.
自己紹介 • 名前:岡田祐一 (@okapon_pon) •
所属:株式会社クロコス エンジニ ア • 2013年∼ 日本Symfonyユーザー会 • Symfony歴 2年半ほど
3.
本日の話 EventListener使いこなし術 あらため EventListenerできること
4.
まえおき ! Symfonyについて
5.
Symfony ! 素直で柔軟なフレームワーク
6.
Symfony ! HWに縛られず自由に開発できる
7.
Symfony 柔軟性を支える屋台骨 • DI (+
configuration) • Event Dispatcher EventListenerはここの話
8.
Symfony イベント駆動のフレームワーク ! フックポイントが用意されている!
9.
Symfonyのイベント 標準で用意されてるイベント ! • kernel.request • kernel.controller •
kernel.view • kernel.response • kernel.exception
10.
Symfonyのイベント 任意のイベントにフック可能 任意のタイミングでResponse を返すことが可能
11.
EventListener 実例 それでは例を見ていきましょう
12.
kernel.controllerイベント kernel.controllerイベント ! コントローラーの実行前に 発行されるイベント
13.
kernel.controllerイベント BeforFilterControllerListener というクラスを作ってみます
14.
kernel.controllerイベント EventLisnerを登録 # service.yml services: my.blog.before_filter_controller_listener: class: MyBlogBundleEventListenerBeforFilterControllerListener tags: -
{ name: kernel.event_listener, event: kernel.controller, method: onKernelController }
15.
EventListenerクラス作成 class BeforeFilterControllerListener { public function
onKernelController(FilterControllerEvent $event) { $c = $event->getController(); if (!is_array($c)) { return; } $controller = $c[0]; ! if (method_exists($controller, 'before')) { $controller->before($event->getRequest(); } } }
16.
EventListenerクラス作成 何やってるか分かりました?
17.
コントローラー側 /** * @Route("/blog") * @Template() */ class
BlogController extends Controller { public function before(Request $request) { // Actionが呼ばれる前に実行したい処理が書ける } ! /** * @Route("/", name="blog_index") */ public function indexAction() { } }
18.
Controller実行前のフック どこかのフレームワークで 見たことある機能・・・
19.
なぜSymfonyにないのか? コントローラーに書くと • 再利用しにくい • テストしづらい
20.
なぜSymfonyにないのか? もう一度コードに戻ります
21.
class BeforeFilterControllerListener { public function
onKernelController(FilterControllerEvent $event) { $c = $event->getController(); if (!is_array($c)) { return; } $controller = $c[0]; ! if (method_exists($controller, 'before')) { $controller->before($event->getRequest(); } } } EventListenerクラス作成 コントローラー側に書く必要がないと感じませんか?
22.
EventListener まとめ1 EventListenrに記述した方が変 な依存を持たずシンプルに実装 できる 【サンプルコード】 https://gist.github.com/okapon/fd2dfdacf87e417f7957
23.
EventListener 実装例 Securityコンポーネント よく分からなくて 昔作ったオレオレ認証 https://gist.github.com/okapon/ 88f5bd56a886c287a7d1
24.
EventListener 実装例 先ほどの実装例では isSecure()メソッドはマーカー → annotationにするとよい ! 【参考】Doctrine-Common-Annotations http://docs.doctrine-project.org/projects/doctrine-common/en/ latest/reference/annotations.html
25.
EventListener まとめ2 ユーザー認証の仕組みも EventListenrを使えば 簡単に実装できる
26.
ちなみに ここまでkernel.controllerを取 り上げといてなんですが・・・ よく使うのは • kernel.request • kernel.response
27.
では気を取り直して
28.
EventListener使いどころ 複数コントローラーで実行したい共通処理 • 認証まわり • 初回登録時のアクセス判定 •
チュートリアルの完了状態で表示出し分け • アクセスの分析(referrerとか)
29.
チュートリアルの表示判定する例 ユーザーはどこのURLにでもアクセ スする可能性がある ! • kernel.requestをフック • EventListenerでチュートリアル完了か判定 •
完了してなければチュートリアルを表示
30.
TutorialListener実装例1 class TutorialListener { public function
onKernelRequest(GetResponseEvent $event) { if (HttpKernelInterface::MASTER_REQUEST !== $event- >getRequestType()) { return; } if (!$this->securityContext->getToken()) { return; } ! $user = $this->securityContext->getToken()->getUser(); if ($this->doseNeedTutorial($user)) { // チュートリアルのURLにリダイレクトするとか $event->setResponse(new RedirectResponse('/tutorial', 302)); } } }
31.
TutorialListener実装例2 class TutorialListener { public function
onKernelRequest(GetResponseEvent $event) { if (HttpKernelInterface::MASTER_REQUEST !== $event- >getRequestType()) { return; } if (!$this->securityContext->getToken()) { return; } ! $user = $this->securityContext->getToken()->getUser(); if ($this->doseNeedTutorial($user)) { // sessionに状態を入れるとか $this->session->set(’needTutorial’, true)); } } }
32.
アクセスデータの収集に使う例 ! • どこからアクセスされたかreferrerを取る • sessionに保存 •
必要なタイミングでsessionから取出し保存
33.
アクセスデータの収集に使う例 use SymfonyComponentHttpKernelHttpKernelInterface; use SymfonyComponentHttpKernelEventGetResponseEvent; ! class
AccessLogListener { public function onKernelRequest(GetResponseEvent $event) { if (HttpKernelInterface::MASTER_REQUEST !== $event- >getRequestType()) { return; } $request = $event->getRequest(); ! // あくまでrefを取るだけのサンプル // 実際には各種属性情報を保存しとくと良い $ref = $request->query->get('ref'); if ($ref) { $request->getSession()->set(‘ref’, $ref); } } }
34.
まとめ(無理矢理) ! • コントローラ実行前の共通処理を書くの に便利 • EventListener使えばアイデア次第で色々 ハックできる •
オレオレ作ってしまってもいいじゃない
35.
EventListener おまけ 活用事例としてはbrtriverさんのお話 が非常に参考になります ! 「運用しやすい管理画面とは」 http://tech.voyagegroup.com/archives/7644534.html ! "PHP Fatal
error: Allowed memory size of xxx" で落ちる前にできること http://d.hatena.ne.jp/brtRiver/20131206/1386345547