quickjob/database

此包的最新版本(v1.0)没有可用的许可证信息。

v1.0 2014-05-22 20:04 UTC

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 类,因此定义您的规则非常简单。

您的验证规则仅存储为静态参数,并分为 savecreateupdate 数组

/**
 * 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 数组是适用于模型更改时的验证规则。而 createupdate 数组仅在相应的方法上添加。

所以,在上面的例子中,当创建用户时,用户名应该是唯一的。当用户更新其信息中的任何信息时,唯一性验证测试不会应用。

注意: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 的 消息包