Search code examples
phpoctobercmsoctobercms-backendoctobercms-plugins

OctoberCMS plugin show all the validations at once


I am using Builder plugin to create plugins and did field validations in my model in one of my plugins which works fine.

Let's say I have a validation something like this in one my plugin call it as Team.

Model File: technobrave\team\models\Team.php

<?php namespace Technobrave\Team\Models;

use Model;

/**
 * Model
 */
class Team extends Model
{
    use \October\Rain\Database\Traits\Validation;

    /*
     * Validation
     */
    public $rules = [
    'name' => 'required|unique:technobrave_team_',
    'photo' => 'required',    
    'description'=>'max:1000',
    'position' => 'required',            
    'phone' => 'required',            
    'mobile' => 'required',            
    'email' => 'required|email|unique:technobrave_team_',            
    'website' => 'url',            


    ];


    public $customMessages = [
                'name.required' => 'Please enter team member name',
                'name.unique' => 'This team member name already exists',
                'photo.required' => 'Please select team member photo',
                'description.max' => 'Please enter maximum 1000 characters for description',              
                'position.required' => 'Please enter team member position',                
                'phone.required' => 'Please enter team member phone number',  
                'mobile.required' => 'Please enter team member mobile number',  
                'email.required' => 'Please enter team member email address',  
                'email.email' => 'Please enter valid team member email address', 
                'email.unique' => 'This email address already exists', 
                'website.url' => 'Please enter valid team member url', 




    ];

}

This works absolutely fine, I am able to see the validations, but they are coming one after another. Instead I want them to come up all at once. For all the fields.

Is this possible ? How can I accomplish this ?

Thanks


Solution

  • Ok Guys, Here is how I resolved this issue.

    Simply go to your plugin which you want to work on and open its Plugin.php file and add following lines of code.

    Plugin.php

    public function boot()
        {
            Event::listen('backend.page.beforeDisplay', function($controller, $action, $params) {
          /* Here you can put your css file wherever you want  .. I put in my current theme's directory */
          $controller->addCss('/themes/your_current_theme_folder_name/assets/css/general.css'); 
            }); 
        }
    

    Done forget to add use Event; before you add your class code in this file.

    Open general.css file and put below code.

    .flash-message.fade.in {
    white-space: pre;
    } 
    

    Next Open plugin's model file and put below code.

    Team.php (Model File)

    public $throwOnValidation = false;
    
    
        public function beforeValidate()
        {
            static $called = false;
            if (!$called) 
            {
                $called = true;
                if (!$this->validate()) 
                {
    
                    throw new \October\Rain\Exception\ValidationException([
                        'Errors' => collect($this->validationErrors)->reduce(function (
                        $msg,
                        $error
                        ) {
                            return $msg . $error[0] . "\r\n"; 
                            })
                    ]);
                }
            }
        }
    

    Hope this helps.