Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

giulianosaito

[Resolvido] Erro zend

Recommended Posts

Bom dia!

Estou começando a me aprofundar no ZF e surgiu uma dúvida de iniciante aqui, mas que já deu muito "pano pra manga".

 

O problema é quando no meu bootstrap eu ativo o self::setupDatabase ();

 

Ele me mostra essa mensagem de erro.

 

Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' with message 'Configuration array must have a key for 'dbname' that names the database instance' in D:\sites_www\zf_treinamento\library\Zend\Db\Adapter\Abstract.php:248 Stack trace: #0 D:\sites_www\zf_treinamento\library\Zend\Db\Adapter\Abstract.php(175): Zend_Db_Adapter_Abstract->_checkRequiredOptions(Array) #1 D:\sites_www\zf_treinamento\library\Zend\Db.php(253): Zend_Db_Adapter_Abstract->__construct(Array) #2 D:\sites_www\zf_treinamento\application\bootstrap.php(82): Zend_Db::factory('PDO_MYSQL', Array) #3 D:\sites_www\zf_treinamento\application\bootstrap.php(37): Bootstrap::setupDatabase() #4 D:\sites_www\zf_treinamento\application\bootstrap.php(19): Bootstrap::prepare() #5 D:\sites_www\zf_treinamento\httpdocs\index.php(11): Bootstrap::run() #6 {main} thrown in D:\sites_www\zf_treinamento\library\Zend\Db\Adapter\Abstract.php on line 248

No meu bootstrap eu estou fazendo da seguinte maneira

 

public static function setupConfiguration() {
		$config = new Zend_Config_Ini ( self::$root . 'config/config.ini', 'offline' );
		self::$registry->configuration = $config;
		$session = Zend_Registry::getInstance ();
		$session->set ( 'config', $config );
	}
	public static function setupDatabase() {
		$config = self::$registry->configuration;
		$db = Zend_Db::factory ( $config->db->adapter, $config->db->toArray () );
		$db->query ( "SET NAMES 'utf8'" );
		self::$registry->database = $db;
		Zend_Db_Table::setDefaultAdapter ( $db );
	}

Desde já agradeço a atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele ta dando erro porque ta dizendo que você nao tem uma chave para "dbname"

 

outra coisa porque você inicia a conexao logo no inicio do sistema?

 

apesar do Zend ter um controle muito bom pra conexoes recomendo você abrir a conexao só na hora que for usar

 

outra coisa você ta usando session pra gravar o config do banco, isso nao precisa usando o register ele é visivel em qualquer lugar e você pode recuperar quando precisar

 

por exemplo eu prefiro usar config.php, assim nao tem jeito de nenhum usuario ver os dados da conexao com o banco

 

registro logo no inicio do sistema

Zend_Registry::set('config', new Zend_Config(require_once 'config_db.php'));

 

dai na pagina que preciso conectar no banco eu pego o valor do config e conecto

 

$config = Zend_Registry::get('config');

$db = Zend_Db::factory($config->database);

 

meu config_db.php

 

<?php
return array(
'database' => array(
	'adapter' => 'PDO_MYSQL',
		'params'  => array(
			'host'	 => 'localhost',
			'username' => 'usuario',
			'password' => 'senha',
			'dbname'   => 'banco'
		)
)
);

 

simples nao é mesmo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande Fabyo! Realmente com o mestre falando é muito fácil mesmo! heheh

 

Bom, é que eu estou fazendo um curso online no school of net e o professor (Wesley) me passou assim, na video aula ele ensinou a fazer um boostrap.php que é uma classe, e o path do diretório de configuração no caso o banco de dados ficaria fora da public_html, um diretório abaixo! Mas infelizmente pra mim deu muita dor de cabeça essa conexão!

 

Vou tentar da sua maneira Fabyo! Muito mais simples e funcional! Qualquer coisa te dou um grito!

 

Forte abraço e obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo,

 

desculpe a ignorância, mas como você recomenda que deva ser para não abrir a conexão logo no começo e sim soh qdo for precisar?

 

vlw, brigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Lucas

 

geralmente o pessoal tem aberto a conexao logo no bootstrap, ou seja a pessoa abriu a pagina a conexao com o banco ja é feita

 

mas o correto é abrir somente na hora que for usar, por exemplo eu posso ter um index sem conexao com o banco, e só quando o usuario clicar el alguma coisa que precise de banco que dai sim irei conectar.

 

mas como falei apesar do Zend ter um controle sobre isso, recomendo por habito e padrao sempre abrir a conexao aonde for usar

 

nesse exemplo eu só to dizendo pro Zend que vou abrir a conexao, e o Zend abre a conexao pra mim somente quando realmente precisar, ou seja mesmo abrindo no index o Zend só irá abrir realmente quando for preciso

mas como falei isso é uma facilidade, mas por padrao e para ter um controle visual melhor recomendo abrir só na hora que precisar mesmo

 

$config = Zend_Registry::get('config');

$db = Zend_Db::factory($config->database);

 

no exemplo acima eu to dizendo pro Zend que vou precisar da conexao aberta, e ele cuida de abrir para mim na hora certa, mas se caso precise abrir a conexao na hora mesmo se deve usar

$db->getConnection();

 

entao agora que expliquei, sobre a sua pergunta de como trabalhar, basta usar esse comando

na hora que você precisar

 

$config = Zend_Registry::get('config');

$db = Zend_Db::factory($config->database);

 

entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu pela resposta Fabyo,

 

então ao invés de abrir a conexao com o Zend_Db::factory no bootstrap basta coloca-lo aonde ou vou usar,

mas isso nao vai fazer com que eu fique duplicando esse código em todas as classes que eu precisar do banco? pq ai teria que colocar Zend_Db::factory em todas as classes...

Compartilhar este post


Link para o post
Compartilhar em outros sites

saquei..

 

vlw pelas dicas Fabyo =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.