0

Zend 認証については、
http://framework.zend.com/manual/2.0/en/modules/zend.authentication.adapter.dbtable.html#advanced-usage-by-exampleの簡単な手順を使用しました。

これが私のコードです:

$adapter = $sm->get('adapter');
$authAdapter = new DbTable($adapter);
$authAdapter -> setTableName('users')->setIdentityColumn('username')->setCredentialColumn('password');
$authAdapter -> setIdentity('admin')-> setCredential('password');
$authAdapter -> authenticate();

上記のコードは、次のようなエラーを生成します: DbTable に指定されたパラメーターは、有効な sql ステートメントを生成できませんでした。テーブル名と列名の有効性を確認してください。

ZF-Commons および ZF-Users モジュールを使用し、車輪を再発明しないことが理にかなっている場合は知っていますが、ZF2 は比較的新しいので、自分で試してみたいと思います。

4

2 に答える 2

0

答えはエラーメッセージにありZend\Authentication\Adapter\DbTable、パラメーターとしてアダプターだけでなく、テーブル名、および識別子と資格情報列の名前も必要です...

$authAdapter = new DbTable($dbAdapter,
                           'tableName',
                           'identifierColumnName',
                           'credentialColumnName'
                           );

この情報はドキュメントでカバーされており、常に良い出発点です -> http://zf2.readthedocs.org/en/release-2.1.4/modules/zend.authentication.adapter.dbtable.html

于 2013-05-16T06:52:17.750 に答える
0

私はこれが古いものであることを知っています、そしておそらくあなたは今答えを持っています. とはいえ、さらなるユーザーのためにここに私の答えを載せておきます。私自身、チュートリアルでいくつかの前提条件が整っていることを期待している多くの同様の問題に直面しました。

このエラーは、DB アダプターを取得するステートメントが完全に正しくないために発生します。ローカルまたはグローバル構成で定義された文字列を使用して、サービス管理インスタンスを呼び出す必要があります。例えば:

このファクトリを global.php ファイルで定義しています。

    return array(
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter'
                    => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
    'db' => array(
        'driver'         => 'Pdo',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),
    ),
);

私の local.php には、次のように DB サーバーに到達するための資格情報と情報があります。

return array(
    'db' => array(
        'username' => 'valid_dbusername',
        'password' => 'valid_dbpass',
        'dsn'            => 'mysql:dbname=valid_dbname;host=valid_dbserver',
    ),
);

これは、'Zend\Db\Adapter\Adapter' サービス コールを定義するのに十分です。次に、Db アダプターをインスタンス化するために、コントローラーの関数内に次の行があります。

if (!$this->adapter) {
    $sm = $this->getServiceLocator();
    $this->adapter = $sm->get('Zend\Db\Adapter\Adapter');
}

ここでアダプタがクラス変数であることに注意することが重要です。したがって、次のようにコントローラー クラス内で定義する必要があります。

public $adapter;

DB アダプターを取得するには、この手順で十分です。「アダプター」と呼ばれるファクトリーを持っていないと仮定しています。これにより、例が機能するはずです。

于 2014-05-20T00:18:54.797 に答える