instalar - laravel 5.0 php 7
Laravel 4-Problema que anula el método de salvar del modelo (3)
Estoy intentando anular el método save () de mi clase Post para que pueda validar algunos de los campos que se guardarán en el registro:
// User.php
<?php
class Post extends Eloquent
{
public function save()
{
// code before save
parent::save();
//code after save
}
}
Cuando trato de ejecutar este método en mi prueba de unidad obtengo el siguiente error:
..{"error":{"type":"ErrorException","message":"Declaration of Post::save() should be compatible with that of Illuminate//Database//Eloquent//Model::save()","file":"//var//www//laravel//app//models//Post.php","line":4}}
Cree la clase Model.php que extenderá en otros modelos de autovalidación
aplicación / modelos / Model.php
class Model extends Eloquent {
/**
* Error message bag
*
* @var Illuminate/Support/MessageBag
*/
protected $errors;
/**
* Validation rules
*
* @var Array
*/
protected static $rules = 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()
{
$v = $this->validator->make($this->attributes, static::$rules);
if ($v->passes())
{
return true;
}
$this->setErrors($v->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;
}
/**
* Inverse of wasSaved
*/
public function hasErrors()
{
return ! empty($this->errors);
}
}
Luego, ajusta tu modelo de publicación.
Además, necesita definir reglas de validación para este modelo.
aplicación / modelos / Post.php
class Post extends Model
{
// validation rules
protected static $rules = [
''name'' => ''required''
];
}
Método del controlador
Gracias a la clase Model, el modelo Post se valida automáticamente en cada llamada al método save()
public function store()
{
$post = new Post(Input::all());
if ($post->save())
{
return Redirect::route(''posts.index'');
}
return Redirect::back()->withInput()->withErrors($post->getErrors());
}
Esta respuesta se basa en gran medida en el paquete de Validación Laravel Model de Jeffrey Way para Laravel 4.
Todos los créditos a este hombre!
Si desea sobrescribir el método save (), debe ser idéntico al método save () en Model:
<?php
public function save(array $options = array()) {}
Y; También puede enganchar la llamada a save () con los eventos modelo: http://laravel.com/docs/eloquent#model-events
Cómo anular Model::save()
en Laravel 4.1
public function save(array $options = array())
{
parent::save($options);
}