スポンサーサイト
一定期間更新がないため広告を表示しています
- 2014.12.23 Tuesday
- -
- -
- -
- -
- -
- by スポンサードリンク
// src/Acme/DemoBundle/Controller/BaseController.php public function barAction(Request $request) { //何かの処理 return $this->render('AcmeDemoBundle:Foo:bar.html.twig', array('name' => $name) ); } // src/Acme/DemoBundle/Controller/FooController.php public function barAction(Request $request) { //parent::barAction($request)だとResponseが返って来ちゃうから… //何かの処理(BaseController::barAction()と同じ内容コピペ) //追加の処理(カスタマイズ) return $this->render('AcmeDemoBundle:Foo:bar.html.twig', array('name' => $name, 'tel' => $tel) ); }
// src/Acme/DemoBundle/Controller/BaseController.php /** * @Template() */ public function barAction(Request $request) { //何かの処理 return array('name' => $name); } // src/Acme/DemoBundle/Controller/FooController.php /** * @Template() */ public function barAction(Request $request) { //返ってくるのは配列だからparent::barAction()使ってOK $vars = parent::barAction($request); //追加の処理(カスタマイズ) $vars['tel'] = $tel; return $vars; }
//src/Acme/DemoBundle/Entity/Customer.php class Customer { /** * @var integer * * @ORM¥Column(name="id", type="integer") * @ORM¥Id * @ORM¥GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM¥Column(name="name", type="string", length=255) */ private $name; /** * @var integer * * @ORM¥Column(name="seibetsu", type="integer") */ private $seibetsu; }
// src/Acme/DemoBundle/Admin/CustomerAdmin.php use Sonata¥AdminBundle¥Admin¥Admin; use Sonata¥AdminBundle¥Datagrid¥DatagridMapper; use Sonata¥AdminBundle¥Datagrid¥ListMapper; use Sonata¥AdminBundle¥Form¥FormMapper; class CustomerAdmin extends Admin { protected $baseRouteName = 'admin_customer'; /** * @param FormMapper $formMapper */ protected function configureFormFields(FormMapper $formMapper) { $formMapper ->add('name') ->add('seibetsu') ; } /** * @param DatagridMapper $datagridMapper */ protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $datagridMapper ->add('name') ->add('seibetsu') ; } /** * @param ListMapper $listMapper */ protected function configureListFields(ListMapper $listMapper) { $listMapper ->addIdentifier('name') ->add('seibetsu') ; } }
/** * @param FormMapper $formMapper */ protected function configureFormFields(FormMapper $formMapper) { $formMapper ->add('name') ->add('seibetsu', 'gender') ; } /** * @param DatagridMapper $datagridMapper */ protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $datagridMapper ->add('name') ->add('seibetsu', 'gender') ; }
専用TwigExtensionはサービスとして登録しておきます。// src/Acme/DemoBundle/Twig/Extension/GenderNameExtension.php class GenderNameExtension extends ¥Twig_Extension { public function getName() { return 'acme_demo_gender_name'; } public function getFunctions() { return array( 'gender_name' => new ¥Twig_Function_Method($this, 'getGenderName'), ); } /** * @param string $value * @return string */ public function getGenderName($value) { $list = array( 1 => '男', 2 => '女', 3 => 'その他', ); return isset($list[$value]) ? $list[$value] : '-'; } }
{# src/Acme/DemoBundle/Resources/views/sonata_customer_list_gender.html.twig #} {% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %} {% block field %} {% spaceless %} {% if value is empty %} {% else %} {{ gender_name(value) }} {% endif %} {% endspaceless %} {% endblock %}
/** * @param ListMapper $listMapper */ protected function configureListFields(ListMapper $listMapper) { $listMapper ->addIdentifier('name') ->add('seibetsu', 'string', array( 'template' => 'AcmeDemoBundle::sonata_customer_list_gender.html.twig', )) ; }
$this->get('session')->setFlash('notice', '更新しました。');
{% if app.session.hasFlash('data') %}
{# dataというflashがある場合の処理 #}
{% else %}
{# dataというflashがない場合の処理 #}
{% endif %}
{# hogeというflashを表示 #}
{{ app.session.flash('hoge') }}
$this->get('session')->getFlashBag()->set('notice', '更新しました。');
{% if app.session.flashBag.has('data') %}
{# dataというflashがある場合の処理 #}
{% else %}
{# dataというflashがない場合の処理 #}
{% endif %}
{# hogeというflashを表示 #}$this->get('session')->getFlashBag()->set('notice', '更新しました。');のように文字列を一つだけセットしてあっても、app.session.flashBag.get('notice')の中身は必ず配列になります。
{% for flashMessage in app.session.flashBag.get('hoge') %}
{{ flashMessage }}
{% endfor %}
昨日、大阪で開催されたPHPカンファレンス関西2013に参加してきました。
まず、久保さんの基調講演。
Pear::Net_UserAgent_Mobileの作者って久保さんだったのですね。多大にお世話になっておきながら知りませんでしたm(_ _)m
もつれた意図(糸とかけてる?とか不謹慎なこと考えた^p^)をほぐす、それぞれの意図を表すのに適した方法で。そして、これからのプログラムはもつれをなくす方向に進んでいる。示唆に富んだ内容で、出て来たキーワードだけでも一晩ではとても消化しきれてないので、じっくり考えて、これからのコードに生かしたいと思います。
セッション中はずっと4階後方のユーザー会ブースにいて、4階の発表を聞いていました。
楽天のエンジニア、Graham Weldonさんによるdebugging=自転車 profiling=バイクの例えはなるほどと思いましたし、スライドに時々登場する日本語がかわいくて和み、xhprofのコールグラフは「是非PNE3やSymfonyのプロジェクトで見てみたい!」と思ってしまいました。最適化のタイミングについても、かなり納得。
多言語パネルディスカッション。メモに一行「ステートレス」と^^;
後藤さんの発表、関心を分離する。私にとっては普段から触れている内容なのですが、HTMLとCSSという例えは、初めての人にも非常にわかりやすくてよかったと思います!分離のデメリットは道具(IDE)でカバーというのも素敵。
安藤さんのChefとVagrantは実は今、(主に仕事の都合上で)一番興味があるところでした。というのも、よりによって年度末にかけて連続してハードウェア障害に見舞われて、サーバー構築やり直しという非常事態を短期間に何度も経験するはめになったばかりで。まずは「挫折しねえ」とオススメされていた『入門chef solo』をkindleでポチってみることにします。
「まだ技術ブログを始めていないPHPerのあなたへ。」という題でLTをしました。最初は間に合ったらSymfony Componentネタをやりたいと考えていたのですが、朝からのセッションの流れを見ると、特定ライブラリのネタに走らなくて逆に正解だったかもしれません。
スライドです。
運がいいのか悪いのか抽選の結果一番手になってしまい、緊張MAXのまま発表したので、声が震えたり早口になったりと、お聞き苦しい所があったと思います。聴いてくださった皆さまありがとうございました。手加減してくださったドラ娘のお二人もありがとうございました…。
他の方のLT中は一人で脳内反省会をしていたので、あまり真面目に聞いてなかったのですが(スミマセン)、サーバーサイドにSymfony2を使ってるという話がさらりと出てきた時と、Yamlのお話が本題に入ったと思しきところで時間切れになった時が印象に残っています。YamlのLTされた方のスライドが公開されたらじっくり読みに行かないと。
4階がセッション会場から懇親会会場にお色直しする間、6階の会場でディスカッションをするというので移動しました。通称裏カンファレンス?
最初は挙手アンケートだったものの、途中から生々しいお金の話が飛び交うようになって、さすが大阪ww だが、それがいいw
突発開催&ust中継がなかったからこそ聞けた話も多く、現地に行った醍醐味を実感することができたイベントだったと思います。
ちょっと時系列から外れて開場〜撤収までほぼ一日中居座っていたユーザー会ブースの話。
「Symfonyって何ですか?」という方から、「symfony1.4でfacebook SDKの認証のやり方がわからない!」と質問しに来て下さった方まで、色々な人に来ていただいて楽しかったです!
個人的には、「symfony1系は改修案件で何度か触ったことが」という声を結構聞いた気がするので、symfony1系のドキュメントや小規模な勉強会的なものは需要あるかも…などと。
思いがけないご縁もあり、楽しくお喋りして時間があっという間でした。(馴れ馴れしくてすみません。。)
しんふぉにゃんステッカーは是非作りましょう。あと、次はステッカー整理用にクリップと輪ゴムを用意して行きたいと思います^^;
入り口近くのphpmentorsのテーブル(?)でまったりと語ってました。
他のテーブルに出張はしなかったのですがお話したいと思った方とは大体お話しできて満足。
日帰りなので、残念ながら懇親会LT1本目が終わって間もなく離脱しました。
名古屋からみると、大阪は東京より断然近いので、また機会があったらぜひ遠征したいと思いました。実行委員の皆様、お疲れ様でした&ありがとうございました!