quickjob / database
Requires
- php: >=5.4.0
- illuminate/support: 4.1.*
Requires (Dev)
- fzaninotto/faker: ~1.3
- mockery/mockery: *@stable
- phpunit/phpunit: 3.7.*@dev
This package is auto-updated.
Last update: 2024-09-29 04:08:42 UTC
README
Laravel 4 的 Eloquent 的自验证模型。
灵感来源于 magniloquent 包。
安装
将 quickjob/database
添加到 composer.json
中的需求中
{
"require": {
"quickjob/database": "dev-master"
}
}
使用 composer update
更新您的包或使用 composer install
安装。
入门
Magniloquent 扩展了 Eloquent 而不是替换它,因此要使用 Magniloquent,您需要像这样扩展您的模型
use Quickjob\Database\Model;
class User extends Magniloquent{}
所有 Eloquent 的功能仍然可用,因此您可以像平时一样继续与您的模型交互。如果您的某个模型不需要验证,您不需要使用 Magniloquent,您可以自由混合使用。
验证规则
对于每个模型,您需要设置验证规则,以控制可以插入数据库的数据类型。通常您可以在任何地方这样做,但为了使用 Magniloquent,您应该在模型内部保持您的规则。
Magniloquent 使用 Laravel 的出色 Validation 类,因此定义您的规则非常简单。
您的验证规则仅存储为静态参数,并分为 save
、create
和 update
数组
/**
* Validation rules
*/
public static $rules = array(
"save" => array(
'username' => 'required|min:4',
'email' => 'required|email',
'password' => 'required|min:8'
),
"create" => array(
'username' => 'unique:users',
'email' => 'unique:users',
'password' => 'confirmed',
'password_confirmation' => 'required|min:8'
),
"update" => array()
);
save
数组是适用于模型更改时的验证规则。而 create
和 update
数组仅在相应的方法上添加。
所以,在上面的例子中,当创建用户时,用户名应该是唯一的。当用户更新其信息中的任何信息时,唯一性验证测试不会应用。
注意:Magniloquent 能够在验证唯一值时正确忽略当前对象。
更简单的关联
在 Laravel 中定义关系可能会占用模型中的大量空间。这使得阅读和维护您的模型变得更加困难。幸运的是,Magniloquent 使得定义关系变得轻而易举。将一个 $relationships
多维数组添加到您的模型中。在它里面,定义将要调用的关系的名称作为键,值是一个参数数组。第一个参数是关系的类型。其余的是传递给该函数的参数。下面是一个例子
class Athlete extends Magniloquent {
protected static $relationships = array(
'trophies' => array('hasMany', 'Trophy'),
'team' => array('belongsTo', 'Team', 'team_id'),
'sports' => array('belongsToMany', 'Sport', 'athletes_sports', 'athlete_id', 'sport_id')
);
}
自定义清理
Magniloquent 将自动清理以下划线 _
开头或以 _confirmation
结尾的任何属性。如果您想清理额外的字段,请添加一个 protected static $purgeable
数组,其键是要清理的属性。下面是一个例子
class Account extends Magniloquent {
protected static $purgeable = ['ssn'];
}
每次此模型保存时,都会在保存对象之前从对象中删除 $ssn
属性。这允许您运行以下代码而无需担心将不必要的数据插入到数据库中。
$account->save(Input::all());
自定义显示名称
Magniloquent 允许您自定义每个验证字段的可显示名称。只需添加一个 protected $niceNames
数组进行静态声明,或设置 niceName()
方法以添加动态值,如翻译 'email' => trans('labels.email')
您的模型,其中键是字段名称,值是它们的显示名称。下面是一个例子。
protected $niceNames = array(
'email' => 'email address'
);
或
protected function niceNames() {
return array(
'email' => trans('labels.email')
);
};
现在,当有电子邮件验证问题时,用户将看到“电子邮件地址”而不是“电子邮件”的消息。
控制器示例
以下是 store
方法的示例
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
$s = User::create(Input::all());
if($s->isSaved())
{
return Redirect::route('users.index')
->with('flash', 'The new user has been created');
}
return Redirect::route('users.create')
->withInput()
->withErrors($s->errors());
}
首先 使用 Laravel 的 create 方法并传递 Input::all()
。将返回值保存到变量中。
第二步 使用 saved()
方法确定模型是否已保存并修正。
第三步 使用 errors()
方法返回验证错误。
返回的错误使用 Laravel 的 消息包。