Jaspaul/eloquent-model-validation

View on GitHub
readme.md

Summary

Maintainability
Test Coverage
# Eloquent Model Validation

[![Build
Status](https://travis-ci.org/Jaspaul/eloquent-model-validation.svg?branch=master)](https://travis-ci.org/Jaspaul/eloquent-model-validation)
[![Coverage
Status](https://coveralls.io/repos/github/Jaspaul/eloquent-model-validation/badge.svg?branch=master)](https://coveralls.io/github/Jaspaul/eloquent-model-validation?branch=master) [![Code Climate](https://codeclimate.com/github/Jaspaul/eloquent-model-validation/badges/gpa.svg)](https://codeclimate.com/github/Jaspaul/eloquent-model-validation)

This package is an experiment in introducing the concept of [active record validations](http://guides.rubyonrails.org/active_record_validations.html) to Laravel.

## Install

Via Composer

``` bash
$ composer require jaspaul/eloquent-model-validation
```

## Requirements

The following versions of PHP are supported by this version.

* PHP 7.2
* PHP 7.3
* PHP 7.4

## Configuration

#### Option 1

Extend the validation model instead of Eloquent\Model.

```php
<?php

use Jaspaul\EloquentModelValidation\Model;

class Foo extends Model
{
    ...
}
```

#### Option 2

Override `Eloquent` in `config/app.php`

```php
'Eloquent' => Jaspaul\EloquentModelValidation\Model::class,
```

Now you can just do the following:


```php
<?php

class Foo extends Eloquent
{
    ...
}
```

#### Option 3

Update your classes to implement Validatable using the Validates trait provided. You can use this option if extending the provided model isn't an option in your project.

```php
<?php

namespace Jaspaul\EloquentModelValidation;

use Illuminate\Database\Eloquent\Model as Base;
use Jaspaul\EloquentModelValidation\Traits\Validates;
use Jaspaul\EloquentModelValidation\Contracts\Validatable;

abstract class Model extends Base implements Validatable
{
    use Validates;

    /**
     * Returns the data to validate.
     *
     * @return array
     */
    protected function getData() : array
    {
        return $this->getAttributes();
    }
}
```

## Usage

```php
<?php

use Jaspaul\EloquentModelValidation\Model;

class User extends Model
{
    protected function getRules() : array
    {
        return [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
        ];
    }
}

```

Now if you were storing your model:

```php
public function store()
{
    $user = new User(Input::all());

    try {
        $user->save();
        return $user;
    } catch (\Illuminate\Validation\ValidationException $exception) {
        // You can handle exception, access the errors $exception->getErrors(),
        // or let it bubble up and let the Laravel Exception handler deal with it.

        throw $exception;
    }
}
```