I ended up using the Ad Hoc Validation method of Yii2, here is the link for documentation: https://www.yiiframework.com/doc/guide/2.0/en/input-validation#ad-hoc-validation My code for validation: <br> Plugin.php class Plugin extends \craft\base\Plugin { public function init() { parent::init(); $this->setComponents([ 'form1Validator' => Form1Validator::class, ... ]); Event::on( SaveController::class, SaveController::EVENT_BEFORE_SAVE_ENTRY, function(SaveEvent $event) { try { $response = null; switch($event->entry->section->handle) { case 'form1': $response = Plugin::getInstance()->form1Validator->validate($event->entry); break; ... } } if(!isset($response) || !$response['success']){ $event->isValid = false; $event->entry->addErrors($response['errors']); } } catch (\Exception $e) { $event->isValid = false; $event->entry->addError('exception', $e->getMessage()); return; } } ); } } Form1Validator.php class Form1Validator { public function validate(Entry $entry) { $model = new DynamicModel( [ 'formGender' => $entry->formGender, 'formFirstName' => $entry->formFirstName, 'formLastName' => $entry->formLastName, 'formEmailAddress' => $entry->formEmailAddress, 'formPhoneNumber' => $entry->formPhoneNumber, ] ); if(!$model ->addRule(['formGender', 'formFirstName', 'formLastName', 'formEmailAddress'], 'required') ->addRule('formGender', 'in', ['range' => ['male', 'female']]) ->addRule('formEmailAddress', 'email') ->addRule('formPhoneNumber', 'match', ['pattern' => '/^[0-9]+$/']) ->validate() ) { return [ 'success' => false, 'errors' => $model->getErrors(), ]; } return [ 'success' => true, 'errors' => [], ]; } }