我是zf1开发人员。我开始zf2。我正在创建一个身份验证模块。我在doc
中创建了一个Auth类<?php
namespace Application\Model;
use Zend\Authentication\Adapter\AdapterInterface;
use Zend\Authentication\Adapter\DbTable as AuthAdapter;
class Myauth implements AdapterInterface {
/**
* Sets username and password for authentication
*
* @return void
*/
public function __construct($username, $password) {
// Configure the instance with constructor parameters...
$authAdapter = new AuthAdapter($dbAdapter,
'users',
'username',
'password'
);
$authAdapter
->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password');
$result = $authAdapter->authenticate();
if (!$result->isValid()) {
// Authentication failed; print the reasons why
foreach ($result->getMessages() as $message) {
echo "$message\n";
}
} else {
// Authentication succeeded
// $result->getIdentity() === $username
}
}
}
问题1:如何在这里获取$ dbAdapter? 问题2:这是创建auth模块的正确方法吗?
答案 0 :(得分:4)
我有几件事要说:
<强> 1。关于数据库适配器
这个link向您展示了如何配置数据库适配器。
在config / autoload / global.php中:
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=zf2tutorial;host=localhost',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter'
=> 'Zend\Db\Adapter\AdapterServiceFactory',
),
),
);
在config / autoload / local.php中:
return array(
'db' => array(
'username' => 'YOUR USERNAME HERE',
'password' => 'YOUR PASSWORD HERE',
),
)
现在,从ServiceLocatorAware类,您可以将数据库适配器作为
$dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter');
<强> 2。关于创建身份验证
老兄,为什么重新发明方轮?如上所述here,ZfcUser构建为Zend Framework 2应用程序的很大比例的基础。
几乎所有内容都可以自定义here。许多模块都可用,例如ScnSocialAuth,它们依赖于ZfcUser并且非常棒。
答案 1 :(得分:1)
与在ZF 2中一样,Models不是ServiceLocatorAware类,因此您无法在Ojjwal Ojha的答案中使用该解决方案。
您可以: 1.通过调用:
在Controller中获取dbAdapter
$dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter');
在创建模型时将dbAdapter传递给模型:
$model = new Model($dbAdapter)
;
在模型中编写初始化函数。