内容へ移動
fl8 Wiki
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
現在位置:
Dokuwiki.fl8.jp
»
11_php
»
02_framework
»
05 FormServiceProvider
トレース:
11_php:02_framework:05_formserviceprovider
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== 05 FormServiceProvider ====== フォームが簡単に作成できる。 ・controler <code> <?php require_once __DIR__.'/vendor/autoload.php'; use Silex\Provider\FormServiceProvider; $app = new Silex\Application(); $app['debug'] = true; $app->register(new FormServiceProvider()); $app->register(new Silex\Provider\TranslationServiceProvider(), array( 'locale_fallback' => 'en', )); /* Twig Provider 登録 ---------------- */ $app->register(new Silex\Provider\TwigServiceProvider(), array( 'twig.path' => __DIR__ . '/views', 'twig.options' => array( 'autoescape' => true, ), )); $app->match('/form', function() use($app) { $data = array( 'name' => 'Your name', 'email' => 'Your email', ); $form = $app['form.factory']->createBuilder('form', $data) ->add('name') ->add('email') ->add('gender', 'choice', array( 'choices' => array(1 => 'male', 2 => 'female'), 'expanded' => true, )) ->getForm(); if ('POST' == $app['request']->getMethod()) { $form->bind($app['request']); if ($form->isValid()) { $data = $form->getData(); // do something with the data // redirect somewhere //return $app->redirect('...'); return print_r($data); } } // display the form return $app['twig']->render('form.html.twig', array('form' => $form->createView())); }); $app->run(); </code> ・form.html.twig <code> <html> <body> フォームテスト <form action="#" method="post"> {{ form_widget(form) }} <input type="submit" name="submit" /> </form> </body> </html> </code> ===== エラー ===== <code console> Twig_Error_Syntax: The filter "trans" does not exist in "form_div_layout.html.twig" at line 73 </code> https://github.com/fabpot/Silex/issues/271 TranslationServiceProviderを登録しないと、上記のエラーが出ます。 ===== createFormBuilderで指定できるもの一覧 ===== [[http://symfony.com/doc/current/book/forms.html#built-in-field-types|Built-in Field Types]] ===== class, placeholderの指定方法 ===== PHP側で行う場合 <code console> ->add('username', 'text', array( 'attr' => array( 'placeholder'=>'User Name', 'class'=>'span_name', ) ) ) </code> Twig側で行う場合 <code console> {{ form_widget(form.password, { 'attr': { 'class': 'span_name' , 'placeholder' : 'User Name'} }) }} </code> PHP側で行う場合 <code> ->add('username', 'text', array( 'label_attr' => array( 'class' => 'control-label' ) ) ) </code> Twig側で行う場合 <code> {{ form_label(form.username, null, { 'label_attr': { 'class': 'control-label'} } ) }} </code> ===== csrf対策でトークン ===== Twig テンプレートのなかで {{ form_widget(form.comment) }} のように個別のプロパティを指定すると、 isValid メソッドが常に false を返してしまいます。 レンダリングされていないすべてのフィールドをレンダリングします。 <code> {{ form_label(form.username) }} {{ form_errors(form.username) }} {{ form_widget(form.username}} {{ form_label(form.password) }} {{ form_errors(form.password) }} {{ form_widget(form.password, { 'attr': { 'class': 'span2', 'placeholder' : 'Password'} }) }} {{ form_rest(form) }} </code> もしくは、csrf対策のトークンを設定しない場合は、下記のように「'csrf_protection' => false)」してあげる。 <code> $form = $app['form.factory']->createBuilder('form', $data, array('csrf_protection' => false) ) </code>
11_php/02_framework/05_formserviceprovider.txt
· 最終更新: 2014/07/03 04:38 by
matsui
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ