tuscan88
tuscan88

Reputation: 5829

Custom validation rule in Laravel 5 registrar

I am using the default Laravel 5 user registration stuff which uses the registrar.php file app/Services/Registrar.php

I need to do a custom validation rule to check that there is some stuff stored in the session otherwise the user shouldn't be able to register.

I have tried creating my own validation rule but it doesn't seem to be getting called. What am I doing wrong?

<?php namespace App\Services;

use App\User;
use Event;
use Validator;
use Illuminate\Contracts\Auth\Registrar as RegistrarContract;
use App\Events\UserRegistered;
use Session;

class Registrar implements RegistrarContract {

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    public function validator(array $data)
    {
        Validator::extend('required_images', function($attribute, $value, $parameters)
        {
            die("rule called");
        });

        return Validator::make($data, [
            'first_name' => 'required_images|required|max:255',
            'last_name' => 'required|max:255',
            'discount_code' => 'max:255',
            'register_email' =>       'required|email|confirmed|max:255|unique:users,email',
            'register_password' => 'required|confirmed|min:6|max:60'
        ]);
    }
}

Also I have just attached the rule required_images to the first_name field but since it doesn't actually relate to a field in the registration form is there a better way to trigger it?

Upvotes: 1

Views: 2669

Answers (1)

lukasgeiter
lukasgeiter

Reputation: 152980

If you look closely at the validator() function you can see that there's actually a return statement:

public function validator(array $data)
{
    return Validator::make($data, [
//   ^^^
        'first_name' => 'required_images|required|max:255',
        'last_name' => 'required|max:255',
//  ...

That means your rule never get's registered. You should do it before instead:

public function validator(array $data)
{
    Validator::extend('required_images', function($attribute, $value, $parameters)
    {
        die("rule called");
    });

    return Validator::make($data, [
        'first_name' => 'required_images|required|max:255',
        'last_name' => 'required|max:255',
        'discount_code' => 'max:255',
        'register_email' =>       'required|email|confirmed|max:255|unique:users,email',
        'register_password' => 'required|confirmed|min:6|max:60'
    ]);
}

Upvotes: 2

Related Questions