バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

プラグイン > 開発について > 商品詳細ページでお気に入り追加の時はバリデーションを実行しないようにしたい

開発について

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2017/2/1 10:55
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
商品詳細ページでお気に入り追加の時はバリデーションを実行しないようにしたい
EC-CUBE3の商品詳細ページにフォームを追加するため、AddCartTypeを拡張したAddCartTypeExtensionクラスを作成しています。

buildForm()の中でバリデーションを定義すると正常に動作したのですが、お気に入り追加した時にもバリデーションが実行されてしまいます。


class AddCartTypeExtension extends AbstractTypeExtension
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('plg_test_id', 'text', array(
            'constraints' => array(
                new Assert\NotBlank()
            )
        ));
    }
    public function getExtendedType()
    {
        return 'add_cart';
    }
}


これを解決するため、AddCartType.phpを参考にバリデーション関数をコールバックするように変更したところ、お気に入り追加でバリデーションが実行されないようにできたのですが、今度は基幹処理で次のエラーが出るようになりました。

The identifier id is missing for a query of Eccube\Entity\ProductClass
at CartService->addProduct(null, '1') in ProductController.php line 272


class AddCartTypeExtension extends AbstractTypeExtension
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('plg_test_id', 'text', array());
    }
    public function getExtendedType()
    {
        return 'add_cart';
    }
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'constraints' => array(
                new Assert\Callback(array($this, 'validate_text')),
            ),
        ));
    }
    public function validate_text($data, ExecutionContext $context)
    {
        if ($data['mode'] !== 'add_favorite') {
            $context->validateValue($data['plg_test_id'], array(
                new Assert\NotBlank(),
            ), '[plg_test_id]');
        }
    }
}


setDefaultOptions()の定義で基幹処理に影響してしまったのだと思います。
どのようにすれば、お気に入り追加の時にバリデーションが実行されないようにできるのでしょうか?
h_tanaka
投稿日時: 2017/2/20 16:01
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
Re: 商品詳細ページでお気に入り追加の時はバリデーションを実行しないようにしたい
少しわかりました。
$resolver->setDefaults()で、既存のAddCartTypeのdefaultを上書きしてしまっているようです。
このため、規格未選択でカートボタンを追加するときにAddCartTypeのバリデーションが呼ばれず、保存処理でproduct_class_idがnullのためにエラーになっているようです。
OptionsResolverInterfaceのsetDefaults()を呼ぶ以外に拡張したFormTypeのバリデーションをコールする方法がわかれば解決しそうです。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
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.