2016-03-28 11 views
1

私はAuthControllerの内側と、このactionprocessActionにリダイレクトを提出した後、私はシンプルtableバーを作成する簡単なformを持っていません。EDIT:クラスのZend Dbのアダプタアダプタは

EDITED:Zend framerwork DB DDL updateを参照すると、私は以下のコードに少し変更を行っ

AuthController.php

<?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:

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

<?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']); 

     } 
     ) 
    ); 
    } 
} 

問題:(更新)

tableバーが作成され、私は

を印刷する場合

Fatal error: Class 'Blog\Controller\Zend\Db\Adapter\Adapter' not found in /var/www/zend2/module/Blog/src/Blog/Controller/AuthController.php on line 110

のようなエラーが表示されていませんこの

CREATE TABLE `bar` (`id` INTEGER NOT NULL, `name` VARCHAR(255) NOT NULL) 

が、テーブルのような10枚の

echo $sql->getSqlStringForSqlObject($table); 

問い合わせプリントはありませんでした。 adapterを識別することができないよう

エラーは、コードの行の下で発生します。

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

しかし、このように動作します。

$results = $this->adapter->query($sql->getSqlStringForSqlObject($table), $DB ::QUERY_MODE_EXECUTE); 

私はZendの2.4

+0

DBユーザーがオブジェクトを作成する権利を持っていることを確かめていますか? – mitkosoft

+0

はい、すべて優先します。 – Hiranya

答えて

0
を使用しています

初心者の場合は、ZF2には、query executeは動作しません。クラスZend\Db\Adapter\Adapterを正確に確認してください。

私はまたコードの線の下に

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

のように修正:注

$results = $this->adapter->query($sql->getSqlStringForSqlObject($table), $DB ::QUERY_MODE_EXECUTE); 

参考Fatal error : class not found in Zend framework 2

私はまだ$this->adapter = $this->getAdapter();が作業の代わりではない理由を理解することはできません$DB。すべてのヒント感謝されます。

1

あなたは既存のサービス以外にアクセスしようとしていると思います。あなたは、サービス工場を作成しようとすることができます

config.phpの

<?php 
return [ 
    'db' => [ 
     'driver' => 'Pdo', 
     'database' => 'blog', 
     'username' => 'root', 
     'password' => 'mysql' 
    ] 
]; 

Module.php

<?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

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 
    } 
} 

herehereの例があります。

+0

こんにちは、私はすでに 'global.php'でこれを行いました。なぜ、' zend \ db \ adapter \ adapter'に別のサービスマネージャが必要なのですか? Plsは私の編集を参照してください。 – Hiranya

+0

module.phpには、configを取得してアダプタコンストラクタに依存関係を注入するためのサービスマネージャが必要です。 –

+0

私はこの '$ this-> adapter-> query($ sql-> getSqlStringForSqlObject($ table)、$ this-> adapter :: QUERY_MODE_EXECUTE)'を変更しましたが、まだ構文エラーが出ています.'unidetifiend adapter' – Hiranya