2

Zend Framework 2を使用して、コントローラーのフォームにDBRecordExistsバリデーターを追加しようとしています。ただし、「データベースアダプタがありません」という例外が継続的に発生します。この質問への回答を試しましたが、うまくいかなかったようです。誰かが私が間違っていることを知っていますか?

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',
                ),
            ),
    ),
);
4

2 に答える 2

3

次の行を試して、コントローラーで現在の DB アダプターを取得します。

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

また

このリンクを参照してください。

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

このリンクを使用すると、Application/Module.php で DB アダプターを設定でき、システムのどこでも使用できます。

これが助けになることを願っています。

于 2013-07-30T08:53:52.063 に答える
0

問題は、RecordExists バリデーターが DB アダプターにアクセスする必要があることです。

コントローラ:

$recordValidator = new RecordExists(array(
    'table' => 'users',
    'field' => 'email'
));
// Need to pass to the validator..
$recordValidator->setAdapter($this->adapter);

明らかに、DI を使用して RecrodExists バリデーターをインスタンス化し、DB アダプターを自動的に挿入する方が良いでしょう。

DI 構成:

'Zend\Validator\Db\RecordExists' => array(
     'parameters' => array(
          'adapter'  => 'Zend\Db\Adapter\Adapter',
      ),
 ),
于 2013-02-27T13:18:52.410 に答える