PHPカンファレンス2016 (関東) に行ってきました!

というわけで、やや久々の行ってきましたシリーズです。
今日はプログラマっぽく、PHPカンファレンス2016に行ってきました!
こういった技術系のイベントは行ったことがありませんでしたが、今後ITな生活を送る上では重要かと思い、申し込んでみました!

山梨発で、朝10時までに大田区産業プラザに到着する必要があります。
いつも通り高速バスで行きますが、身延線だと間に合わないため、竜王駅から出ている便で向かいました。

cimg2100_r

京急蒲田駅から産業プラザまでは徒歩5分ほどです。
大きな建物なので分かりやすかったです。

cimg2102_r

1Fにセッション用スペースとスポンサーのブースがありました。
セッションの合間に軽く回ってみました。

cimg2103_r

PHP技術者認定試験のブースです。
最近受けて準上級になったので印象深いです。

cimg2104_r

↑のうまい棒です。
ペチゾーが欲しいところでしたが、くじはハズレでした。
そんな運命力はなかったようです。
合格体験記のものと同一らしいので、書いて送って獲得したほうが楽ですね。

cimg2106_r

レバテックのブースにあった問題です。
パッと見ではかなり厳しい…というかusort()がある時点で半分諦めていたりします。
その場で答えられた人はなかなかのPHPerかと思われます。

セッションやLTの内容は割愛しますが、「ほほう!」というものもあれば、「ふーん…」というものもありました。
概念すら知らなかった技術や言語があったので、そういう意味では有意義でした。
ただ一口にPHPといっても、フレームワークからツールまで幅広いので、全てを把握するのは困難ですね。

cimg2108_r

上は最も印象に残った Cygames のセッションの様子です。
ホールに入りきらず、自分も外側に立ってみていたような状態です。
運営側の工夫やサーバ構成などが聞けたので面白かったです。

そんなわけで、短めですがPHPカンファンレス2016にお邪魔してきました!
今後もこういった技術系のセミナーやイベントに顔を出していきたいところです。

【PHP】Symfony2のFormBuilderにデフォルト値を設定する方法

※投稿時の Symfony のバージョンは 2.7.9 、EC-CUBE のバージョンは3.0.10です。

というわけで、今回は PHP のフレームワーク Symfony2 に関するメモです。
仕事で使っている関係上いろいろと詰まることがあり、今日もちょっとしたことで詰まってしまいました。
主に「EC-CUBE3」で使っているので、それを元にして書いておきます。

shot2ss20160714205855672

やりたかったことは「FromBuilder の時にデフォルト値を設定する」です。
(プレースホルダとは別で、画面表示時からフォームに値が設定されている状態です)
普通なら getForm() した後に setData() すれば問題ないのですが、EC-CUBE のフックポイント的に FormBuilder の状態でいじれると便利だったりします。

テストとして、会員登録画面の「生年月日」欄の年をデフォルトで「2000」にしようと思います。
そこでこんなコードを書きましたが、フォームにデフォルト値として設定されません。

$Customer = $app['eccube.repository.customer']->newCustomer();

$builder = $app['form.factory']->createBuilder('entry', $Customer);
$builder->get('birth')->get('year')->setData(2000);

ぐぐったらスタックオーバーフローにそんな話題がありました。

http://stackoverflow.com/questions/18870866/symfony-2-3-form-getdata-doesnt-work-in-subforms-collections

setDataLocked() なる関数でロックしてあげないと getForm() 時に消える(?)らしいです。
ならこれでロックすればOKですね。

$Customer = $app['eccube.repository.customer']->newCustomer();

$builder = $app['form.factory']->createBuilder('entry', $Customer);
$builder->get('birth')->get('year')->setData(2000)->setDataLocked(true);

shot2ss20160714205839398

今度はデフォルト値としてしっかり入りました!
値を変えて確認画面に行ってもちゃんと変わったので、大丈夫かと思われます。

ちなみに getForm() 後であれば普通に $form->get(‘フィールド名’)->setData() で設定できます。
但し handleRequest() してしまうと変えられなくなります。
また、「プラグインからフックして設定する」などの理由がなければ Type クラスの $buider->add() のオプションで指定しまう方が確実です。

まとめ

そんなわけで、Symfony2 の setData() に関するお話でした。
Symfony2 は初見ではとっつきにくい割に日本語サイトが少ないので厳しいです。
EC-CUBE3 のフレームワークとしても使われているので、もっと日本語サイトも増えてくれるといいなーなんて思います。

ゲーム開発とは関係ありませんが、今後も何か詰まったことがあったらメモして忘れないようにしたいです。
特に PHP は一生付き合っていく言語になりそうなので、尚更ですね。
そもそもゲーム開発だけでは話題が続かなくなってきているので、いろいろ話題を織り交ぜていくブログに方向転換しようかと思います。

カテゴリー PHP