Skip to content

Instantly share code, notes, and snippets.

@JonoB
Created September 20, 2013 13:49
Show Gist options
  • Star 16 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save JonoB/6637861 to your computer and use it in GitHub Desktop.
Save JonoB/6637861 to your computer and use it in GitHub Desktop.
Laravel Base Model
<?php namespace Tmb;
use Illuminate\Database\Eloquent\Model as Eloquent;
use Illuminate\Validation\Validator;
class BaseModel extends Eloquent
{
/**
* Error message bag
*
* @var Illuminate\Support\MessageBag
*/
protected $errors;
/**
* Validation rules
*
* @var Array
*/
protected static $rules = array();
/**
* Custom error messages
*
* @var array
*/
protected static $messages = array();
/**
* Validator instance
*
* @var Illuminate\Validation\Validators
*/
protected $validator;
public function __construct(array $attributes = array(), Validator $validator = null)
{
parent::__construct($attributes);
$this->validator = $validator ?: \App::make('validator');
}
/**
* Listen for save event
*/
protected static function boot()
{
parent::boot();
static::saving(function($model)
{
return $model->validate();
});
}
/**
* Validates current attributes against rules
*/
public function validate()
{
$replace = ($this->getKey() > 0) ? $this->getKey() : '';
foreach (static::$rules as $key => $rule)
{
static::$rules[$key] = str_replace(':id', $replace, $rule);
}
$validator = $this->validator->make($this->attributes, static::$rules, static::$messages);
if ($validator->passes()) return true;
$this->setErrors($validator->messages());
return false;
}
/**
* Set error message bag
*
* @var Illuminate\Support\MessageBag
*/
protected function setErrors($errors)
{
$this->errors = $errors;
}
/**
* Retrieve error message bag
*/
public function getErrors()
{
return $this->errors;
}
/**
* Return if there are any errors
*
* @return bool
*/
public function hasErrors()
{
return ! empty($this->errors);
}
}
@pdcmoreira
Copy link

This breaks on inserts for me because my rule is checked also on inserts and when the model is new and therefore has no id, it passes an empty string as the id to search for.

I've replaced $replace = ($this->getKey() > 0) ? $this->getKey() : ''; with $replace = ($this->getKey() > 0) ? $this->getKey() : 0;. Seems to fix the problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment