controller - ZF2 - 访问 Controller 中的数据库适配器

标签 controller zend-framework2 adapter validation

使用 Zend Framework 2,我尝试将 DBRecordExists 验证器添加到 Controller 中的表单中。但是,我不断收到“不存在数据库适配器”的异常。我尝试了this question的答案,但它似乎不起作用。有谁知道我做错了什么?

AuthController.php

use Zend\Db\Adapter\Adapter;
use Zend\Db\Adapter\AdapterAwareInterface;

class AuthController extends AbstractActionController implements AdapterAwareInterface
{
    /**
     * @var Zend\Db\Adapter\Adapter
     */
    protected $adapter;

    /**
     * Input email address to retrieve a lost password.
     */
    public function lostpasswordAction()
    {
        // Create form
        $form = new UserForm();

        // Perform validation
        $request = $this->getRequest();
        if ($request->isPost()) {
            $user = new User();
            $form->setInputFilter($user->getInputFilter());
            $form->setData($request->getPost());
            $recordValidator = new RecordExists(
                array(
                    'table' => 'users',
                    'field' => 'email'
            ));
            $form->getInputFilter()->get('email')->getValidatorChain()->addValidator($recordValidator);

            //code    
        }
    }

    public function setDbAdapter(Adapter $adapter)
    {
        $this->adapter = $adapter;
    }
}

local.config.php

<?php
return array(
    'di' => array(
        'instance' => array(
        'Zend\Db\Adapter\Adapter' => array(
                'parameters' => array(
                    'driver' => 'Zend\Db\Adapter\Driver\Pdo\Pdo',
                ),
            ),
            'Zend\Db\Adapter\Driver\Pdo\Pdo' => array(
                'parameters' => array(
                    'connection' => 'Zend\Db\Adapter\Driver\Pdo\Connection',
                ),
            ),
            'Zend\Db\Adapter\Driver\Pdo\Connection' => array(
                'parameters' => array(
                    'connectionInfo' => array(
                        'dsn'            => "mysql:dbname=owp;host=localhost",
                        'username'       => 'redacted',
                        'password'       => 'redacted',
                        'driver_options' => array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''),
                    ),
                ),
            ),
        ),
    ),
);

module.config.php

<?php
return array(
    //other config code

    'di' => array(
            'Graduate\Controller\AuthController' => array(
                'parameters' => array(
                    'adapter'  => 'Zend\Db\Adapter\Adapter',
                ),
            ),
    ),
);

最佳答案

尝试使用此行获取 Controller 中当前的数据库适配器:

 $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter'); 

引用此链接,

https://stackoverflow.com/a/17942232/2190889

借助此链接,您可以在 Application/Module.php 中设置数据库适配器,并且可以在系统中的任何位置使用。

我希望这会有所帮助。

关于controller - ZF2 - 访问 Controller 中的数据库适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15112281/

相关文章:

navigation - Zend Framework 2 导航子子菜单

php - Zend Framework 2 - 符合缓存的服务工厂

android - 如何在自定义适配器类中发送服务器请求后更改 Listview 按钮名称?

PHP MVC : Do i really need a Controller?

javascript - AngularJS 在 ng-click 上更改范围变量

javascript - AngularJS 模型和服务注入(inject)错误

rest - GrailsView解析jsonApi发布数据-Grails团队是否在jsonViews中执行通用解决方案?

php - Zend Framework 2 TableGateway 返回空结果集

首选项中的 Android 帐户同步间隔更改

java - Android - 适配器 NullPointerException