/** * @param DocumentInterface $document * @param Validator $validator * * @return array */ public function getValidationRules(DocumentInterface $document, Validator $validator) { $rules = []; if ($this->isRequired()) { $rules[] = 'required'; } if ($this->isUnique()) { $table = $this->getSection()->getSectionTableName(); if (is_null($uniqueRule = $this->getSetting('unique_rule'))) { $uniqueRule = 'unique::table,:field,:id,:id_field'; } $replace = [':table' => $table, ':field' => $this->getDBKey(), ':id' => $document->exists ? $document->getId() : 'NULL', ':id_field' => $document->getKeyName()]; foreach ($validator->getData() as $field => $value) { $replace['@' . $field] = is_array($value) ? implode(',', $value) : $value; } $uniqueRule = strtr($uniqueRule, $replace); $uniqueRule = preg_replace('/(\\,\\@[a-z_-]+)/', ',NULL', $uniqueRule); $rules[] = $uniqueRule; } if (!is_null($customRules = $this->getSetting('validation_rules'))) { $rules += explode('|', $customRules); } return $rules; }
/** * @param DocumentInterface $document */ public function onRelatedDocumentDeleted(DocumentInterface $document) { $document->{$this->getRelatedField()->getRelationName()}()->detach($document->getId()); }