Muhammad Hamza Younas
Muhammad Hamza Younas

Reputation: 508

laravel - how to create custom message bag, errors array

i am trying to make custom message bag but unable to make, i want to use the $errors

$errorMsgs = [];
    if (Model::where('name', '=', Input::get('name'))->exists()) {
       $errorMsgs['company_name'] = 'name already exists';

    }else if (Model::where('age', '=', Input::get('age'))->exists()) {
        $errorMsgs['primary_phone'] = 'age no already exists';

    }else if (Model::where('mobile', '=', Input::get('mobile'))->exists()) {
        $errorMsgs['primary_mobile'] = 'mobile already exists';

    }else if (Model::where('pri_email', '=', Input::get('primary_email'))->exists()) {
        $errorMsgs['primary_email'] = 'Primary email already exists';

    }else{
// success 


        }

Actually i want to use errors foreach

 @if ($errors->any())
               <div class="alert alert-danger">
                   <ul>
                       @foreach ($errors->all() as $error)
                           <li>{{ $error }}</li>
                       @endforeach
                   </ul>
               </div>
           @endif

Upvotes: 0

Views: 5284

Answers (1)

ggdx
ggdx

Reputation: 3064

I cannot see from your question why the out-the-box unique Validation is not being used, it's for seemingly exactly this purpose. Anyway, the gist of the manual way would be something like...

// Controller
public function WhatEverController()
{
    $data = [];

    $errorMsgs = [];
    if (Model::where('name', '=', Input::get('name'))->exists()) {
       $errorMsgs['company_name'] = 'name already exists';

    }
    if (Model::where('age', '=', Input::get('age'))->exists()) {
        $errorMsgs['primary_phone'] = 'age no already exists';

    }
    if (Model::where('mobile', '=', Input::get('mobile'))->exists()) {
        $errorMsgs['primary_mobile'] = 'mobile already exists';

    }
    if (Model::where('pri_email', '=', Input::get('primary_email'))->exists()) {
        $errorMsgs['primary_email'] = 'Primary email already exists';
    }

    if(count($errorMsgs)) {
        return  redirect()->back()->withErrors($errorMsgs);
    }

    return view('someview');
}


// Blade
@if(count($errors))
<div class="alert alert-danger">
    <ul>
        @foreach ($errors as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
</div>
@endif

One more detail, with your if/elseif use, it will always stop going through on the first match therefore always a maximum of one $errorMsg. I have changed it to a number of if statements as this will provide the opportunity to obtain an array of errors.

Upvotes: 3

Related Questions