EC-CUBE 3.0.15
商品規格登録ページを参考に、商品の在庫情報のみを更新するページを作成しています。
ProductClassController を参考に StockController を作成したのですが、登録ボタンを押すと「フィールドグループに追加のフィールドを含んではなりません。」というフォームエラーが発生してしまいます。
上記の在庫情報以外にフォームを追加していませんし、イベントも発行していないためプラグインも呼ばれていないはずです。
このエラーが出る原因わかりますでしょうか?
ProductStockType を新規に作成し、在庫数と在庫無制限チェックボックスを定義しました。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
// 商品規格情報
->add('stock', 'number', array(
'label' => '在庫数',
'required' => false,
'constraints' => array(
new Assert\Regex(array(
'pattern' => "/^\d+$/u",
'message' => 'form.type.numeric.invalid'
)),
),
))
;
$transformer = new DataTransformer\IntegerToBooleanTransformer();
$builder
->add($builder->create('stock_unlimited', 'checkbox', array(
'label' => '無制限',
'value' => '1',
'required' => false,
))->addModelTransformer($transformer));
}
StockController 表示時
$ProductClasses = $app['eccube.repository.product_class']->findBy(array(
'del_flg' => \Eccube\Common\Constant::DISABLED,
'Product' => $Product,
));
/* @var FormBuilder $builder */
$builder = $app['form.factory']->createBuilder();
$builder
->add('product_classes', 'collection', array(
'type' => 'admin_product_stock',
'data' => $ProductClasses,
));
$productClassForm = $builder->getForm();
stock_edit.twig
<form role="form" name="form1" id="form1" method="post" action="{{ url('admin_product_stock_update', { id : Product.id}) }}">
{{ form_widget(classForm._token) }}
{% for product_stock_form in classForm.product_classes %}
{{ form_widget(product_stock_form.stock) }}
{{ form_errors(product_stock_form.stock) }}
{{ form_widget(product_stock_form.stock_unlimited) }}
{{ form_errors(product_stock_form.stock_unlimited) }}
{% endfor %}
</form>
StockController 更新時
/* @var FormBuilder $builder */
$builder = $app['form.factory']->createBuilder();
$builder
->add('product_classes', 'collection', array(
'type' => 'admin_product_stock',
));
$form = $builder->getForm();
$form->handleRequest($request);
dump($form); // ★フォームエラーが発生している
if ($form->isSubmitted()) {
foreach ($form->get('product_classes') as $formData) {
// ★ここの処理に来ない
}
}
handleRequest() 後に dump($form); してみたときのフォームエラーの詳細は次のとおりです。
-message: "フィールドグループに追加のフィールドを含んではなりません。"
#messageTemplate: "This form should not contain extra fields."
#messageParameters: array:1 [▼
"{{ extra_fields }}" => "0", "1"
]