7
7
8
8
use Magento \Catalog \Api \ProductRepositoryInterface ;
9
9
use Magento \Framework \App \Filesystem \DirectoryList ;
10
-
10
+ use Magento \ Framework \ Exception \ LocalizedException ;
11
11
/**
12
12
* @api
13
13
* Abstract model for product type implementation
@@ -561,6 +561,7 @@ public function getSpecifyOptionMessage()
561
561
* @param \Magento\Catalog\Model\Product $product
562
562
* @param string $processMode
563
563
* @return array
564
+ * @throws LocalizedException
564
565
*/
565
566
protected function _prepareOptions (\Magento \Framework \DataObject $ buyRequest , $ product , $ processMode )
566
567
{
@@ -571,20 +572,29 @@ protected function _prepareOptions(\Magento\Framework\DataObject $buyRequest, $p
571
572
$ options = $ product ->getOptions ();
572
573
}
573
574
if ($ options !== null ) {
575
+ $ result = [];
574
576
foreach ($ options as $ option ) {
575
577
/* @var $option \Magento\Catalog\Model\Product\Option */
576
- $ group = $ option ->groupFactory ($ option ->getType ())
577
- ->setOption ($ option )
578
- ->setProduct ($ product )
579
- ->setRequest ($ buyRequest )
580
- ->setProcessMode ($ processMode )
581
- ->validateUserValue ($ buyRequest ->getOptions ());
578
+ try {
579
+ $ group = $ option ->groupFactory ($ option ->getType ())
580
+ ->setOption ($ option )
581
+ ->setProduct ($ product )
582
+ ->setRequest ($ buyRequest )
583
+ ->setProcessMode ($ processMode )
584
+ ->validateUserValue ($ buyRequest ->getOptions ());
585
+ } catch (\Exception $ e ) {
586
+ $ result [] = $ e ->getMessage ();
587
+ continue ;
588
+ }
582
589
583
590
$ preparedValue = $ group ->prepareForCart ();
584
591
if ($ preparedValue !== null ) {
585
592
$ transport ->options [$ option ->getId ()] = $ preparedValue ;
586
593
}
587
594
}
595
+ if (count ($ result ) > 0 ) {
596
+ throw new LocalizedException (__ (implode ("\n" , $ result )));
597
+ }
588
598
}
589
599
590
600
$ eventName = sprintf ('catalog_product_type_prepare_%s_options ' , $ processMode );
0 commit comments