狠狠撸

狠狠撸Share a Scribd company logo
厂测尘蹿辞苍测2勉强会#4基础编ワークショップ.12011.06.04上野裕介
目次ディレクトリ構成(10分)バンドルの作成と登録(10分)ルーティングの登録(10分)Twig構文を試す(15分)Twigテンプレートの継承(20分)Twigのキャッシュを見る(10分)2011.06.04Symfony2勉強会#4 基礎編ワークショップ2
ワークショップの参考URLCreating Pages in Symfony2 (バンドル作成方法)http://symfony.com/doc/current/book/page_creation.htmlCreating and using Templates (Sf2とTwigの連携)http://symfony.com/doc/current/book/templating.htmlTwig Documentation (Twigの基本構文とか)http://www.twig-project.org/documentationTwigと他のテンプレートエンジンの比較http://fabien.potencier.org/article/34/templating-engines-in-phphttp://fabien.potencier.org/article/35/templating-engines-in-php-follow-up2011.06.04Symfony2勉強会#4 基礎編ワークショップ3
目次ディレクトリ構成(10分)バンドルの作成と登録(10分)ルーティングの登録(10分)Twig構文を試す(15分)Twigテンプレートの継承(20分)Twigのキャッシュを見る(10分)2011.06.04Symfony2勉強会#4 基礎編ワークショップ4
ディレクトリ構成websrcvendorapp(bin)2011.06.04Symfony2勉強会#4 基礎編ワークショップ5
目次ディレクトリ構成(10分)バンドルの作成と登録(10分)ルーティングの登録(10分)Twig構文を試す(15分)Twigテンプレートの継承(20分)Twigのキャッシュを見る(10分)2011.06.04Symfony2勉強会#4 基礎編ワークショップ6
バンドルの作成と登録バンドルフレームワーク自分のプログラム外部プラグインバンドルの粒度symfony 1.x と比較frontend application 	… FrontendBundleblog module 			… BlogBundlesfWebBrowserPlugin 	… WebbrowserBundle2011.06.04Symfony2勉強会#4 基礎編ワークショップ7
バンドルの作成と登録app/consoleコマンドinit:bundleコマンド作成されたフォルダを見てみよう2011.06.04Symfony2勉強会#4 基礎編ワークショップ8$ php app/console init:bundle “MyorkshopBundle” src
バンドルの作成と登録名前空間の登録(app/autoload.php)AppKernelへの登録(app/AppKernel.php)2011.06.04Symfony2勉強会#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.04Symfony2勉強会#4 基礎編ワークショップ10
ルーティングの登録app/config/routing.ymlsrc/My/WorkshopBundle/Resources/config/routing.ymlコメントアウトをはずす+名前変更2011.06.04Symfony2勉強会#4 基礎編ワークショップ11workshop:  prefix: /workshop  resource: “@MyWorkshopBundle/Resources/config/routing.yml”workshop_homepage:pattern:/defaults:{ _controller:MyWorkshopBundle:Default:index }バンドル名:コントローラ名:アクション名
ルーティングの登録2011.06.04Symfony2勉強会#4 基礎編ワークショップ12http://localhost/Symfony/web/app_dev.php/workshop/自動生成されたアクションとテンプレートがあるので、Hello!と表示されます
目次ディレクトリ構成(10分)バンドルの作成と登録(10分)ルーティングの登録(10分)Twig構文を試す(15分)Twigテンプレートの継承(20分)Twigのキャッシュを見る(10分)2011.06.04Symfony2勉強会#4 基礎編ワークショップ13
Twig構文を試す – for文src/My/WorkshopBundle/Resources/views/Default/index.html.twig2011.06.04Symfony2勉強会#4 基礎編ワークショップ14<ul>{% for key, user in users %}<li>No.{{ key }}: {{ user.name}} </li> {% endfor%}</ul>
Twig構文を試す – for文DefaultController::indexAction()2011.06.04Symfony2勉強会#4 基礎編ワークショップ15public 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.04Symfony2勉強会#4 基礎編ワークショップ16
Twig構文を試す - includesrc/My/WorkshopBundle/Resources/views/menu.html.twigsrc/My/WorkshopBundle/Resources/views/Default/index.html.twig (の冒頭に追加)2011.06.04Symfony2勉強会#4 基礎編ワークショップ17<ul><li>メニュー1</li><li>メニュー2</li><li>メニュー3</li></ul>{% include 'MyWorkshopBundle::menu.html.twig'%}
Twig構文を試す - rawsrc/My/WorkshopBundle/Resources/views/Default/index.html.twigにrawフィルタを付けるエスケープされなくなる2011.06.04Symfony2勉強会#4 基礎編ワークショップ18<li>No.{{ key }}: {{ user.name}}({{ user.age }})</li><li>No.{{ key }}: {{ user.name|raw}}({{ user.age }})</li>
Twig構文を試す - formatsrc/My/WorkshopBundle/Resources/views/Default/index.html.twigをformatフィルタで書き直すとprintf()関数の様なもの2011.06.04Symfony2勉強会#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.html2011.06.04Symfony2勉強会#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.04Symfony2勉強会#4 基礎編ワークショップ21
Twigテンプレートの継承app/Resources/views/base.html.twigsrc/My/WorkshopBundle/Resources/views/layout.html.twigDefault/index.html.twig2011.06.04Symfony2勉強会#4 基礎編ワークショップ22元からある継承今から作るさっき弄ってた継承
Twigテンプレートの継承2011.06.04Symfony2勉強会#4 基礎編ワークショップ23base.html.twiglayout.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('favicon1.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.04Symfony2勉強会#4 基礎編ワークショップ24base.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('favicon1.ico')}}" /></head><body>{%block body %}{%endblock%}{% block javascripts%}{% endblock%}</body></html>
Twigテンプレートの継承2011.06.04Symfony2勉強会#4 基礎編ワークショップ25layout.html.twig{% extends '::base.html.twig' %}{% block title %}WorkShop{% endblock%}{% block body %}{% include 'MyWorkshopBundle::menu.html.twig' %}{% endblock%}
Twigテンプレートの継承2011.06.04Symfony2勉強会#4 基礎編ワークショップ26index.html.twig{% extends 'MyWorkshopBundle::layout.html.twig' %}{% block body %}{{ parent() }}<!– ここから-->中身<!– ここまで?{% endblock%}
目次ディレクトリ構成(10分)バンドルの作成と登録(10分)ルーティングの登録(10分)Twig構文を試す(15分)Twigテンプレートの継承(20分)Twigのキャッシュを見る(10分)2011.06.04Symfony2勉強会#4 基礎編ワークショップ27
Twigのキャッシュを見るapp/cache/dev/twig/*Php codeにコンパイルされている意外ときれいなphp-codeシンプルだけど、機能を満たす元のコードとの対応関係がおおよそ分かる2011.06.04Symfony2勉強会#4 基礎編ワークショップ28
\(^o^)/おわり\(^o^)/Next step…ブログチュートリアルhttp://doc.symfony.gr.jp/blog-tutorial/Symfony2 Bookhttp://symfony.com/doc/current/book/index.html2011.06.04Symfony2勉強会#4 基础编ワークショップ29

More Related Content

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