SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

Mais procurados

エキスパート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 ネイティブライブラリラッピング入門伸男 伊藤
 

Mais procurados (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 ネイティブライブラリラッピング入門
 

Destaque

第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
 

Destaque (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
 

Semelhante a 第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
 

Semelhante a 第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の威力
 

Último

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 

Último (8)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 

第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