michaeluno / admin-page-framework

Facilitates WordPress plugin and theme development.
http://admin-page-framework.michaeluno.jp/
Other
339 stars 71 forks source link

Calling Validation setFieldErrors from different Class gives error #253

Closed sudheer-ranga closed 8 years ago

sudheer-ranga commented 8 years ago

Hi,

I am loving this plugin. It is super awesome. I can create simple and too complex layout with this plugin.

But my class is getting bigger and bigger. So I decided to split it into separate classes. But I am facing some issue. Hope someone will help.

This is my class:

class APF_Demo extends AdminPageFramework {
    //Set up plugin, Add Tabs and Page Slugs etc.,

    //Validation
    public function validation_page_slug_tab_slug($new_arr, $ori_arr) {
        $valid = new APF_Demo_Validation($this);
        $valid->checkValidation($new_arr, $ori_arr);
    }
}

class APF_Demo_Validation {
    public function __construct($apf) {
        $this->apf = $apf;
    }

    public function checkValidation($new_arr, $ori_arr) {
        //Do validation
        $is_valid = false;
        $errors_array = [];

        //Getting error here
        if ( ! $is_valid ) {
                $apf->setFieldErrors( $errors_array );
            $apf->setSettingNotice( __( 'There was something wrong with your input.', 'admin-page-framework-tutorials' ) );
            return $ori_arr;
        }
        return $new_arr;
    }
}

I get error when calling setFieldErrors. What am I doing wrong. Can someone please explain.

Catchable fatal error: Argument 1 passed to AdminPageFramework_ModelFormSubmissionValidator__Filter::_getEmbeddedOptions() must be of the type array, null given

Please help!

michaeluno commented 8 years ago

Hi,

Maybe, change this

    public function validation_page_slug_tab_slug($new_arr, $ori_arr) {
        $valid = new APF_Demo_Validation($this);
        $valid->checkValidation($new_arr, $ori_arr);
    }

to

    public function validation_page_slug_tab_slug($new_arr, $ori_arr) {
        $valid = new APF_Demo_Validation($this);
        return $valid->checkValidation($new_arr, $ori_arr);
    }
sudheer-ranga commented 8 years ago

Awesome. Thanks for that :)

michaeluno commented 8 years ago

Glad it helped!

Another option is to use a filter.

class APF_Demo extends AdminPageFramework {
    //Set up plugin, Add Tabs and Page Slugs etc.,

    //Validation
    // public function validation_page_slug_tab_slug($new_arr, $ori_arr) {
       // $valid = new APF_Demo_Validation($this);
       // $valid->checkValidation($new_arr, $ori_arr);
    // }
}

class APF_Demo_Validation {
    public function __construct() {
        add_filter( 'validation_page_slug_tab_slug', array( $this, 'validate' ), 10, 4 );
    }

    public function validate($new_arr, $ori_arr, $oAdmin, $aSubmit) {
        //Do validation
        $is_valid = false;
        $errors_array = [];

        //Getting error here
        if ( ! $is_valid ) {
                $oAdmin->setFieldErrors( $errors_array );
            $oAdmin->setSettingNotice( __( 'There was something wrong with your input.', 'admin-page-framework-tutorials' ) );
            return $ori_arr;
        }
        return $new_arr;
    }
}
new APF_Demo_Validation;