> プラグイン > プラグイン側のフォーム項目追加について |
プラグイン
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ikemoto |
投稿日時: 2016/6/6 6:26
対応状況: −−−
|
一人前 登録日: 2015/10/2 居住地: 投稿: 79 |
プラグイン側のフォーム項目追加について お世話になっております。
現在プラグインにて、商品登録画面に項目を追加しています。 onAdminProductEditInitialize のイベントにて $b = $event->getArgument('builder'); $b->add('test_product','text',array('mapped'=>false)); とし、この内容を画面に表示しています。 入力された内容を onAdminProductEditComplete のイベントにて $p = $event->getArgument('Product'); $pe = $p->getProductExt(); $pe->setTestProduct($form['test_product']->getdata()); $app['orm.em']->persist($pe); $app['orm.em']->flush(); …とすることでプラグイン側で追加した ProductExtエンティティにセットして登録することが出来ました。 その後、関連商品プラグインを導入したところ、 そちら側の登録処理の部分で行っている $form->isValid() (→app/Plugin/RelatedProduct/Event.phpの91行目) でエラーが発生し、その原因がこちらで追加した項目の箇所です。 エラー内容が フィールドグループに追加のフィールドを含んではなりません。 "{{ extra_fields }}" => "test_product" …となっています。 このエラーを回避するにはどう対応すれば上手く行くでしょうか?? |
DELIGHT |
投稿日時: 2016/6/6 10:15
対応状況: −−−
|
仙人 登録日: 2010/2/3 居住地: 熊本県・九州・長野県・関東甲信越 投稿: 572 |
Re: プラグイン側のフォーム項目追加について Event.phpの81行目
にてフォームを初期化し、そのまま90行目の
でバリデーションを行なっています。 このフォームにはtest_productフィールドは存在しませんが、送信されたデータの中にtest_productが存在するため今回のエラーが発生しています。 https://github.com/EC-CUBE/ec-cube/blob/3.0.10/src/Eccube/Controller/Admin/Product/ProductController.php#L264 この辺りを参考にして、関連商品プラグイン側でもadmin.product.edit.initializeイベントを発生させてフォームにtest_productを追加するのがいいと思います。 以下余談、3.0.9のプラグイン機構の変更は後方互換性はありますが、3.0.9未満[も]対応するプラグインと3.0.9以降専用プラグインの共存は難しいものになっていますね…。
|
ikemoto |
投稿日時: 2016/8/5 20:27
対応状況: −−−
|
一人前 登録日: 2015/10/2 居住地: 投稿: 79 |
allow_extra_fields のオプション付与の方法 ご回答いただいていたのに長い間お礼も申し上げずにすみませんでした。
しばらくEC-CUBEの作業をする余裕が全くなかったのでここを除くことも、ろくにできていませんでした。 また作業に着手できるようになりましたので、この問題を何とかしようといろいろやってみたのですが…。 おっしゃるとおり、 こちらが追加したデータがリクエストのパラメーターに入っているが、 関連商品プラグイン側では既存のパラメータ+自分のプラグイン側で追加したデータについてバリデートをしているため、 こちらのプラグインから追加したデータは異物と認識(そりゃそうですよね…) というわけで、これが理由で 関連商品プラグイン側のEvent.php registerRelatedProduct内 $form = $builder->getForm(); $form->handleRequest($request); if ($form->isValid()) { … の箇所にて引っかかってしまうわけで… 今のところ $form->handleRequest($request); の箇所をコメントアウトして、その代わりに リクエストパラメータとフォームパラメータをarray_intersect_keyにて両方にパラメータがある分だけに絞り込み。 これでこちらが追加した分のパラメータがひとまず消滅するのでextra fieldについての問題は解消。 ただ、そうすると一緒にトークンまでなくなってしまうので後付けでリクエストパラメータから拾って追加。 それをフォームにバインドし、あとの$form->isValid()に流す… という力技で乗り切りましたが、できれば自分のプラグインならともかく、 ほかの人の作った方のプラグインに手は入れたくなかった…バージョンアップの時にそこの箇所手作業で直さにゃいかんし…。 その他に考えたのが、フォームビルダでallow_extra_fieldsオプションを設定して extra fieldを許容してしまうという方法ですが、これって何処で指定すればよいのでしょうか… サンプルを見てもこれって何処で設定できるの??でしたので。 もしご存じの方がいらしたらご教授ください。 ただ、セキュリティ的には良くないと思うので使うかどうかは悩みどころではあるのですが。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |