2727use LitEmoji \LitEmoji ;
2828use yii \base \InvalidConfigException ;
2929use yii \behaviors \AttributeTypecastBehavior ;
30+ use yii \validators \Validator ;
3031
3132/**
3233 * Line Item model representing a line item on an order.
@@ -445,7 +446,8 @@ public function defineRules(): array
445446 $ purchasable = Craft::$ app ->getElements ()->getElementById ($ this ->purchasableId );
446447 if ($ purchasable && !empty ($ purchasableRules = $ purchasable ->getLineItemRules ($ this ))) {
447448 foreach ($ purchasableRules as $ rule ) {
448- $ rules [] = $ this ->_normalizePurchasableRule ($ rule );
449+ $ this ->_normalizePurchasableRule ($ rule );
450+ $ rules [] = $ rule ;
449451 }
450452 }
451453 }
@@ -456,19 +458,17 @@ public function defineRules(): array
456458 /**
457459 * Normalizes a purchasable’s validation rule.
458460 *
459- * @param mixed $rule
460- * @return mixed
461+ * @param Validator|array $rule
461462 */
462- private function _normalizePurchasableRule ($ rule )
463+ private function _normalizePurchasableRule (& $ rule )
463464 {
464- if (isset ($ rule [1 ]) && $ rule [1 ] instanceof \Closure) {
465+ if (is_array ($ rule ) && isset ($ rule [1 ]) && $ rule [1 ] instanceof \Closure) {
466+ // Wrap the closure in another one, so InlineValidator doesn’t bind it to the model
465467 $ method = $ rule [1 ];
466- $ rule [1 ] = function ($ attribute , $ params , $ validator , $ current ) use ($ method ) {
468+ $ rule [1 ] = function ($ attribute , $ params , $ validator , $ current ) use ($ method ) {
467469 $ method ($ attribute , $ params , $ validator , $ current );
468470 };
469471 }
470-
471- return $ rule ;
472472 }
473473
474474 /**
0 commit comments