LoginSignup
7
8

More than 5 years have passed since last update.

EC-CUBE3でフォームにMasterDataを利用したSelectBoxとかの作り方

Last updated at Posted at 2015-04-14

性別や職業、都道府系といったMasterData(mtb_XXX)を利用したフォームを作成する時は多い。
この実装方法が、2.13系と、3系では、当然結構違う。

細かな仕組みは省略して、どう書かなきゃいけないかだけメモしておく。

例として、会員登録のFormに追加した時を上げている。

3.0のソースで以下の箇所を見ながらだと理解しやすいかと

- src/Eccube/Controller/conEntryContoroller.php
- src/Eccube/Form/Type/.php
- src/Eccube/ServiceProvider/EccubeServiceProvider.php
- src/Eccube/View/Entry/
.twig
- src/Eccube/Entity/Master/*

入力フォームでマスターデータを用いたセレクトボックスの作り方

1. Custom Form Field Typeを作る

例として職業のセレクトボックス(JobType.php)を作る。
すでに同様の実装をおこなっているsrc/Eccube/Form/Type/PrefType.phpをコピーして、PrefType.phpと同じディレクトリに、JobType.phpとする。

利用するMasterDataと紐づくEntityにあわせて以下の箇所を書き換える

- 'class' => 'Eccube\Entity\Master\Pref'
+ 'class' => 'Eccube\Entity\Master\Job'

getNameも修正


public function getName()
    {
-        return 'pref';
+        return 'job';
    }

2. 作成したCustom Form Field TypeをServiceProviderに登録

src/Eccube/ServiceProvider/EccubeServiceProvider.php の以下の辺りに追記


$app['form.types'] = $app->share($app->extend('form.types', function ($types) use ($app) {
            $types[] = new \Eccube\Form\Type\NameType();
            $types[] = new \Eccube\Form\Type\TelType();
+           $types[] = new \Eccube\Form\Type\JobType();

3. CustomerType.php から利用する

 public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $app = $this->app;

        $builder
            ->add('name', 'name', array(
                'options' => array(
                    'attr' => array(
                        'maxlength' => 50,
                    ),
                    'constraints' => array(
                        new Assert\NotBlank(),
                    ),
                ),
            ))
~~~~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~
+           ->add('job', 'job', array(
+                'required' => false,
+           ))
~~~~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~

4. テンプレートにフォームを記載

後はTwigのテンプレートファイル(src/Eccube/View/Entry/index.twig)に以下のように書く

                 <tr>
                    <th>職業</th>
                    <td>
                        {{ form_widget(form.job) }}<br />
                        {{ form_errors(form.job) }}
                    </td>
                </tr>

とくに問題がなければ、これだけでFormが表示される。

確認画面等での見せ方

上でフォームが作れていたら表示はもっと簡単。

2.13までのイメージだと以下のような記載をしていたものを

$arrJobs[$form.job_id]

3.0からは編集と同様に

{{ form_widget(form.job) }}

これだけで表示される。実に簡単。

もしこれでちゃんと表示されないならもろもろ別途確認

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8