首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编辑:类Zend\Db\Adapter\Adapter未找到

编辑:类Zend\Db\Adapter\Adapter未找到
EN

Stack Overflow用户
提问于 2016-03-28 11:06:51
回答 2查看 2.2K关注 0票数 1

我有一个简单的form,在提交重定向到processActionAuthController之后,在这个action中,我想创建一个简单的table bar

编辑:

关于Zend framerwork更新,我在下面的代码中做了一些修改

AuthController.php

代码语言:javascript
复制
<?php

namespace Blog\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Debug\Debug;
use Blog\Form\LoginForm;
use Zend\Authentication\AuthenticationService;
use Zend\Db\Adapter\AdapterInterface;
use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Ddl;
use Zend\Db\Sql\Ddl\Column;
use Zend\Db\Sql\Insert;
use Zend\Authentication\Adapter\DbTable as DbTableAuthAdapter;

class AuthController extends AbstractActionController
{    
    protected $adapter;
    public function getAdapter()
    {
        if (!$this->adapter) {
            $sm = $this->getServiceLocator();
            $this->adapter = $sm->get('Zend\Db\Adapter\Adapter');
        }
        return $this->adapter;
    }

    public function indexAction()
    {
        return new ViewModel();
    }

    public function processAction()
    {

       $DB = new \Zend\Db\Adapter\Adapter(array(
        'driver' => 'Pdo',
        'database' => 'blog',
        'username' => 'root',
        'password' => 'mysql'
       ));


        $this->adapter = $this->getAdapter();
        $sql = new Sql($this->adapter);
        $table = new Ddl\CreateTable('bar');
        $table->addColumn(new Column\Integer('id'));
        $table->addColumn(new Column\Varchar('name', 255));
        $table->setTable('bar'); 

        $results = $this->adapter->query($sql->getSqlStringForSqlObject($table),  $this->adapter ::QUERY_MODE_EXECUTE);
        return new ViewModel();
    }
}

global.php:

代码语言:javascript
复制
return array(
'db' => array(
    'driver'         => 'Pdo',
    'dsn'            => 'mysql:dbname=blog;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',
     ),
  ),
);

Module.php

代码语言:javascript
复制
  <?php
  namespace Blog;

  use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
  use Zend\ModuleManager\Feature\ConfigProviderInterface;

 class Module implements  AutoloaderProviderInterface,ConfigProviderInterface
  {

  public function getAutoloaderConfig()
  {
    return array(
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
            ),
        ),
    );
}


public function getConfig()
{
    return include __DIR__ . '/config/module.config.php';
}

public function getServiceConfig()
{
    return array(
        'factories' =>array( 
            'Zend\Db\Adapter\Adapter' => function ($sm) {
                 $config = $sm->get('Config');
                 return new \Zend\Db\Adapter\Adapter($config['db']);

         }
       )
    );
  }
}

Problem:(Updated)

table bar未创建,并显示错误,如

致命错误:在第110行的/var/www/zend2/module/Blog/src/Blog/Controller/AuthController.php中找不到‘Blog\Controller\Zend\Db\Adapter’类

如果我打印

代码语言:javascript
复制
echo $sql->getSqlStringForSqlObject($table);

查询打印如下所示

创建表bar ( id整数NULL,name VARCHAR(255) NULL )

但是桌子不在那里。

错误发生在下面的代码行中,因为它无法识别adapter

代码语言:javascript
复制
 $results = $this->adapter->query($sql->getSqlStringForSqlObject($table),  $this->adapter ::QUERY_MODE_EXECUTE);

但以这种方式工作:

代码语言:javascript
复制
$results = $this->adapter->query($sql->getSqlStringForSqlObject($table),  $DB ::QUERY_MODE_EXECUTE);

我正在使用Zend 2.4

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-29 06:31:02

对于ZF2中的初学者来说,如果没有正确实例化类Zend\Db\Adapter\Adapterquery execute就无法工作。

我纠正了

代码语言:javascript
复制
 $DB = new \Zend\Db\Adapter\Adapter(array(
    'driver' => 'Pdo',
    'database' => 'blog',
    'username' => 'root',
    'password' => 'mysql'
   ));

同样,在代码的下面一行:

代码语言:javascript
复制
$results = $this->adapter->query($sql->getSqlStringForSqlObject($table),  $DB ::QUERY_MODE_EXECUTE);

参考文献致命错误: Zend框架2中找不到类

注意:,我仍然不明白为什么$this->adapter = $this->getAdapter();不工作而不是$DB.Any提示会受到赞赏。

票数 0
EN

Stack Overflow用户

发布于 2016-03-29 11:25:44

我认为您正在尝试访问不存在的服务。您可以尝试创建一个服务工厂:

config.php

代码语言:javascript
复制
<?php
return [
    'db' => [
        'driver' => 'Pdo',
        'database' => 'blog',
        'username' => 'root',
        'password' => 'mysql'
    ]
];

Module.php

代码语言:javascript
复制
<?php
class Module 
{
    public function getServiceConfig()
    {
        return [
            'factories' => [
                'Zend\Db\Adapter\Adapter' =>  => function ($sm) {
                     $config = $sm->get('Config');
                     return new \Zend\Db\Adapter\Adapter($config['db']);

                },
            ],
        ];
    }
}

然后,您可以使用服务管理器访问服务:

AuthController.php

代码语言:javascript
复制
class AuthController extends AbstractActionController 
{
    public function getAdapter()
    {
       if (!$this->adapter) {
          $sm = $this->getServiceLocator();
          $this->adapter = $sm->get('Zend\Db\Adapter\Adapter');
       }
       return $this->adapter;
    }

    public function processAction()
    {
        $this->adapter = $this->getAdapter();
        $sql = new Sql($this->adapter);

        // other stuff here
    }
}

您可以找到更多的示例这里这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36261056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档