1

Zend フレームワークを学習していますが、チュートリアルを進めているときに、Application_Model_DbTable_Users のアダプターが見つかりませんというエラーが発生しました。私はそれを理解できないようです。ここに私のクラスがあります

class Application_Model_Register
 {
private $_dbTable;
private $db;

public function __construct()
{
    $this->_dbTable = new Application_Model_DbTable_Users();

        $parameters =array(
                        'host'     => '127.0.0.1',
                        'username' => 'root',
                        'password' => '******',
                        'dbname'   => 'tutblog',
                                                'adapter'  => 'Pdo_Mysql'
                   );
            try {
                $db = Zend_Db::factory('Pdo_Mysql', $parameters);
                $db->getConnection();
                } catch (Zend_Db_Adapter_Exception $e) {

                } catch (Zend_Exception $e) 
 }
 public function createUser($array)
{   var_dump($array);
    $_dbTable = new Application_Model_DbTable_Users();
    $this->_dbTable->insert($array);
    //insert('array') SQL commands-> form zen_db_table_abstract
}

DBtable ユーザーのクラス

class Application_Model_DbTable_Users extends Zend_Db_Table_Abstract
{

    protected $_name = 'users';
protected $_primary ='id';
protected $_password= 'password';
}

その他のユーザー クラスは空です。

インデックスコントローラー

public function indexAction()
{   
    $register =  new Application_Model_Register();
$register ->createUser(array( 'name' => 'becky',
                      'age'  => 25,
              'password' => 'somepw'
                 )2);*/
}

私のiniファイル

[production]
phpSettings.display_startup_errors = 2
phpSettings.display_errors = 2
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

resources.db.params.adapter_ = "PDO_MYSQL"
resources.db.params.host ='localhost'
resources.db.params.dbname ='tutblog'
resources.db.params.username = "root"
resources.db.params.password = "password"
resources.db.isDefaultTableAdapter = true



[staging : production]


phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

resources.db.params.adapter_ = "PDO_MYSQL"
resources.db.params.host ='localhost'
resources.db.params.dbname ='tutblog'
resources.db.params.username = "root"
resources.db.params.password = "password"
resources.db.isDefaultTableAdapter = true

「よろしくお願いします。フレームワークをどこから始めればよいか本当にわかりません。tutを再起動しようとして、あらゆることをグーグルで試しましたが、この問題に再び遭遇したように感じます。

thnx

Message: No adapter found for Application_Model_DbTable_Users

スタックトレース:

エラーコードはこちら

0 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Db/Table/Abstract.php(739): Zend_Db_Table_Abstract->_setupDatabaseAdapter()
#1 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Db/Table/Abstract.php(268): Zend_Db_Table_Abstract->_setup()
#2 /Applications/XAMPP/xamppfiles/htdocs/webs/zfNewTry/application/models/Register.php(10): Zend_Db_Table_Abstract->__construct()
#3 /Applications/XAMPP/xamppfiles/htdocs/webs/zfNewTry/application/controllers/IndexController.php(15): Application_Model_Register->__construct()
#4 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Action.php(513): IndexController->indexAction()
#5 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Dispatcher/Standard.php(289): Zend_Controller_Action->dispatch('indexAction')
#6 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#7 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#8 /Applications/XAMPP/xamppfiles/lib/php/pear/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#9 /Applications/XAMPP/xamppfiles/htdocs/webs/zfNewTry/public/index.php(26): Zend_Application->run()
#10 {main}  
Request Parameters:

array (
  'controller' => 'index',
  'action' => 'index',
  'module' => 'default',
)  
zf enable layout to get this template
4

3 に答える 3

1

私の記憶が正しければ、Zend_Db_Table クラスのデフォルト接続として常に db 接続を使用するようアプリケーションに指示する必要があります。

データベースの初期化の後に次の行を追加してみてください。 Zend_Db_Table::setDefaultAdapter($db)

Zend_Db_Table クラスをインスタンス化する前にこれを行うべきだと思うので、 Application_Model_Register::__construct() を次のように変更します。

public function __construct()
{
    $parameters =array(
                    'host'     => '127.0.0.1',
                    'username' => 'root',
                    'password' => '******',
                    'dbname'   => 'tutblog',
                                            'adapter'  => 'Pdo_Mysql'
               );
     try {
         $db = Zend_Db::factory('Pdo_Mysql', $parameters);
         $db->getConnection();
     } catch (Zend_Db_Adapter_Exception $e) {

     } catch (Zend_Exception $e) { 
     }
     Zend_Db_Table::setDefaultAdapter($db);
     $this->_dbTable = new Application_Model_DbTable_Users();
}
于 2012-05-18T12:00:19.187 に答える
0

コンストラクターで、新しい db アダプターを初期化しようとしているようです。DbTable モデルは、application.iniで設定されたアダプターを既に使用しているため、新しいアダプターをセットアップする必要はありません。また、それが問題かどうかはわかりませんが、マニュアルのアダプターの構文は*Pdo_Mysql*です
。複数のアダプターを使用する必要がある場合は、.application.ini

つまり、DbTable モデルを使用するモデルのコンストラクターは通常、次のようになります。

  //This class is currently intended to be extended by concrete mappers
  protected $_tableGateway = NULL;

  protected $_identityMap = array();

 //this constructor typically provides the option to pass in a DbTable model
 // or a string value for the table name that would instantiate a Zend_Db_Table_Abstract
 public function __construct(Zend_Db_Table_Abstract $tableGateway = NULL) {

        if (is_null($tableGateway)) {
            //_tablename is the string value of the table, supplied by the concrete mapper
            $this->_tableGateway = new Zend_Db_Table($this->_tableName);
        } else {

            $this->_tableGateway = $tableGateway;
        }
    }

 protected function _getGateway() {

        return $this->_tableGateway;
    }

/**
     * findAll() is a proxy for the fetchAll() method and returns
     * an array of entity objects
     *
     * @return array returns an array of row objects
     */
    public function findAll() {

        $select = $this->_getGateway()->select();

        $rowset = $this->_getGateway()->fetchAll($select);
        $entities = array();
        foreach ($rowset as $row) {
            $entity = $this->_createEntity($row);
            $entities[] = $entity;
        }
        return $entities;
    }

    /**
     * Abstract method to be implemented by concrete mappers.
     */
    abstract protected function _createEntity($row);
}

Zend_Db_Table_Abstract インターフェイスを使用してクエリを作成する方法を示すために、いくつかのメソッドを含めました。

このことを理解しようとしているときに、これらのリンクが役立つことがわかりました。

データマッパーを統合するドメインモデル

また、 Rob Allen の Akratbat.comではいつでも素晴らしいものを見つけることができます。

幸運を。

于 2012-05-18T14:33:18.687 に答える
0

ファイルがローカルサーバーで実行されているにもかかわらず、開発サーバーに移動したときにも同じ問題に直面しています。次に、ファイルの命名規則に従いました。

  1. 以下のすべてで、小文字/大文字に注意してください
  2. モデルフォルダーは複数形ですが、クラスはモデル単数形であることに注意してください
  3. クラスの名前が Application_Model_DbTable_Albums であることを確認してください
  4. ファイルの名前が Albums.php で、application/models/DbTable という名前のフォルダーにあることを確認してください

それを調べて、ファイルが適切に命名されていることを確認する必要があります(例:モデルのUsers.php)。

それは私の問題を解決します。多分あなたのもの。

幸運を。

于 2014-11-27T11:57:47.087 に答える