edvinasme/eloquent-zf2

此包已被废弃且不再维护。未建议替代包。

Zend Framework 2 的 Eloquent ORM 模块

维护者

详细信息

github.com/edvinasme/eloquent-zf2

安装: 291

依赖者: 0

建议者: 0

安全: 0

星标: 7

关注者: 4

分支: 1

类型:zf-module

此包尚未发布版本,信息有限。


README

Zend Framework 2 的 Eloquent ORM 模块。

特性

  • Eloquent ModelCapsule 支持直接使用。
  • 表单验证器:RecordExistsNoRecordExists(相当于 Zend\Validator\Db\RecordExistsZend\Validator\Db\noRecordExists)。
  • 认证适配器(Abstract 实现支持 AuthenticationService 和两个实现 CallbackCheckAdapterCredentialTreatmentAdapter)。

计划特性

  • 多连接配置支持。
  • 缓存支持。
  • 分页支持。
  • 日志记录支持。
  • 会话处理器(尚未确定是否需要)。
  • 迁移支持(通过 ZFTool)。

安装

$ composer require edvinasme/eloquent-zf2:dev-master

配置

  • EloquentZF2 添加到 config/application.config.php 中的 modules 数组
  • 现在您可以通过 SM 获取 EloquentZF2:$sm->get('EloquentZF2') 这将为您提供访问 Eloquent Query Builder、Schema Builder 等。(有关更多信息,请参阅 https://laravel.net.cn/docs/database
  • vendor/edvinasme/eloquent-zf2/config/database.eloquent.config.php.dist 复制到 config/autoload/database.eloquent.config.php 并添加数据库凭据。

模型

您的模型应扩展 Illuminate\Database\Eloquent\Model,例如

    <?php
    namespace Album\Model;

    // skipping some code here

    use Illuminate\Database\Eloquent\Model as EloquentZF2Model;

    class Album extends EloquentZF2Model implements InputFilterAwareInterface
    {

验证器

当填充 InputFilter(通常在模型中的 getInputFilter() 方法中)时,您可以使用 EloquentZF2\Validator\RecordExistsEloquentZF2\Validator\NoRecordExists 验证器,这些验证器将检查数据库中的记录存在性并根据相应字段进行验证。

以下选项键受支持

  • table => 要验证的数据库表
  • schema => 要检查匹配的架构(数据库)
  • field => 要检查匹配的字段
  • exclude => 一个可选的 WHERE 子句或要排除的查询字段/值对
  • connection => 一个可选的数据库连接名称以使用

以下示例检查表 users,字段 login 与表单输入的值,同时排除记录 login = test@example.org

$inputFilter->add($factory->createInput(array(
              'name'     => 'email    ',
                'required' => true,
                'validators' => array(
                    array(
                        'name'    => 'EloquentZF2\Validator\noRecordExists',
                        'options' => array(
                            'table' => 'users',
                            'field' => 'login',
                            'exclude' => array(
                                'field' => 'login',
                                'value' => 'text@example.org',
                                ),
                            ),
                        ),
                    ),
                )
            )
        );

认证

为了帮助您以与 ZendDB 类似的方式实现 EloquentZF2 的认证,提供了一个抽象认证适配器(Authentication\\Adapter\EloquentDb.php)和两个实现

  • Authentication\Adapter\CallbackCheckAdapter.php - 允许您提供自定义回调函数。这对于您想要使用 bcrypt 等检查凭据的情况很有用。如果没有提供回调函数,则默认为简单的 ($a == $b) 比较。以下是一个示例。
  • Authentication\Adapter\CredentialTreatmentAdapter.php - 允许您提供 SQL 语句、函数或过程(例如 MD5(?), PASSWORD(?) 等),在检查凭据之前应用于给定的凭据。默认为 '?',相当于 (passwordField = password) 比较。以下是一个示例。

这两个适配器都按照与Zend的认证适配器非常相似的方式实现,并且与认证服务兼容。有关更多信息,请参阅Zend认证服务文档

CallbackCheckAdapter.php 示例

这是使用Bcrypt(Zend实现)的示例。这通常会在控制器的登录操作中使用

/* SomeController.php */

// use CallbackCheckAdapter as AuthAdapter
use EloquentZF2\Authentication\Adapter\CallbackCheckAdapter as AuthAdapter;

// ... controller code skipped ...

public function loginAction() {

    // ... skipping validation and form code ...

    // define custom callback function (bcrypt)
    $callback = function($a, $b) {
        $bcrypt = new \Zend\Crypt\Password\Bcrypt(array('cost' => '14'));
        return $bcrypt->verify($b, $a);
    };

    // init auth adapter
    $authAdapter = new AuthAdapter('default', 'users', 'login', 'password', $callback);

    // set auth credentials (assuming it was posted by form)
    $authAdapter
        ->setIdentity($request->getPost('login'))
        ->setCredential($request->getPost('password'));

    // authenticate
    $authResult = $authAdapter->authenticate();

CredentialTreatmentAdapter.php 示例

这是使用MD5(?)的示例。这通常会在控制器的登录操作中使用

/* SomeController.php */

// use CallbackCheckAdapter as AuthAdapter
use EloquentZF2\Authentication\Adapter\CredentialTreatmentAdapter as AuthAdapter;

// ... controller code skipped ...

public function loginAction() {

    // ... skipping validation and form code ...
    $callback = 'MD5(?)';

    // init auth adapter
    $authAdapter = new AuthAdapter('default', 'users', 'login', 'password', $callback);

    // set auth credentials (assuming it was posted by from)
    $authAdapter
        ->setIdentity($request->getPost('login'))
        ->setCredential($request->getPost('password'));

    // authenticate
    $authResult = $authAdapter->authenticate();
}