Eccube4 の商品の価格 Eccube\Form\Type\PriceType では0以上の数値のみが設定できる。
マイナス価格はエラーとなる。
マイナス価格をOKとするには、formのextensionで価格フィールドの設定を上書きすればよい。
・オプション「'accept_minus' => true」とし、
・値チェックのminを 0 でなくマイナス値にする。
app\Customize\Form\Extension\Admin\ProductClassFormExtension.php
namespace Customize\Form\Extension\Admin; use Doctrine\ORM\EntityManagerInterface; use Eccube\Common\EccubeConfig; use Eccube\Form\Type\Admin\ProductClassType; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Eccube\Form\Type\PriceType; use Symfony\Component\Validator\Constraints as Assert; /** * Class ProductClassFormExtension . */ class ProductClassFormExtension extends AbstractTypeExtension { /** * @var EccubeConfig */ private $eccubeConfig; /** * @var EntityManagerInterface */ private $entityManager; public function __construct(EccubeConfig $eccubeConfig, EntityManagerInterface $entityManager) { $this->eccubeConfig = $eccubeConfig; $this->entityManager = $entityManager; } /** * RelatedCollectionExtension. * * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder // マイナス価格を許容する ->add('price02', PriceType::class, [ 'required' => true, 'accept_minus' => true, 'constraints' => [ new Assert\Length(['min' => (-1) * $this->eccubeConfig['eccube_price_len'], 'max' => $this->eccubeConfig['eccube_price_len']]), ], ]) ->add('price01', PriceType::class, [ 'required' => false, 'accept_minus' => true, 'constraints' => [ new Assert\Length(['min' => (-1) * $this->eccubeConfig['eccube_price_len'], 'max' => $this->eccubeConfig['eccube_price_len']]), ], ]) ; } /** * product admin form name. * * @return string */ public function getExtendedType() { return ProductClassType::class; } /** * product admin form name. * * @return string[] */ public static function getExtendedTypes() { return [ProductClassType::class]; } }
追記:管理画面の方で、1か所だけ本体プログラムを修正する必要があった。どうしても回避できず・・・