wscore/datamapper

该包最新版本(0.1.0)没有可用的许可证信息。

数据映射器。

0.1.0 2013-09-03 07:52 UTC

This package is auto-updated.

Last update: 2024-08-28 16:42:09 UTC


README

一个简单的数据映射组件。

实体

实体是一个类,大致代表数据库表的记录。

该类不是纯的;需要扩展EntityAbstract并设置modelName才能在此组件中使用。例如

namespace Tasks\Entity;

class Task extends EntityAbstract
{
    const STATUS_ACTIVE = '1';
    const STATUS_DONE   = '9';

    public static $_modelName = '\App\Tasks\Model\Tasks';
    public $task_id = null;
    public $memo = '';
    public $status = self::STATUS_ACTIVE;
}

属性应该定义为public,以便PDO填充值。

公共静态变量$_modelName应引用处理此实体的模型类。

模型

模型类(们)决定实体对象如何

  • 保存到数据库中,
  • 在html表单中表示,
  • 验证其值。

模型由几个类组成

  • WScore\DataMapper\Model是所有其他模型的master控制器模型。
  • WScore\DataMapper\Model\Persistence管理如何访问数据库层。
  • WScore\DataMapper\Model\Presentation管理html表单表示以及验证。
  • WScore\DataMapper\Model\Property是一个隐藏对象,用于控制持久化和表示模型中每个属性的属性。
class Tasks extends Model
{
    /** @var string     name of database table     */
    protected $table = 'task';

    /** @var string     name of primary key        */
    protected $id_name = 'task_id';

    public function __construct()
    {
        parent::__construct();
        $csv = file_get_contents( __DIR__ . '/tasks.csv' );
        $this->property->prepare( $csv );
    }
}

所有模型都是PHP代码。

可以重写/篡改/重写任何模型以适应需求。

实体属性的属性由CSV定义。

待办事项:表示模型简单地返回有关html表单和验证的信息。也许模型应该负责构建表单并执行验证。

角色

为实体提供使用特定方法(称为交互)的简单包装。

以下示例展示了如何将post数据加载到实体中,验证值并将其保存到数据库中。

$task = $this->em->fetch( 'Tasks\Entity\Task' );
$role = $this->role->applyDataIO( $task );
$role->load( $_POST );
if( $role->validate() ) {
    $active = $this->role->applyActive( $role );
    $active->save();
}

关系

定义实体如何与其他实体相关。

可用的关系有:HasOne、Joined和JoinBy。

某些关系,如isJoined,需要定义模型。

属性注解

在PHP或CSV中写下以下注解。

  • 数据库列名。

  • 标题

    列的可读名称。

  • 类型

    列的类型;字符串、数字、char(即仅ascii代码)、datetime、date、time、created_at(即datetime)、updated_at(即datetime)等。

  • dbDef

    数据库定义。实际上没有使用。

  • notNull

    是否为null。实际上没有使用。

  • 默认

    指定用于验证的默认值。也许用于表示html作为默认值。

  • required

    用于验证。在表示html表单时将用于标记为必需。

  • protected

    表示该列不会进行批量分配。

  • presentedAs

    覆盖表示html的类型。指定如textarea、radio、check等类型。

  • 样式

    表单/标签样式。

  • validateAs

    覆盖验证规则类型的覆盖。指定如tel、mail等类型。

  • 模式

    正则表达式