SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Symfony2勉強会#4基礎編ワークショップ.1 2011.06.04 上野裕介
目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 2
ワークショップの参考URL Creating Pages in Symfony2 (バンドル作成方法) http://symfony.com/doc/current/book/page_creation.html Creating and using Templates (Sf2とTwigの連携) http://symfony.com/doc/current/book/templating.html Twig Documentation (Twigの基本構文とか) http://www.twig-project.org/documentation Twigと他のテンプレートエンジンの比較 http://fabien.potencier.org/article/34/templating-engines-in-php http://fabien.potencier.org/article/35/templating-engines-in-php-follow-up 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 3
目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 4
ディレクトリ構成 web src vendor app (bin) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 5
目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 6
バンドルの作成と登録 バンドル フレームワーク 自分のプログラム 外部プラグイン バンドルの粒度 symfony 1.x と比較 frontend application 	… FrontendBundle blog module 			… BlogBundle sfWebBrowserPlugin 	… WebbrowserBundle 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 7
バンドルの作成と登録 app/consoleコマンド init:bundleコマンド 作成されたフォルダを見てみよう 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 8 $ php app/console init:bundle “MyorkshopBundle” src
バンドルの作成と登録 名前空間の登録(app/autoload.php) AppKernelへの登録(app/AppKernel.php) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 9 $loader->registerNamespaces(array( // ... 'My' => __DIR__.'/../src', )); public function registerBundles() {     $bundles = array( // ... new MyorkshopBundleyWorkshopBundle(),     ); // ... return $bundles; }
目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 10
ルーティングの登録 app/config/routing.yml src/My/WorkshopBundle/Resources/config/routing.yml コメントアウトをはずす+名前変更 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 11 workshop:   prefix: /workshop   resource: “@MyWorkshopBundle/Resources/config/routing.yml” workshop_homepage: pattern:/ defaults:{ _controller:MyWorkshopBundle:Default:index } バンドル名:コントローラ名:アクション名
ルーティングの登録 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 12 http://localhost/Symfony/web/app_dev.php/workshop/ 自動生成されたアクションとテンプレートがあるので、 Hello!と表示されます
目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 13
Twig構文を試す – for文 src/My/WorkshopBundle/Resources/views/Default/index.html.twig 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 14 <ul> {% for key, user in users %} <li>No.{{ key }}: {{ user.name}} </li>  {% endfor%} </ul>
Twig構文を試す – for文 DefaultController::indexAction() 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 15 public function indexAction() { $users = array( ‘1’ => array(‘name’=>‘鹿目まどか', 'age'=>14), ‘5’ => array(‘name’=>‘<b>めんま</b>', 'age'=>’?'), ); return $this->render('MyWorkshopBundle:Default:index.html.twig', array('users' => $users)); }
Twig構文を試す {{ ... }} 値や式の結果をテンプレートに出力するための文法 {% ... %} テンプレート内でロジックを制御するための文法 {# ... #} コメントを表すための文法 複数行にわたって使用可能 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 16
Twig構文を試す - include src/My/WorkshopBundle/Resources/views/menu.html.twig src/My/WorkshopBundle/Resources/views/Default/index.html.twig (の冒頭に追加) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 17 <ul> <li>メニュー1</li> <li>メニュー2</li> <li>メニュー3</li> </ul> {% include 'MyWorkshopBundle::menu.html.twig'%}
Twig構文を試す - raw src/My/WorkshopBundle/Resources/views/Default/index.html.twig にrawフィルタを付ける エスケープされなくなる 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 18 <li>No.{{ key }}: {{ user.name}}({{ user.age }})</li> <li>No.{{ key }}: {{ user.name|raw}}({{ user.age }})</li>
Twig構文を試す - format src/My/WorkshopBundle/Resources/views/Default/index.html.twig をformatフィルタで書き直すと printf()関数の様なもの 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 19 <li>No.{{ key }}: {{ user.name}}({{ user.age }})</li> <li>{{ "No.%d: %s(%s)"|format(key, user.name, user.age) }}</li>
Twig構文を試す – その他 例だけ紹介 date … DateTime::format()のラッパー(書式はdate()) default … 空要素の初期値を指定(beta3バグあり) 「空」と判定される値は、falseまたは0以外のempty()値 if/elseif/else/endif … 条件分岐 http://www.twig-project.org/doc/templates.html 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 20 {{ “now”|date(‘Y-m-dH:i:s’) }} {{ user.createdAt|date(‘Y/m/d’) }} {{ user.birthday|default(‘----/--/--’) }} {% if users %} … {% endif%}
目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 21
Twigテンプレートの継承 app/Resources/views/ base.html.twig src/My/WorkshopBundle/Resources/views/ layout.html.twig Default/ index.html.twig 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 22 元からある 継承 今から作る さっき弄ってた 継承
Twigテンプレートの継承 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 23 base.html.twig layout.html.twig <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>{%block title %}Welcome!{%endblock%}</title> {%block stylesheets%}{% endblock%} <link rel="shortcut icon" href="{{asset('favicon.ico')}}" /> </head> <body> {%block body %}{%endblock%} {% block javascripts%}{% endblock%} </body> </html> titleブロック index.html.twig {% extends '::base.html.twig' %} {% block title %}WorkShop{% endblock%} {% block body %} {% include 'MyWorkshopBundle::menu.html.twig' %} {% endblock%} 継承 継承 titleブロック {% extends 'MyWorkshopBundle::layout.html.twig' %} {% block body %} {{ parent() }} <!– ここから--> 中身 <!– ここまで {% endblock%} 親のblock呼び出し bodyブロック bodyブロック bodyブロック
Twigテンプレートの継承 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 24 base.html.twig <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>{%block title %}Welcome!{%endblock%}</title> {%block stylesheets%}{% endblock%} <link rel="shortcut icon" href="{{asset('favicon.ico')}}" /> </head> <body> {%block body %}{%endblock%} {% block javascripts%}{% endblock%} </body> </html>
Twigテンプレートの継承 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 25 layout.html.twig {% extends '::base.html.twig' %} {% block title %}WorkShop{% endblock%} {% block body %} {% include 'MyWorkshopBundle::menu.html.twig' %} {% endblock%}
Twigテンプレートの継承 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 26 index.html.twig {% extends 'MyWorkshopBundle::layout.html.twig' %} {% block body %} {{ parent() }} <!– ここから--> 中身 <!– ここまで {% endblock%}
目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 27
Twigのキャッシュを見る app/cache/dev/twig/* Php codeにコンパイルされている 意外ときれいなphp-code シンプルだけど、機能を満たす 元のコードとの対応関係がおおよそ分かる 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 28
\(^o^)/おわり\(^o^)/ Next step… ブログチュートリアル http://doc.symfony.gr.jp/blog-tutorial/ Symfony2 Book http://symfony.com/doc/current/book/index.html 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 29

Weitere ähnliche Inhalte

Was ist angesagt?

エキスパートGo
エキスパートGoエキスパートGo
エキスパートGoTakuya Ueda
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らないdigitalghost
 
静的型付け言語Python
静的型付け言語Python静的型付け言語Python
静的型付け言語Pythonkiki utagawa
 
templateとautoの型推論
templateとautoの型推論templateとautoの型推論
templateとautoの型推論MITSUNARI Shigeo
 
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesBoost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesShintarou Okada
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型信之 岩永
 
C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~Fujio Kojima
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいShigeru UCHIYAMA
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.kiki utagawa
 
Define and expansion of cpp macro
Define and expansion of cpp macroDefine and expansion of cpp macro
Define and expansion of cpp macrodigitalghost
 
C++ Template Metaprogramming
C++ Template MetaprogrammingC++ Template Metaprogramming
C++ Template MetaprogrammingAkira Takahashi
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 

Was ist angesagt? (15)

エキスパートGo
エキスパートGoエキスパートGo
エキスパートGo
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
 
静的型付け言語Python
静的型付け言語Python静的型付け言語Python
静的型付け言語Python
 
templateとautoの型推論
templateとautoの型推論templateとautoの型推論
templateとautoの型推論
 
More C++11
More C++11More C++11
More C++11
 
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core GuidelinesBoost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
 
C++11
C++11C++11
C++11
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 
C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~C#勉強会 ~ C#9の新機能 ~
C#勉強会 ~ C#9の新機能 ~
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しい
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
Define and expansion of cpp macro
Define and expansion of cpp macroDefine and expansion of cpp macro
Define and expansion of cpp macro
 
C++ Template Metaprogramming
C++ Template MetaprogrammingC++ Template Metaprogramming
C++ Template Metaprogramming
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 

Andere mochten auch

第4回Symfony2勉強会 基礎編ワークショップ.0
第4回Symfony2勉強会 基礎編ワークショップ.0第4回Symfony2勉強会 基礎編ワークショップ.0
第4回Symfony2勉強会 基礎編ワークショップ.0Yusuke Ueno
 
Symfony2のフォームフレームワーク
Symfony2のフォームフレームワークSymfony2のフォームフレームワーク
Symfony2のフォームフレームワークKatsuhiro Ogawa
 
Symfony2 Behat/BDD (#Symfony2study 4)
Symfony2 Behat/BDD (#Symfony2study 4)Symfony2 Behat/BDD (#Symfony2study 4)
Symfony2 Behat/BDD (#Symfony2study 4)Hidenori Goto
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにAtsuhiro Kubo
 
Twigエクステンションの作り方
Twigエクステンションの作り方Twigエクステンションの作り方
Twigエクステンションの作り方Katsuhiro Ogawa
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ VOYAGE GROUP
 
オレオレSecurityバンドル作っちゃいました
オレオレSecurityバンドル作っちゃいましたオレオレSecurityバンドル作っちゃいました
オレオレSecurityバンドル作っちゃいましたKatsuhiro Ogawa
 
Symfony勉強会#9 form
Symfony勉強会#9 formSymfony勉強会#9 form
Symfony勉強会#9 formYuichi Okada
 

Andere mochten auch (9)

第4回Symfony2勉強会 基礎編ワークショップ.0
第4回Symfony2勉強会 基礎編ワークショップ.0第4回Symfony2勉強会 基礎編ワークショップ.0
第4回Symfony2勉強会 基礎編ワークショップ.0
 
Symfony2のフォームフレームワーク
Symfony2のフォームフレームワークSymfony2のフォームフレームワーク
Symfony2のフォームフレームワーク
 
Symfony2 Behat/BDD (#Symfony2study 4)
Symfony2 Behat/BDD (#Symfony2study 4)Symfony2 Behat/BDD (#Symfony2study 4)
Symfony2 Behat/BDD (#Symfony2study 4)
 
Silex 入門
Silex 入門Silex 入門
Silex 入門
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
 
Twigエクステンションの作り方
Twigエクステンションの作り方Twigエクステンションの作り方
Twigエクステンションの作り方
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ
 
オレオレSecurityバンドル作っちゃいました
オレオレSecurityバンドル作っちゃいましたオレオレSecurityバンドル作っちゃいました
オレオレSecurityバンドル作っちゃいました
 
Symfony勉強会#9 form
Symfony勉強会#9 formSymfony勉強会#9 form
Symfony勉強会#9 form
 

Ähnlich wie 第4回Symfony2勉強会 基礎編ワークショップ.1

Getting Started with Graph Database with Python
Getting Started with Graph Database with PythonGetting Started with Graph Database with Python
Getting Started with Graph Database with Pythonロフト くん
 
Django 1.5 における効果的な MTV 設計 & ネイティブApp
Django 1.5 における効果的な MTV 設計 & ネイティブAppDjango 1.5 における効果的な MTV 設計 & ネイティブApp
Django 1.5 における効果的な MTV 設計 & ネイティブAppYikei Lu
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門Tomoya Kawanishi
 
TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?Mr. Vengineer
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2Tomohiro Namba
 
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fumiya Sakai
 
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門cch-robo
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
デザインパターン
デザインパターンデザインパターン
デザインパターンgaaupp
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義ria1201
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!Shohei Okada
 
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~Fujio Kojima
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 

Ähnlich wie 第4回Symfony2勉強会 基礎編ワークショップ.1 (20)

Dakota+openFoam1
Dakota+openFoam1Dakota+openFoam1
Dakota+openFoam1
 
Getting Started with Graph Database with Python
Getting Started with Graph Database with PythonGetting Started with Graph Database with Python
Getting Started with Graph Database with Python
 
Django 1.5 における効果的な MTV 設計 & ネイティブApp
Django 1.5 における効果的な MTV 設計 & ネイティブAppDjango 1.5 における効果的な MTV 設計 & ネイティブApp
Django 1.5 における効果的な MTV 設計 & ネイティブApp
 
20120118 titanium
20120118 titanium20120118 titanium
20120118 titanium
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
 
TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
 
Titanium実装最初の一歩.
Titanium実装最初の一歩. Titanium実装最初の一歩.
Titanium実装最初の一歩.
 
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
Netmf-180224
Netmf-180224Netmf-180224
Netmf-180224
 
CMSI計算科学技術特論C (2015) OpenMX とDFT②
CMSI計算科学技術特論C (2015) OpenMX とDFT②CMSI計算科学技術特論C (2015) OpenMX とDFT②
CMSI計算科学技術特論C (2015) OpenMX とDFT②
 
dezainn
dezainndezainn
dezainn
 
デザインパターン
デザインパターンデザインパターン
デザインパターン
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
Clrh 20140906 lt
Clrh 20140906 ltClrh 20140906 lt
Clrh 20140906 lt
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 

Kürzlich hochgeladen

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Kürzlich hochgeladen (10)

論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

第4回Symfony2勉強会 基礎編ワークショップ.1

  • 2. 目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 2
  • 3. ワークショップの参考URL Creating Pages in Symfony2 (バンドル作成方法) http://symfony.com/doc/current/book/page_creation.html Creating and using Templates (Sf2とTwigの連携) http://symfony.com/doc/current/book/templating.html Twig Documentation (Twigの基本構文とか) http://www.twig-project.org/documentation Twigと他のテンプレートエンジンの比較 http://fabien.potencier.org/article/34/templating-engines-in-php http://fabien.potencier.org/article/35/templating-engines-in-php-follow-up 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 3
  • 4. 目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 4
  • 5. ディレクトリ構成 web src vendor app (bin) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 5
  • 6. 目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 6
  • 7. バンドルの作成と登録 バンドル フレームワーク 自分のプログラム 外部プラグイン バンドルの粒度 symfony 1.x と比較 frontend application … FrontendBundle blog module … BlogBundle sfWebBrowserPlugin … WebbrowserBundle 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 7
  • 8. バンドルの作成と登録 app/consoleコマンド init:bundleコマンド 作成されたフォルダを見てみよう 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 8 $ php app/console init:bundle “MyorkshopBundle” src
  • 9. バンドルの作成と登録 名前空間の登録(app/autoload.php) AppKernelへの登録(app/AppKernel.php) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 9 $loader->registerNamespaces(array( // ... 'My' => __DIR__.'/../src', )); public function registerBundles() { $bundles = array( // ... new MyorkshopBundleyWorkshopBundle(), ); // ... return $bundles; }
  • 10. 目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 10
  • 11. ルーティングの登録 app/config/routing.yml src/My/WorkshopBundle/Resources/config/routing.yml コメントアウトをはずす+名前変更 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 11 workshop: prefix: /workshop resource: “@MyWorkshopBundle/Resources/config/routing.yml” workshop_homepage: pattern:/ defaults:{ _controller:MyWorkshopBundle:Default:index } バンドル名:コントローラ名:アクション名
  • 12. ルーティングの登録 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 12 http://localhost/Symfony/web/app_dev.php/workshop/ 自動生成されたアクションとテンプレートがあるので、 Hello!と表示されます
  • 13. 目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 13
  • 14. Twig構文を試す – for文 src/My/WorkshopBundle/Resources/views/Default/index.html.twig 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 14 <ul> {% for key, user in users %} <li>No.{{ key }}: {{ user.name}} </li> {% endfor%} </ul>
  • 15. Twig構文を試す – for文 DefaultController::indexAction() 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 15 public function indexAction() { $users = array( ‘1’ => array(‘name’=>‘鹿目まどか', 'age'=>14), ‘5’ => array(‘name’=>‘<b>めんま</b>', 'age'=>’?'), ); return $this->render('MyWorkshopBundle:Default:index.html.twig', array('users' => $users)); }
  • 16. Twig構文を試す {{ ... }} 値や式の結果をテンプレートに出力するための文法 {% ... %} テンプレート内でロジックを制御するための文法 {# ... #} コメントを表すための文法 複数行にわたって使用可能 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 16
  • 17. Twig構文を試す - include src/My/WorkshopBundle/Resources/views/menu.html.twig src/My/WorkshopBundle/Resources/views/Default/index.html.twig (の冒頭に追加) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 17 <ul> <li>メニュー1</li> <li>メニュー2</li> <li>メニュー3</li> </ul> {% include 'MyWorkshopBundle::menu.html.twig'%}
  • 18. Twig構文を試す - raw src/My/WorkshopBundle/Resources/views/Default/index.html.twig にrawフィルタを付ける エスケープされなくなる 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 18 <li>No.{{ key }}: {{ user.name}}({{ user.age }})</li> <li>No.{{ key }}: {{ user.name|raw}}({{ user.age }})</li>
  • 19. Twig構文を試す - format src/My/WorkshopBundle/Resources/views/Default/index.html.twig をformatフィルタで書き直すと printf()関数の様なもの 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 19 <li>No.{{ key }}: {{ user.name}}({{ user.age }})</li> <li>{{ "No.%d: %s(%s)"|format(key, user.name, user.age) }}</li>
  • 20. Twig構文を試す – その他 例だけ紹介 date … DateTime::format()のラッパー(書式はdate()) default … 空要素の初期値を指定(beta3バグあり) 「空」と判定される値は、falseまたは0以外のempty()値 if/elseif/else/endif … 条件分岐 http://www.twig-project.org/doc/templates.html 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 20 {{ “now”|date(‘Y-m-dH:i:s’) }} {{ user.createdAt|date(‘Y/m/d’) }} {{ user.birthday|default(‘----/--/--’) }} {% if users %} … {% endif%}
  • 21. 目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 21
  • 22. Twigテンプレートの継承 app/Resources/views/ base.html.twig src/My/WorkshopBundle/Resources/views/ layout.html.twig Default/ index.html.twig 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 22 元からある 継承 今から作る さっき弄ってた 継承
  • 23. Twigテンプレートの継承 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 23 base.html.twig layout.html.twig <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>{%block title %}Welcome!{%endblock%}</title> {%block stylesheets%}{% endblock%} <link rel="shortcut icon" href="{{asset('favicon.ico')}}" /> </head> <body> {%block body %}{%endblock%} {% block javascripts%}{% endblock%} </body> </html> titleブロック index.html.twig {% extends '::base.html.twig' %} {% block title %}WorkShop{% endblock%} {% block body %} {% include 'MyWorkshopBundle::menu.html.twig' %} {% endblock%} 継承 継承 titleブロック {% extends 'MyWorkshopBundle::layout.html.twig' %} {% block body %} {{ parent() }} <!– ここから--> 中身 <!– ここまで {% endblock%} 親のblock呼び出し bodyブロック bodyブロック bodyブロック
  • 24. Twigテンプレートの継承 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 24 base.html.twig <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>{%block title %}Welcome!{%endblock%}</title> {%block stylesheets%}{% endblock%} <link rel="shortcut icon" href="{{asset('favicon.ico')}}" /> </head> <body> {%block body %}{%endblock%} {% block javascripts%}{% endblock%} </body> </html>
  • 25. Twigテンプレートの継承 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 25 layout.html.twig {% extends '::base.html.twig' %} {% block title %}WorkShop{% endblock%} {% block body %} {% include 'MyWorkshopBundle::menu.html.twig' %} {% endblock%}
  • 26. Twigテンプレートの継承 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 26 index.html.twig {% extends 'MyWorkshopBundle::layout.html.twig' %} {% block body %} {{ parent() }} <!– ここから--> 中身 <!– ここまで {% endblock%}
  • 27. 目次 ディレクトリ構成(10分) バンドルの作成と登録(10分) ルーティングの登録(10分) Twig構文を試す(15分) Twigテンプレートの継承(20分) Twigのキャッシュを見る(10分) 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 27
  • 28. Twigのキャッシュを見る app/cache/dev/twig/* Php codeにコンパイルされている 意外ときれいなphp-code シンプルだけど、機能を満たす 元のコードとの対応関係がおおよそ分かる 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 28
  • 29. \(^o^)/おわり\(^o^)/ Next step… ブログチュートリアル http://doc.symfony.gr.jp/blog-tutorial/ Symfony2 Book http://symfony.com/doc/current/book/index.html 2011.06.04 Symfony2勉強会#4 基礎編ワークショップ 29