Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia galera!
Sou totalmente verde no Zend Framework ainda.. comecei a estudar a alguns dias, e finalmente dei uma travada aqui rsrsrs.
Nao peguei muito a malemolência de mexer na documentação do site, e não estou encontrando como setar o diretorio dos meus modelos!
Tentei assim:
/ Definindo um novo caminho padrão do include /
$new_include_path = PATH_SEPARATOR .
"../library/" .
PATH_SEPARATOR . '../' .
PATH_SEPARATOR . '../application/models' .
get_include_path();
/ setando o include path novo /
set_include_path($new_include_path);
...
...
//Configuração do adaptador do modelo
Zend_Db_Table_Abstract::setDefaultAdapter($db);
Mas mesmo assim ta dando Class Not Found.. com tudo certinho..
Ai vem minha pergunta, para os controladores existe:
/ Setando o caminho dos controllers /
$directory = "../application/controllers/";
$front->setControllerDirectory($directory);
Nao existe algum setModelDirectory?? Como eu instancio.. to com dificuldade nesse ponto..
Valeu!
>
Como você está criando o projeto? Como está o seu index.php, application.ini e Boostrap.php?
Carlos Eduardo
Cara, to criando o projeto a partir daquele Default do Zend Studio mesmo.. new project.. ele gera todos os diretorios na estrutura default de um projeto zend..
Ta tudo funcionando no jeito.. ja testei, views, layouts, includes.. o bootstrap ta com o setInclude configurado direitinho e tal..
(O codigo ta meio "prolixo", mas é pq eu estou procurando comentar tudo pra aprender direitinho)
Index.php
<?php
/ BOOTSTRAP /
/ Definindo quais constantes de erros estao ativas no projeto /
error_reporting(E_ALL | E_STRICT);
/ Mudando uma configuração do PHP para exibir erros /
ini_set("display_errors","on");
/ Definindo um novo caminho padrão do include /
$new_include_path = PATH_SEPARATOR .
"../library/" .
PATH_SEPARATOR . '../' .
PATH_SEPARATOR . '../application/models' .
get_include_path();
/ setando o include path novo /
set_include_path($new_include_path);
require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
/ Instanciando o ZendControllerFront com getInstance() (é o mesmo de dar um 'new') /
$front = Zend_Controller_Front::getInstance();
/ Setando o caminho dos controllers /
$directory = "../application/controllers/";
$front->setControllerDirectory($directory);
/ Lançando exceções para retornar erros /
$front->throwExceptions(true);
/Iniciar a classe Zend_Layout /
Zend_Layout::startMvc(array(
"layoutPath"=>"../application/views/layouts",
"layout" => "layout"
));
$config = new Zend_Config_Ini(
"../application/configs/config.ini",
"desenvolvimento"
);
/ Instancia um objeto 'registrador' da classe Zend_Registry /
$registry = Zend_Registry::getInstance();
//seta qualquer coisa
$registry->set("config",$config);
/ Conexao com o banco de dados /
$db = Zend_Db::factory($config->db->adapter,$config->db);
$registry->set("db",$db);
//Configuração do adaptador do modelo
Zend_Db_Table_Abstract::setDefaultAdapter($db);
/ Dispachando a aplicação /
$front->dispatch();
Application.ini
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
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
[staging : production]
[testing : 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
Bootstrap.php (vazio =P)
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
Uhn... apesar de usar o Zend Studio, utilizo para iniciar os projetos sempre o Zend Tool. Acho mais organizado e melhor.
Olha como fica o index.php dele:
<?php
// Define path to application directory
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') : 'production'));
// 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.ini (depois de algumas modificações que eu já fiz):
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
phpSettings.date.timezone = "America/Sao_Paulo"
resources.frontController.params.displayExceptions = 0
resources.locale.default = "pt_BR"
resources.translate.adapter = "array"
resources.translate.content = APPLICATION_PATH "/../library/translate/pt_BR"
; db adapter
resources.db.adapter = "Pdo_Mysql"
resources.db.params.charset = "utf8"
resources.db.params.host = "hostname"
resources.db.params.username = "username"
resources.db.params.password = "pass"
resources.db.params.dbname = "dbname"
; layouts
resources.layout.layout = "layout"
; include path
includePaths.library = APPLICATION_PATH "/../library"
appnamespace = "Application"
; bootstrap
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
; front controller
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[]= ""
resources.frontController.defaultModule = "default"
resources.frontController.prefixDefaultModule = "true"
resources.frontController.actionHelperPaths.App_Action_Helper = "App/Helpers/Action"
; view
resources.view.doctype = "HTML5"
resources.view.encoding = "UTF-8"
resources.view.charset = "UTF-8"
resources.view.basePath = APPLICATION_PATH "/modules/default/views/"
resources.view.helperPath.App_View_Helper = "App/Helpers/View"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
[staging : production]
[testing : 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
;; db adapter
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = ""
resources.db.params.dbname = "dbname"
E o Bootstrap:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
protected function _initAutoLoader() {
Zend_Loader_Autoloader::getInstance ()->setFallbackAutoloader ( true );
$modelLoader = new Zend_Application_Module_Autoloader ( array (
'namespace' => '',
'basePath' => APPLICATION_PATH
) );
return $modelLoader;
}
}
Algumas explicações:
resources.translate.adapter = "array"
resources.translate.content = APPLICATION_PATH "/../library/translate/pt_BR"
Traduzir as mensagens de erro do Zend_Form - http://code.imasters.com.br/index.php?/topic/25-traducao-das-mensagens-de-validacao/ - um misto da sugestão do Leozitho e da minha.
resources.frontController.defaultModule = "default"
resources.frontController.prefixDefaultModule = "true"
Aqui eu decidi fazer assim porque ao criar Controllers pelo Zend_Tool, mesmo que os arquivos estejam no módulo default, ele adiciona Default_NomeController ao nome da classe. Assim ele fica desta forma, mas funciona perfeitamente.
resources.frontController.actionHelperPaths.App_Action_Helper = "App/Helpers/Action"
Adicionando o caminho App/Helpers/Action para os action helpers (caso você queira usar). No meu caso, eu crio uma pasta chamada App que fica dentro de library e coloco os helpers e outras coisas que são comuns a diversos projetos dentro desta pasta.
resources.view.helperPath.App_View_Helper = "App/Helpers/View"
Mesma ideia acima, mas com os viewHelpers.
[development : production]
Esta é a parte que eu mais gosto. Definindo nas seções dentro do application.ini, podemos definir comportamentos diferentes dependendo do ambiente em que estamos. Para definir o ambiente, eu utilizo uma linha a mais no .htaccess:
SetEnv APPLICATION_ENV development
Fazendo desta forma você deverá ter tudo funcionando corretamente.
Carlos Eduardo
Cara.. to tentando com o zend_tools..
No terminal do apache ele carrega o script do zend_tools normal.. mas no cmd do windows ele n ta reconhecendo php.exe, o q me levou a concluir q o PATH ta errado..
mas po.. ta certo! =P
Ja to apanhando!
Sobre a instalação do Zend Tool não vou poder ajudar, porque uso o Zend Server CE, que instala sozinho o Zend Tool (além de Apache, PHP, MySQL, Profiler...), então... :P
Carlos Eduardo
Bom.. me frustrei hoje.. nao consigui nem um nem outro.. rsrsrs
Como você está criando o projeto? Como está o seu index.php, application.ini e Boostrap.php?
Carlos Eduardo