Custom Validation

Introduction

Validate your form based on a third party condition, like an external api response.

Extend Plugin

Create your own plugin or use this as template: https://github.com/skydiver/october-plugin-formsextender

First, create a new partial on your theme.

This file will be used to display your custom error.

Let's call ajax_error.htm

<div class="alert alert-danger alert-dismissible" role="alert">
    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    <strong>{{ customError }}</strong>
</div>

Now we need to add our custom logic to thrown an exception and display our custom error:

Replace your boot method with:

public function boot() {
    \Event::listen('martin.forms.beforeSaveRecord', function (&$formdata, $component) {

        // replace with your own logic
        $somethingWentWrong = true;

        if ($somethingWentWrong) {
            $controller = \App::make(\Cms\Classes\Controller::class);
            throw new \AjaxException([
                '#genericForm_forms_flash' => $controller->renderPartial(
                    '_ajax_error.htm',
                    ['customError' => 'Something went wrong!']
                )
            ]);
        }

    });
}

Notes:

  • genericForm is your component alias
  • underscore on _ajax_error.htm it's not an error, file name needs to be prefixed using _
  • second argument of renderPartial it's an array with custom values passed to the partial