magniloquent/magniloquent

此包已被弃用且不再维护。作者建议使用 dwightwatson/validating 包。

Laravel 4 的 Eloquent 的自验证模型

dev-master 2014-08-11 20:02 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:25:37 UTC


README

Laravel 4 的 Eloquent 的自验证模型。

基于 Max Ehsan 开发的优秀 Ardent 包。

此包深受 Ardent 启发。我想做一些大的改动,因此我认为最好是从一个新的包开始,而不是从根本上改变 Ardent 验证数据的方式。如果你想要扩展 Eloquent 的功能,也应该查看 Ardent!

Magniloquent 从 Cribbb 中提取出来。

##安装 将 magniloquent/magniloquent 添加到 composer.json 中的依赖项

{
  "require": {
    "magniloquent/magniloquent": "dev-master"
  }
}

使用 composer update 更新你的包或使用 composer install 安装。

##入门 Magniloquent 扩展了 Eloquent 而不是替换它,因此要使用 Magniloquent,你需要像这样扩展你的模型

use Magniloquent\Magniloquent\Magniloquent;

class User extends Magniloquent{}

Eloquent 的所有功能仍然可用,因此你可以继续像平常一样与你的模型交互。如果你的某个模型不需要验证,你不必使用 Magniloquent,你可以自由混合使用。

##验证规则 对于每个模型,你需要设置验证规则以控制可以插入数据库的数据类型。通常你可以在任何地方做这件事,但为了使用 Magniloquent,你应该将你的规则保留在模型中。

Magniloquent 使用 Laravel 的出色 验证 类,因此定义你的规则非常简单。

你的验证规则仅作为静态参数存储,并分别存储在 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 允许您自定义验证下每个字段的显示名称。只需添加一个返回数组的 niceNames() 类方法,其中键是字段名称,值是它们的显示名称。下面是一个示例。

protected function niceNames()
{
    return array(
        'email'     => 'email address'
    );
}

现在,每当有电子邮件验证问题时,用户收到的消息将是“电子邮件地址”而不是“电子邮件”。您还可以选择使用 trans() 或一些自定义逻辑代码来返回本地化或计算后的显示名称。

注意:在旧版本中,此功能作为 $nicenames 类属性实现。保留了对此的向后兼容性,但鼓励您在新模型中使用 niceNames()。

##控制器示例 下面是一个 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 的 MessageBag

许可证

MIT 许可证 (MIT)

版权所有 (c) 2014 Philip Brown 和 Alex Sears

以下对本软件和相关文档文件(以下简称“软件”)的副本的任何人,免费获得以下权限:在不限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供方提供软件的人做上述事情,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵权性保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他原因,无论是否与软件或其使用或其他交易有关。