yooouuri
yooouuri

Reputation: 2658

Append errors with custom error

How can i append the $errors->all() array? Like a custom error message... Searched on the internet but i did not find anything.

In my view:

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

My controller:

<?php

namespace App\Http\Controllers\Admin;

use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;

class UserController extends Controller
{
    /**
     * @param Request $request
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function login(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|email|exists:users,email',
            'password' => 'required',
        ]);

        if ($user = Auth::attempt([
            'email' => $request->email,
            'password' => $request->password
        ])) {
            /** @var $user User */
            if ($user->isAdmin()) {
                return redirect()
                    ->route('admin.dashboard');
            }
        }

        // wrong email or password

        return redirect('/admin/login');
    }
}

Upvotes: 0

Views: 1248

Answers (4)

Mustafa Poya
Mustafa Poya

Reputation: 3027

You can add to errors while using Validator Facade for validation:

$validator = Validator::make(
    [
        'email' => $request->email,
        'password' => $request->password
    ],
    [
        'email' => 'required|email|exists:users,email',
        'password' => 'required',
    ]
);
$validator->errors()->add('custom-error', 'my custom error');

Upvotes: 0

Jahid Mahmud
Jahid Mahmud

Reputation: 1136

You should write this

<?php
namespace App\Http\Controllers\Admin;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;

class UserController extends Controller
{
    /**
     * @param Request $request
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function login(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|email|exists:users,email',
            'password' => 'required',
        ]);

        if ($user = Auth::attempt([
            'email' => $request->email,
            'password' => $request->password
        ])) {
            /** @var $user User */
            if ($user->isAdmin()) {
                return redirect()
                    ->route('admin.dashboard');
            }else {
              return redirect('/admin/login')->>with('errors', 'Sorry!!! something went wrong. please try again.');
          }
        }else {
            return redirect('/admin/login')->>with('errors', 'Sorry!!! something went wrong. please try again.');
        }

        // wrong email or password

        return redirect('/admin/login');
    }
}

Upvotes: 0

Alireza Hoseinzadeh
Alireza Hoseinzadeh

Reputation: 606

custom error message :

 return redirect('/admin/login')->withErrors([
   'error_key' => 'error_message'
]);

and if you want flush old inputs :

return redirect('/admin/login')->withInput()->withErrors([
     'error_key' => 'error_message'
]);

Upvotes: 0

Ravi Kumar
Ravi Kumar

Reputation: 11

First use Validator facade for validation and then

  $inputs = $request->all();
  $rules = array(
      'email' => 'required|email|exists:users,email',
      'password' => 'required',
  );
  $messages = array();
  $validator = Validator::make($inputs,$rules,$messages);
  $validator->after(function($validator) {
    //do some stuff
    $validator->errors()->add('error', 'error messgae');
  })

Upvotes: 1

Related Questions