我有许多不同的位置插入和更新我的数据库的方式,我希望能够在插入数据库之前trim()
用户输入。我知道在模型中我可以做类似下面的事情,但我不想为每个领域做这件事。有没有办法设置适用于所有字段的通用setter?
示例:
public function setSomFieldAttribute($value) {
return $this->attributes['some_field'] = trim($value);
}
答案 0 :(得分:6)
您可能会覆盖这些方法:
<?php
class Post extends Eloquent {
protected function getAttributeValue($key)
{
$value = parent::getAttributeValue($key);
return is_string($value) ? trim($value) : $value;
}
public function setAttribute($key, $value)
{
parent::setAttribute($key, $value);
if (is_string($value))
{
$this->attributes[$key] = trim($value);
}
}
}
你永远不应该再获得未经修改的价值。
编辑:
在这里测试过,我没有空格:
Route::any('test', ['as' => 'test', function()
{
$d = Post::find(2);
$d->title_en = " Markdown Example ";
dd($d);
}]);
答案 1 :(得分:5)
使用Model Events
进行此操作,并在创建或更新模型时在每个字段上运行trim
。
class Model extends \Eloquent {
...
public static function boot() {
parent::boot();
static::saving(function($model){
$model->some_field = trim($model->some_field);
});
}
...
}
使用示例:
$model = new Model;
$model->some_field = ' foobar ';
$model->save();
// $model->some_field should now be trimmed