1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

EC-CUBE4 EntityTypeのデータを使って分岐したい

Last updated at Posted at 2023-02-28

はじめに

この記事は開発初心者の筆者が、開発時にやりたかったことをどう実現したかを書いています。

初心者ゆえ、至らない点や誤った情報を書いているかもしれませんが、その際はコメント等でご指摘頂けたら幸いです。

やりたいこと

formTypeにEntityタイプで追加した要素の各フィールドを取得して条件分岐したい。
本記事では、下記を例に書いていこうかと思います。

例)受注登録で支払方法に応じてあれこれしたい

環境

・EC-CUBE 4.2.0
・Symfony 5.4.12
・PHP 7.4.26

書き方

受注登録画面に使われているOrderTypeに、下記のようにして支払方法のセレクトボックスが追加されている。
src/Eccube/Form/Type/Admin/OrderType.php

OrderType.php
('Payment', EntityType::class, [
    'requred' => false,
    'class' => Payment::class,
    'choise_label' => function(Payment $Payment){
        return $Payment->isVisible()
            ? $Payment->getMethod()
            : $Payment->getMethod().trans('admin.common.hidden_label');
    },
    'query_builder' => function($er){
        return $er->createQueryBuilder('p')
            ->orderBy('p.visible', 'DESC')
            ->addOrderBy('p.sort_no', 'ASC');
    },
    'constraints' => [
        new Assert\NotBlank(),
    ],
])

  
例えば、支払方法が「代金引換」の時に何か処理をしたい場合は、twig上では下記のように記述する。

.twig
{% if form.Payment.vars.data.Method == '代金引換' %}
    // ここに処理
{% endif %}

  
Entityのフィールドを取得する記述

form.Payment.vars.data.{Entityで宣言したフィールド変数名}

  
こうすることで、コントローラからわざわざEntityを返したりしなくても、formだけで解決することが出来た。

備考

「*.vars.data.*」とは別に「*.vars.value」があるが、これはセレクトボックスのセレクト値を取得することができる。
今回の例でいうと、dtb_paymentに登録されているidがセレクト値になっているので「代金引換」の場合は、"4"の値が取得できる。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?