ユーザ用ツール

サイト用ツール


11_php:02_framework:05_formserviceprovider

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
11_php:02_framework:05_formserviceprovider [2013/06/21 17:10]
matsui [class, placeholderの指定方法]
11_php:02_framework:05_formserviceprovider [2014/07/03 13:38] (現在)
matsui 11_php:フレームワーク:05_formserviceprovider renamed to 11_php:02_framework:05_formserviceprovider
ライン 1: ライン 1:
 +====== 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 13:38 by matsui

Yesterday:379 Today:512 Total:01170