fm_rac 0 Denunciar post Postado Dezembro 1, 2009 estou fazendo um sistema tendo como base a dica do Fabyo neste link (Zend Framework Zend_Auth) resumindo minha dúvida é exibir, adicionar e editar os dados cadastrados neste sistema, (login, senha e alguns dados que coloquei na tabela usuarios). eu aprendí num tutorial criando um arquivo na pasta "model" e criando uma classe nele com o mesmo nome do arquivo e no "IndexController" dentro de init chamar a classe... resumindo meu index controller está assim: (tentando exibir os dados) <?php class IndexController extends Zend_Controller_Action { function init() { Zend_Loader::loadClass('Cadastros'); // Obs. eu troquei o nome da tabela } public function indexAction() { $this->view->headTitle('Index'); $cadastros = new Cadastros(); $rows = $cadastros->fetchAll(); $json = Zend_Json::encode($rows->toArray()); //echo $json; } } mas dá o erro: Erro! An unexpected error occurred with your request. Please try again later. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
srnetcave 1 Denunciar post Postado Dezembro 2, 2009 Seguinte, No seu Bootstrap.php, crie a seguinte função. Essa função ira carregar todos os recursos e classes para seu modulo, e você não precisará mais utilizar Zend_Loader::loadClass('SUA CLASS'). <?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { $moduleLoader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH)); return $moduleLoader; } } Agora, assumindo que seu Cadastros.php esteja algo parecido com abaixo, se não estiver, mude. <?php class Model_Cadastros extends Zend_Db_Table_Abstract { protected $_name = 'SUA TABELA'; public function getEntries() { $result = $this->fetchAll(); return $result; } } No seu Controller você chama a classe Cadastros() da seguinte forma. public function indexAction() { $model = new Model_Cadastros(); $result = $model->getEntries(); $this->view->result = $result; } Simples... :) qualquer dúvida, posta ae flw Compartilhar este post Link para o post Compartilhar em outros sites
fm_rac 0 Denunciar post Postado Dezembro 2, 2009 ainda estou apanhando... dá o mesmo erro. tentei adaptar o que você mandou e ficou assim: index.php <?php if(version_compare(phpversion(), 5) === '-1'){ die('É necessario ter PHP 5 ou superior'); } if (!extension_loaded('pdo')) { die('É necessario o modulo PDO'); } if (!extension_loaded('pdo_mysql')) { die('É necessario o modulo pdo_mysql'); } define('DS', DIRECTORY_SEPARATOR); define('PS', PATH_SEPARATOR); set_include_path('.' . PS . 'library' . DS . PS . 'application' . DS . 'controllers' . DS . 'plugins' . DS . PS . 'application' . DS . 'models' . DS . PS . get_include_path()); require_once 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true); $config = new Zend_Config_Xml('includes' . DS . 'config.xml', 'config'); error_reporting((int) $config->error_reporting); ini_set('display_errors', (bool) $config->display_errors); $log = new Zend_Log(new Zend_Log_Writer_Stream('logs'. DS .'log.txt')); Zend_Registry::set('log', $log); setlocale(LC_ALL, $config->setlocale); date_default_timezone_set($config->timezone); Zend_Registry::set('config', new Zend_Config(require_once 'includes'. DS .'config_db.php')); // ***** FUNÇÃO PARA CARREGAR MODULES function _initAutoload() { $moduleLoader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH)); return $moduleLoader; } // ***** FIM FUNÇÃO Zend_Layout::startMvc(); Zend_Controller_Front::getInstance() ->registerPlugin(new LayoutPlugin()) ->registerPlugin(new SecurityPlugin()) ->throwExceptions((bool) $config->throwExceptions) ->run('application' . DS . 'controllers' . DS); Modelcadastros.php <?php class Modelcadastros extends Zend_Db_Table_Abstract { protected $_name = 'cadastros'; public function getEntries() { $result = $this->fetchAll(); return $result; } } IndexController.php <?php class IndexController extends Zend_Controller_Action { public function indexAction() { $this->view->headTitle('Index'); $model = new Modelcadastros(); $result = $model->getEntries(); $this->view->result = $result; } } primeiro ele não achava o Model_Cadastros daí eu deixei como Modelcadastros, resolvido. Mas mesmo assim está dando aquele mesmo erro do primeiro post. Valeu. Compartilhar este post Link para o post Compartilhar em outros sites
srnetcave 1 Denunciar post Postado Dezembro 2, 2009 Uma coisa que reparei, a função que te passei você teria que colocar na application/Bootstrap.php e não em public/index.php. coloque a função em sua Bootstrap.php dentro do diretório application, e no Modelcadastro.php troque o nome da classe para Model_Cadastros. Isso deve resolver seu problema. Outra coisa, qual versão do zf você está usando? Flw Compartilhar este post Link para o post Compartilhar em outros sites
fm_rac 0 Denunciar post Postado Dezembro 3, 2009 Estou usando a versão 1.9... o erro agora que me aparece é: Warning: Missing argument 1 for Zend_Application_Bootstrap_Bootstrap::__construct(), called in /home/xxx/www/cadastro/index.php on line 41 and defined in /home/xxx/www/cadastro/library/Zend/Application/Bootstrap/Bootstrap.php on line 46 Notice: Undefined variable: application in /home/xxx/www/cadastro/library/Zend/Application/Bootstrap/Bootstrap.php on line 48 Fatal error: Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Invalid application provided to bootstrap constructor (received "" instance)' in /home/xxx/www/cadastro/library/Zend/Application/Bootstrap/BootstrapAbstract.php:438 Stack trace: #0 /home/xxx/www/cadastro/library/Zend/Application/Bootstrap/BootstrapAbstract.php(102): Zend_Application_Bootstrap_BootstrapAbstract->setApplication(NULL) #1 /home/xxx/www/cadastro/library/Zend/Application/Bootstrap/Bootstrap.php(48): Zend_Application_Bootstrap_BootstrapAbstract->__construct(NULL) #2 /home/xxx/www/cadastro/index.php(41): Zend_Application_Bootstrap_Bootstrap->__construct() #3 {main} thrown in /home/xxx/www/cadastro/library/Zend/Application/Bootstrap/BootstrapAbstract.php on line 438 sendo que coloquei no index.php : require_once 'application/Bootstrap.php'; $bootstrap = new Bootstrap(); $bootstrap->run(); e criei o Bootstrap.php em application ficando desta forma: <?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { $moduleLoader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH)); return $moduleLoader; } } At. Compartilhar este post Link para o post Compartilhar em outros sites
srnetcave 1 Denunciar post Postado Dezembro 3, 2009 Adicione estas linhas no seu application/configs/application.ini, no seu ambiente de produção ou desenvolvimento. includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" Agora no seu public/index.php <?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->bootstrap() ->run(); Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 21, 2009 Opa Xara só pra esclarecer, o que te confundiu foi que voce estava usando um estilo de programação Zend, depois te passaram um novo conceito que é o Zend_Application, que alias eu prefiro programar assim, facilita muito e ficou mais pratico agora sobre uma duvida sua que eu percebi quando se usa o autoload nao precisa mais usar o Zend_Loader::loadClass() no meu exemplo expliquei o uso do: Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true); que serve exatamente para isso, antes da versão 1.8 do Zend se usava: Zend_Loader::registerAutoload(); tenho varios exemplos meus que se o pessoal baixar e usar com a ultima versão do Zend não ira funcionar :natal_sad: , preciso fazer novos exemplos :natal_laugh: mas então com o Zend_Application nao precisa fazer do jeito que eu mostrei acima, poderia seguir a dica do nosso amigo srnetcave e colocar no Bootstrap, só que tem mais uma facilidade do Zend_Application quem nem no Bootstrap precisa colocar nada basta colocar autoloadernamespaces no application.ini que o Zend carregará automaticamente suas classes um exemplo: autoloadernamespaces.0 = "Zend_" autoloadernamespaces.1 = "ZendX_" autoloadernamespaces.2 = "Zend_" autoloadernamespaces.3 = "Plugins_" exemplo do arquivo: <?php class Plugins_Security extends Zend_Controller_Plugin_Abstract { } toda classe que começar com essas iniciais acima ira abrir automaticamente boas festas :natal_noel: Compartilhar este post Link para o post Compartilhar em outros sites