edvinasme / eloquent-zf2
此包已被废弃且不再维护。未建议替代包。
Zend Framework 2 的 Eloquent ORM 模块
此包尚未发布版本,信息有限。
README
Zend Framework 2 的 Eloquent ORM 模块。
特性
Eloquent Model和Capsule支持直接使用。- 表单验证器:
RecordExists和NoRecordExists(相当于Zend\Validator\Db\RecordExists和Zend\Validator\Db\noRecordExists)。 - 认证适配器(
Abstract实现支持 AuthenticationService 和两个实现CallbackCheckAdapter和CredentialTreatmentAdapter)。
计划特性
- 多连接配置支持。
- 缓存支持。
- 分页支持。
- 日志记录支持。
- 会话处理器(尚未确定是否需要)。
- 迁移支持(通过 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\RecordExists 或 EloquentZF2\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();
}