Подключение к базе данных в Zend Framework - PullRequest
1 голос
/ 07 февраля 2012

Я новичок в ZF. Я закодировал мой application.ini вот он:

[development]
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.view.encoding = "utf-8"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"


phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
resources.DB.adapter            = "pdo_mysql"
resources.DB.params.host        = "localhost"
resources.DB.params.username    = "root"
resources.DB.params.password    = ""
resources.DB.params.dbname      = "xyz"

вот мой index.php

              defined('APPLICATION_PATH')
              || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

          // Define application environment
          defined('APPLICATION_ENV')
              || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));

          // Ensure library/ is on include_path
          set_include_path(implode(PATH_SEPARATOR, array(
              realpath(APPLICATION_PATH . '/../library'),
              get_include_path(),
          )));

          /** Zend_Application */
          require_once 'Zend/Application.php';

          // Create application, bootstrap, and run
          $application = new Zend_Application(
              APPLICATION_ENV,
              APPLICATION_PATH . '/configs/application.ini'
          );
          $application->bootstrap()->run();

а вот мой bootstrap.php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
protected function _initDoctype(){
    $this->bootstrap('view');
    $view = $this->getResource('view');
    $view->doctype(Zend_View_Helper_Doctype::HTML5);
   }
}

Теперь, во-первых, я сделал свое соединение, как это

    $params = array('host'         => 'localhost',
            'username'  => 'root',
            'password'    => '',
            'dbname'        => 'xyz'
          );

   $DB      = new Zend_Db_Adapter_Pdo_Mysql($params);
      $DB->setFetchMode(Zend_Db::FETCH_OBJ);
      Zend_Registry::set('DB',$DB);

Позже в своих запросах я использовал это для получения записей:

$registry = Zend_Registry::getInstance();  
$DB = $registry['DB']; and than my query

Теперь, когда я изменил свои настройки, включая начальную загрузку и application.ini, как добиться того же, что и я? Потому что в моем приложении все так ..

Теперь я получаю эту ошибку.

Примечание: неопределенный индекс: БД в

C: \ xampp \ htdocs \ xyz \ application \ controllers \ LoginController.php в строке 59
Неустранимая ошибка: вызов функции-члена select () для необъекта в C: \ xampp \ htdocs \ xyz \ application \ controllers \ LoginController.php в строке 64

Строка № 59 -

 $registry = Zend_Registry::getInstance();  
 $DB = $registry['DB'];

Строка № 64 -

 $select = $DB->select()
     ->from(array('p' => 'phone_service'))
     ->join(array('u' => 'user_preferences'), 'u.phone_service_id = p.phone_service_id')
     ->where('u.user_preferences_name = ?', 'is_user_package_active')
     ->where('p.user_id = ?', $user_id);

Отредактировано

if($result->isValid()){
$data = $authAdapter->getResultRowObject(null,'password');
$auth->getStorage()->write($data);
$this->_redirect('/login/controlpannel');}

Теперь мой запрос не может найти $user_id здесь

$data = Zend_Auth::getInstance()->getStorage()->read();  
$user_id = $data->user_id;
  $DB = Zend_Db_Table_Abstract::getDefaultAdapter();

 $select = $DB->select()
     ->from(array('p' => 'phone_service'))
     ->join(array('u' => 'user_preferences'), 'u.phone_service_id = p.phone_service_id')
     ->where('u.user_preferences_name = ?', 'is_user_package_active')
     ->where('p.user_id = ?', $user_id);

Вот почему я получаю эту ошибку

Примечание. Попытка получить свойство необъекта в моем файле .phtml

Ответы [ 2 ]

0 голосов
/ 07 февраля 2012

Zend_Registry - это объект, который вы должны делать:

$registry = Zend_Registry::getInstance();  
      $DB = $registry->DB;
0 голосов
/ 07 февраля 2012

По умолчанию при использовании

resources.db.*

в вашем application.ini будет установлен адаптер по умолчанию с этими настройками (и по умолчанию будет использоваться в Zend_Db_Table).

Поскольку адаптер уже зарегистрирован как адаптер по умолчанию в Zend_db_Table_Abstract по умолчанию, доступ к нему так же прост, как при использовании:

$db = Zend_Db_Table_Abstract::getDefaultAdapter();

Другой способ получить его - извлечь его из экземпляра начальной загрузки, который выглядит примерно так (согласно Справочное руководство ):

$front = Zend_Controller_Front::getInstance();
$bootstrapResource = $front->getParam('boostrap')->getPluginResource('db');
$db = $boostrapResource->getDbAdapter();
...