Ir para conteúdo

POWERED BY:

Arquivado

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

fm_rac

login do fabyo

Recommended Posts

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

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

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

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

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

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

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

×

Informação importante

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