バージョン選択

フォーラム

メニュー

オンライン状況

59 人のユーザが現在オンラインです。 (43 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 58
numsptm もっと...

サイト内検索

プラグイン > 開発について > 拡張フォームの項目が遷移後に取得できない

開発について

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2017/6/6 12:23
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
拡張フォームの項目が遷移後に取得できない
EC-CUBE 3.0.14
管理画面の商品マスター検索フォームに拡張項目を追加したのですが、検索ボタンクリック後に値を取得できません。

src/Eccube/Controller/Admin/Product/ProductController.php
において、
$searchData = $searchForm->getData();
var_dump($searchData);
とすると、 $searchData 内に拡張項目 plg_test_id のキーも値も存在していません。

【出力結果】
array (size=7)
'id' => null
'category_id' => null
'status' =>
object(Doctrine\Common\Collections\ArrayCollection)[2935]
private 'elements' =>
array (size=0)
empty
'create_date_start' => null
'create_date_end' => null
'update_date_start' => null
'update_date_end' => null

ただ、
$searchData = $searchForm->get('plg_test_id')->getData();
var_dump($searchData);
とすると、拡張項目の選択された値を取得することができます。

【出力結果】
int 4

$searchData = $searchForm->getData();
にて、拡張項目を含めたすべてのフォームを取得するにはどうすればよいでしょうか?

以下、拡張項目の設定ソースです。
app/Plugin/Test/Form/Extension/SearchProductTypeExtension.php
class SearchProductTypeExtension extends AbstractTypeExtension
{
    public $app;

    public function __construct($app)
    {
        $this->app = $app;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $app = $this->app;
        if (!$app->isGranted('ROLE_ADMIN')) {
            return;
        }

        // フォームを追加するためにイベントリスナーを追加
       $builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) use ($app) {

            ...

            // 選択肢追加
            $form = $event->getForm();
            $form->add('plg_test_id', 'choice', array(
                'label' => 'テスト',
                'mapped' => false,
                'required' => false,
                'choices' => $choices,
                'empty_value' => '選択してください',
            ));
       });
    }

    public function getExtendedType()
    {
        return 'admin_search_product';
    }
}


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

nyorai
投稿日時: 2017/6/6 13:07
対応状況: −−−
仙人
登録日: 2015/8/21
居住地:
投稿: 302
Re: 拡張フォームの項目が遷移後に取得できない
$searchForm->getData(); では取得できるのは、mapped => true の項目だけです。
$searchForm['plg...']->getData() のようにキー名を指定してgetData()しないと値は取得できません。

SearchProductTypeの場合は、エンティティにマッピングするわけではないので、mapped => trueにすればよいですよ。

h_tanaka
投稿日時: 2017/6/6 13:42
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
Re: 拡張フォームの項目が遷移後に取得できない
nyoraiさん
見事、解決しました!

こちらで mapped が何かを質問させてもらっていましたが、理解できていなかったようです。。
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=19091&forum=17&post_id=82419#forumpost82419

とりあえず、エンティティに定義があれば mapped => false 、なければ mapped => true を指定するというものだと思っておきます。


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

nyorai
投稿日時: 2017/6/6 16:14
対応状況: −−−
仙人
登録日: 2015/8/21
居住地:
投稿: 302
Re: 拡張フォームの項目が遷移後に取得できない
うまくいったようでよかったですー

FormTypeは入力値をよしなに変換してくれる便利なクラスですが、オプションもそれなりに多いので少しずつ把握していければいいのかなと思います。
h_tanaka
投稿日時: 2017/6/6 16:17
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
Re: 拡張フォームの項目が遷移後に取得できない
そうですね、Symfonyも使いこなせれば便利なのでしょうが、学ばないといけないことが多くて敷居が高いです。


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,282名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.