我使用了一条简单的指令
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的新手,我想亲自尝试一下。
发布于 2013-05-16 14:52:18
答案就在错误消息中,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的良好起点
发布于 2014-05-20 08:18:55
我知道这是一个古老的问题,也许你现在已经有了答案。尽管如此,我还是会把我的答案放在这里,以供更多的用户使用。我自己也遇到了很多类似的问题,教程希望我们有一些前提条件。
出现此错误的原因是,您在语句中没有完全正确地获取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中,我有访问数据库服务器的凭据和信息,如下所示:
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');
}需要注意的是,adapter在这里是一个类变量。因此,必须在我的控制器类中定义它,如下所示:
public $adapter;这些步骤足以让您获得一个DB适配器。我假设你没有一个叫做“适配器”的工厂。这应该会让你的例子工作起来。
https://stackoverflow.com/questions/16580609
复制相似问题