在zend框架2中的模型中获取数据库适配器

时间:2014-02-17 13:15:15

标签: php zend-framework zend-framework2

我是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模块的正确方法吗?

2 个答案:

答案 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。关于创建身份验证

老兄,为什么重新发明方轮?如上所述hereZfcUser构建为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');

  1. 在创建模型时将dbAdapter传递给模型:

      

    $model = new Model($dbAdapter);

  2. 在模型中编写初始化函数。