Zend

Enviada por João Carlos 
João Carlos
Zend
03 de September de 2012 às 06:45PM
Salve!!!!
Mais uma vez venho recorrer a vocês para tentar solucionar um problema que esta me fazendo perder dias.

Estou reproduzindo um ambiente PHP descrito no livro ZEND FRAMEWORK do Flavio Lisboa;

Meus diretórios estão nesta ordem:
C:\wamp\www\library\Zend\...
C:\wamp\www\dancebook\index.php
C:\wamp\www\dancebook\app\...
C:\wamp\www\dancebook\app\controllers\...
C:\wamp\www\dancebook\app\models\...
C:\wamp\www\dancebook\app\views\...
C:\wamp\www\dancebook\app\.htaccess
C:\wamp\www\dancebook\app\Bootstrap.php
C:\wamp\www\dancebook\app\path.php


minha classe .htaccess:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteBase /dancebook
RewriteRule ^(.*)$ index.php
</IfModule>

Minha Class path:
<?php
$operatingSystem = stripos($_SERVER['SERVER_SOFTWARE'],'win32')!== FALSE ? 'WINDOWS' : 'LINUX';
$bar = $operatingSystem == 'WINDOWS' ? '\\' : '/';
$pathSeparator = $operatingSystem == 'WINDOWS' ? ';' : ':';
$documentRoot = $operatingSystem == 'WINDOWS' ? str_replace('/', '\\', $_SERVER['DOCUMENT_ROOT']) : $_SERVER['DOCUMENT_ROOT'];
$path = $pathSeparator.$documentRoot.$bar.'library';
$path .= $pathSeparator.$documentRoot.$bar.basename(getcwd()).$bar.'app'.$bar.'models';
set_include_path(get_include_path().$path);
?>


Minha classe Bootstrap:
<?php
include('Zend/Loader.php');
class Bootstrap{
public function __construct($self){
Zend_loader::loadClass('Zend_Controller_Front');
$baseUrl = substr($self, 0, strpos($self, '/index.php'));
$frontController = Zend_Controller_Front::getInstance();
$frontController->setbaseUrl($baseUrl);
$frontController->setControllerDirectory('./app/controllers');
$frontController->throwExceptions(FALSE);
$frontController->dispatch();
}
} ?>

Minha index.php
<?php
require('app/path.php');
require('app/Bootstrap.php');
new Bootstrap($_SERVER['PHP_SELF']);

Estou recebendo o seguinte erro:
Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in C:\wamp\www\library\Zend\Controller\Dispatcher\Standard.php:252 Stack trace: #0 C:\wamp\www\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\wamp\www\dancebook\app\Bootstrap.php(11): Zend_Controller_Front->dispatch() #2 C:\wamp\www\dancebook\index.php(5): Bootstrap->__construct('/dancebook/inde...') #3 {main} thrown in C:\wamp\www\library\Zend\Controller\Dispatcher\Standard.php on line 252


Um die(print_r($_SERVER,1)) deu o seguinte resultado:

Array
(
[HTTP_HOST] => localhost
[HTTP_CONNECTION] => keep-alive
[HTTP_CACHE_CONTROL] => max-age=0
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
[HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch
[HTTP_ACCEPT_LANGUAGE] => pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
[HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.3
[HTTP_DNT] => 1
[PATH] => C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;
[SystemRoot] => C:\Windows
[COMSPEC] => C:\Windows\system32\cmd.exe
[PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
[WINDIR] => C:\Windows
[SERVER_SIGNATURE] =>
[SERVER_SOFTWARE] => Apache/2.2.21 (Win32) PHP/5.3.8
[SERVER_NAME] => localhost
[SERVER_ADDR] => 127.0.0.1
[SERVER_PORT] => 80
[REMOTE_ADDR] => 127.0.0.1
[DOCUMENT_ROOT] => C:/wamp/www/
[SERVER_ADMIN] => admin@localhost
[SCRIPT_FILENAME] => C:/wamp/www/dancebook/index.php
[REMOTE_PORT] => 53393
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /dancebook/index.php
[SCRIPT_NAME] => /dancebook/index.php
[PHP_SELF] => /dancebook/index.php
[REQUEST_TIME] => 1346697715
)

Alguém pode ajudar a descobrir a cauda do erro?
Desde já agradeço.
Marcos Regis
Re: Zend
03 de September de 2012 às 06:55PM
O erro diz que vocÊ está chamando um controller que não existe.


isso aqui não deveria ser necessário

new Bootstrap($_SERVER['PHP_SELF']);

Reveja os códigos de acordo com o seu livro e se mesmo assim não conseguir, abandone esse livro e parta para os exemplos da documentação oficial do Zend.
João Carlos
Re: Zend
03 de September de 2012 às 09:57PM
Opa Marcos, mas ele não esta reclamando do
new Bootstrap($_SERVER['PHP_SELF']);

E sim do $frontController->dispatch();

Método valido,
http://framework.zend.com/manual/en/zend.controller.front.html

pesquisei revi tudo mas o erro realmente não procede, ja estou no segundo dia com esse problema, espero que possam ajudar.

grato.
João Carlos
Re: Zend
03 de September de 2012 às 10:03PM
Veja aqui uma visualização da variável ($frontController) que faz referencia a classe:
o print_r foi dado no Bootstrap antes do dispatch(), onde ocorre o erro


Zend_Controller_Front Object
(
[_baseUrl:protected] => /dancebook
[_controllerDir:protected] =>
[_dispatcher:protected] => Zend_Controller_Dispatcher_Standard Object
(
[_curDirectory:protected] =>
[_curModule:protected] => default
[_controllerDirectory:protected] => Array
(
[default] => ./app/controllers
)

[_defaultAction:protected] => index
[_defaultController:protected] => index
[_defaultModule:protected] => default
[_frontController:protected] =>
[_invokeParams:protected] => Array
(
)

[_pathDelimiter:protected] => _
[_response:protected] =>
[_wordDelimiter:protected] => Array
(
[0] => -
[1] => .
)

)

[_invokeParams:protected] => Array
(
)

[_moduleControllerDirectoryName:protected] => controllers
[_plugins:protected] => Zend_Controller_Plugin_Broker Object
(
[_plugins:protected] => Array
(
)

[_request:protected] =>
[_response:protected] =>
)

[_request:protected] =>
[_response:protected] =>
[_returnResponse:protected] =>
[_router:protected] =>
[_throwExceptions:protected] =>
)
1
Marcos Regis
Re: Zend
05 de September de 2012 às 05:56PM
Infelizmente não consigo ver onde pode estar o erro.
Suspeito que possa estar em uma dessas definições
$frontController->setbaseUrl($baseUrl);
$frontController->setControllerDirectory('./app/controllers');

Tente definir o diretorio usando o caminho absoluto ao invés do caminho relativo
João Carlos
Re: Zend
06 de September de 2012 às 02:33PM
De qualquer forma agradeço pelo interesse. acho mesmo que a maneira que estou chamando os métodos estão ultrapassados apesar de o livro ter sido escrito recentemente. vou refazer seguindo a documentação como sugeriu.

Obrigado.
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.