26
恒例となりましたPinocoのお時間 まじめに紹介してみる

Phpcon kansani-2013-pinoco

Embed Size (px)

Citation preview

Page 1: Phpcon kansani-2013-pinoco

恒例となりましたPinocoのお時間まじめに紹介してみる

Page 2: Phpcon kansani-2013-pinoco

たなかひさてる@tanakahisateru

Pinoco developerPHPTAL contributorFirebug translation contributorYii framework user

Page 3: Phpcon kansani-2013-pinoco

テンプレートエンジン何使ってますか

Page 4: Phpcon kansani-2013-pinoco

デザイナーが書いたHTML<ul> <li> <a href="#">menu1</a> </li> <li> <a href="#">menu2</a> </li> <li> <a href="#">menu3</a> </li></ul>

Page 5: Phpcon kansani-2013-pinoco

PHPerが触るとこうなっちゃう

<ul> <?php foreach ($menuItems as $item): ?> <li> <a href="<?= $item['link'] ?>" ><?= htmlspecialchars($item['label']) ?></a> </li> <?php /* <li> <a href="#">menu2</a> </li> <li> <a href="#">menu3</a> </li> */ ?> <?php endforeach; ?></ul>

Page 6: Phpcon kansani-2013-pinoco

インデント変わってね?<ul> <?php foreach ($menuItems as $item): ?> <li> <a href="<?= $item['link'] ?>" ><?= htmlspecialchars($item['label']) ?></a> </li> <?php /* <li> <a href="#">menu2</a> </li> <li> <a href="#">menu3</a> </li> */ ?> <?php endforeach; ?></ul>

Page 7: Phpcon kansani-2013-pinoco

でもこれ読みにくい<ul> <?php foreach ($menuItems as $item): ?> <li> <a href="<?= $item['link'] ?>" ><?= htmlspecialchars($item['label']) ?></a> </li> <?php /* <li> <a href="#">menu2</a> </li> <li> <a href="#">menu3</a> </li> */ ?> <?php endforeach; ?></ul>

Page 8: Phpcon kansani-2013-pinoco

問題点

HTMLのインデント方針→DOM構造

テンプレートエンジン→分岐と繰り返し

意味構造の違う言語が混ざっている

SmartyやTwigでもこれは同じ

Page 9: Phpcon kansani-2013-pinoco

TAL = Template Attribute Language (Python文化)

Page 10: Phpcon kansani-2013-pinoco

TALの文法で書くと<ul> <li tal:repeat="item menuItems"> <a href="#" tal:attributes="href item/link" tal:content="item/label" >menu1</a> </li> <li tal:replace=""> <a href="#">menu2</a> </li> <li tal:replace=""> <a href="#">menu3</a> </li></ul>

Page 11: Phpcon kansani-2013-pinoco

HTML - TAL<ul> <li tal:repeat="item menuItems"> <a href="#" tal:attributes="href item/link" tal:content="item/label" >menu1</a> </li> <li tal:replace=""> <a href="#">menu2</a> </li> <li tal:replace=""> <a href="#">menu3</a> </li></ul>

最初の<a>でちょっとズルしてるけど許して

<ul> <li> <a href="#"

>menu1</a> </li> <li> <a href="#">menu2</a> </li> <li> <a href="#">menu3</a> </li></ul>

Page 12: Phpcon kansani-2013-pinoco

TAL

TALはXHTMLの名前空間で実現される

つまりHTMLと構文システムを共有

HTMLバリデータを通る

ということは...

Page 13: Phpcon kansani-2013-pinoco

単体でブラウザに出せる

Page 14: Phpcon kansani-2013-pinoco

TAL導入の動機

ブラウザ側技術の高度化

ユーザビリティ最優先でデザインされたUIへのニーズ

フロントエンド側のコードにも品質が求められる

Page 15: Phpcon kansani-2013-pinoco

http://phptal.org/

Page 16: Phpcon kansani-2013-pinoco

なぜか保守メンバーになりました。よろしくお願いします。

Page 17: Phpcon kansani-2013-pinoco

これ、すぐに使いたい人は

Page 18: Phpcon kansani-2013-pinoco

Pinocoもっとも静的サイトに近いフレームワーク

Page 20: Phpcon kansani-2013-pinoco

$ cd _app$ ./serverPHP 5.4.13 Development Server started at Thu May 30 18:08:04 2013Listening on http://localhost:8801Document root is /Users/tanakahisateru/Sites/pinoco-testPress Ctrl-C to quit.

「すぐに」は本当にすぐに

ビルトインサーバ対応

Page 21: Phpcon kansani-2013-pinoco

最近のPinocoPhpStormのOSライセンスもらってコード品質超改善。

難しいプログラミングの開発案件でも、

中のライブラリを取り出して使うと大活躍。

0.8をリリース → ベータ期間終了予定。

APIドキュメントをオンラインに。

そろそろワークショップをやりたいと思っています。

Page 22: Phpcon kansani-2013-pinoco

とか面白くないので最新機能

Page 23: Phpcon kansani-2013-pinoco

静的サイト構造を維持したビューとロジックの分離はそのままに

ロジック

HTML(+TALの属性)

Page 24: Phpcon kansani-2013-pinoco

ナウいルーターを挿入可能にました

$router = $this->route();$router->pass(array( // 無視するパス(後続のスクリプトに委譲される) '', 'index.html', )) ->on('list', function() { // 一覧表を出力 }) ->on('show/{id}', function($id) { // IDで取得して詳細を出力 }) ->on('POST:upload', function() { // POSTでデータ更新 }) ->on('GET:upload', array($this, 'forbidden')) // 403 ->on('*', array($this, 'notfound')); // 404

Page 25: Phpcon kansani-2013-pinoco

やりやすくなったこと:

ビューを持たないアクションとかJSON返すRESTなAPIとか

Page 26: Phpcon kansani-2013-pinoco

プレーンPHPからの移行をお待ちしております。