Ir para conteúdo

POWERED BY:

Arquivado

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

AlexOliveira

Zend - Como incluir modelos automaticamente?

Recommended Posts

Olá pessoa!

 

Bom estou iniciando no ZF e ja arrumei um problema que nao consigo resolver. :)

Estou seguindo uma video aulas, porem nelas o cara consegue criar uma instancia de um MODELO dentro do CONTROLADOR sem ter incluido ele diretamente no código.

Li muito a respeito e ainda nao consegui resolver me problema, so consigo instanciar o MODELO se eu inclui-lo diretamente dentro do meu CONTROLADOR....

 

Algem pode ajudar aew??? Ja tentei um monte de coisa e nada... Por favor, ajudem.

 

Caso alguem queria tentar me ajudar, segue abaixo informaçoes sobre o senario em que estou:

 

Estrutura de diretorios:

/application

/application/configs

/application/controllers.php

/application/models

/application/views

/application/views/helpers

/application/views/layouts

/application/views/scripts

/application/views/scripts/index

/library

/public

 

 

 

 

Arquivo: /public/index.php

<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'on');

# Configura o fuso horario padrao
date_default_timezone_set('Europe/London');

# Configura diretorios de include
define('ROOT_PATH', realpath(dirname(dirname(__FILE__))));
define('APP_PATH', ROOT_PATH . '/application');
define('MOD_PATH', ROOT_PATH . '/application/models/');

set_include_path(
ROOT_PATH . '/library' . PATH_SEPARATOR .
'.'
);

require 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();

include ROOT_PATH . '/application/Bootstrap.php';
$bt = new Bootstrap ( 'desenvolvimento' );
$bt->run ();

 

Arquivo: /application/Bootstrap.php

<?php
class Bootstrap{
public function __construct($modo = 'producao'){		
	$config = new Zend_Config_Ini(APP_PATH . '/configs/config.ini', $modo);
	Zend_Registry::set('config', $config);

	$bd = Zend_Db::factory($config->bd); // Deve-se habilitar php_pdo_mysql.dll no php.ini
	Zend_Db_Table_Abstract::setDefaultAdapter($bd); // Seta o banco para os modelos
	Zend_Registry::set('bd', $bd);
}

public function run(){
	$this->iniInterfaceUsuario();

	$cf = Zend_Controller_Front::getInstance();
	$cf->setControllerDirectory(APP_PATH . '/controllers');
	$cf->throwExceptions(true);
	$cf->dispatch();
}

private function iniInterfaceUsuario(){
	Zend_Layout::startMvc(array(
		'layoutPath'=>APP_PATH . '/views/layouts', 'layout'=>'Layout'
	));
}
}

 

Arquivo: /application/configs/config.ini

[producao]
iu.titulo = Alex de Oliveira
iu.cor.tema1 = #000
iu.cor.tema2 = #777
iu.cor.tema3 = #ddd
iu.cor.texto = #fff

bd.adapter = Pdo_Mysql
bd.params.host = localhost
bd.params.username = root
bd.params.password =
bd.params.dbname = xxx

[desenvolvimento : producao]
bd.adapter = Pdo_Mysql
bd.params.host = localhost
bd.params.username = root
bd.params.password =
bd.params.dbname = xxx

 

Arquivo: /application/controllers/IndexController.php

<?php
//require MOD_PATH.'Departamento.php'; // So funciona quando essa linha e descomentada.

class IndexController extends Zend_Controller_Action{

public function init() {

}

public function indexAction() {

	$d = new Departamento();
	$this->view->lista = $d->fetchAll()->toArray();

}
}

 

Arquivo: /application/models/Departamento.php

<?php
class Departamento extends Zend_Db_Table_Abstract {

protected $_name = 'pb_departamento';

}

 

Arquivo: /application/view/scripts/index/index.phtml

<?php
echo "<pre>";
print_r ( $this->lista );
echo "<pre>";
?>

 

A mensagem de erro que aparece e a de velho not found:

 

Fatal error: Class 'Departamento' not found in \application\controllers\IndexController.php

 

 

Me ajudem por favor. Como faço para um modelo automaticamente ao instancia-lo dentro de uma controlador???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, apenas para o seu conhecimento existe um fórum específico sobre ZendFramework :seta: http://forum.imaster...zend-framework/

 

Respondendo a sua dúvida, como essa sua classe Departamento extende a classe Zend_Db_Table_Abstract, ela deveria estar em /application/models/DbTable e não em /application/models.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade o Leozitho está correto nesta. O ZF trabalha por padrão (e é o caso ali) com DataMapper. A classe que estende Zend_Db_Table_Abstract é a classe que representa a tabela do banco de dados, devendo permanecer em models/DbTable. A classe que faz o mapeamento é que deve ficar em models.

 

Um bom local para iniciar o aprendizado é o Quick Start do Zend.

 

http://framework.zend.com/manual/en/learning.quickstart.html

 

Outras informações importantes:

 

http://framework.zend.com/manual/en/learning.html

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso foi depois da versão 1.7, correto?

Eu lembro que na versão 1.7 eu utilizava Zend_Db_Table e jogava meus models dentro do diretorio models.

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.