WarLiKe 0 Denunciar post Postado Abril 12, 2010 Olá pessoal, Sou iniciante em ZF e estou o dia inteiro tentando fazer o ZF carregar meu module dinamicamente de acordo com o que eu digito na URL Ex: www.meudominio.com.br/painel/login/index painel = modulo; login = controller; index = action; O controller e a action de acordo com meu script atual carregam . . . mas o module não ta . . . . sejá lá o que for q eu digito no modulo, ele carrega o modulo de painel. minha estrutura de diretorio esta resumidamente assim: app ----painel -------controllers -------model -------views ----sites -------controllers -------model -------views library etc . . . meu bootstrap ta assim: Zend_Loader::loadClass('Zend_Loader_Autoloader'); $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace('Painel'); $controlador = Zend_Controller_Front::getInstance(); $controlador->setDefaultModule('painel'); $router = $controlador->getRouter(); $route = new Zend_Controller_Router_Route('/:module/:controller/:action/*', array("module" => ":module", "controller" => "index", "action" => "index")); $router->addRoute('painel',$route); $controlador->throwExceptions(true); $controlador->setControllerDirectory('./app/' . $controlador->getDefaultModule() . '/controllers'); coloquei só o necessário, o restante é de cookies e registro. Olha lá no código . . . eu peço pra carregar o :module e nada . . . deve ser o $controlador->setDefaultModule('painel'); mas se eu tiro da erro ¬¬'' Alguém tem uma solução pra isso? Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Abril 12, 2010 Esse seu "só o necessário" ainda tem coisa pra caramba :P Tenta assim: $dirs = array( 'admin' => APPLICATION_PATH . 'admin' . DS . 'controllers' . DS, 'portal' => APPLICATION_PATH . 'portal' . DS . 'controllers' . DS ); Zend_Controller_Front::getInstance() -> throwExceptions( TRUE ) -> returnResponse( TRUE ) -> setControllerDirectory( $dirs ) -> setDefaultModule( 'portal' ); No caso, APPLICATION_PATH é minha constante que aponta para o diretório /application: define( 'DS', DIRECTORY_SEPARATOR ); define( 'BASEPATH', getcwd() . DS ); define( 'APPLICATION_PATH', BASEPATH . 'application' . DS ); E ainda tem a questão da nomenclatura das classes. Como viu, eu defini o módulo portal como sendo o padrão, isto é, para que ao acessar www.meusite.com, seja carregado o IndexController.php de /potal/controllers. Essas classes, do módulo padrão, você nomeia igual ao nome do arquivo, porém, obviamente, sem a extensão. Já as classes do módulos recebem o prefixo Nomedomodulo_, assim, a classe do arquivo /admin/controllers/IndexController.php deverá ser Admin_IndexController. ATENÇÃO! Se você estiver programando no Windows lembre-se de que esse trambolho de[/b] sistema operacional (o qual ainda sou escravo também) é case-insensitive, então mesmo que não respeite o case das classes, vai funcionar. Mas, quando transferir para o Servidor online, que normalmente é Linux, vai dar problema. O ZF transforma os nomes das classes primeiro tudo para minúsculas, depois capitaliza elas, portanto: class ADMIN_IndexController Funcionará normalmente no Windows, mas no Linux não pois o correto seria: class Admin_IndexController Falo por experiência http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
WarLiKe 0 Denunciar post Postado Abril 13, 2010 Cara, primeiramente quero agradecer por estar dando essa força ai pra mim, como pode ver pelo código eu sou mesmo iniciante em ZF rs. Vou postar como esta meu Bootstrap todo: <?php include 'Zend/Loader.php'; include 'Zend/Session.php'; class Bootstrap{ public function __construct(){ Zend_Loader::loadClass('Zend_Loader_Autoloader'); Zend_Loader_Autoloader::getInstance()->registerNamespace('Painel'); $SSID = isset($_COOKIE['ssid']) ? $_COOKIE['ssid'] : false; if(empty($SSID)) $SSID = false; if($SSID){ Zend_Session::setId($SSID); } else { $SSID = md5(uniqid(date('d/m/Y H:i:s') . $_SERVER['HTTP_USER_AGENT'])); Zend_Session::setId($SSID); } Zend_Session::start(); setcookie('ssid', $SSID, time() + (SESSION_TIME_LIMIT * 60)); $dirs = array( 'portal' => APPLICATION_PATH . 'portal' . DS . 'controllers' . DS); Zend_Controller_Front::getInstance() ->returnResponse(true) ->throwExceptions(true) ->setControllerDirectory($dirs) ->setDefaultModule('portal'); $conexao = new Zend_Db_Adapter_Mysqli(array('host' => CON_HOST, 'username' => CON_USER, 'password' => CON_PASS, 'dbname' => CON_DB, 'port' => 3306)); $authAdapter = new Painel_Auth_Adapter_Login($conexao, 'md5(?)'); Zend_Registry::getInstance()->set('conexao', $conexao); Zend_Registry::getInstance()->set('auth', $authAdapter); Zend_Controller_Front::getInstance()->dispatch(); } } Dentro da minha pasta app (application) tenho minha pastinha controllers como diz ali na variável dirs e tem um arquivo chamado IndexController.php assim: <?php class Portal_IndexController extends Zend_Controller_Action{ public function indexAction(){ $this->view->texto= 'Olá Mundo!'; } } As constantes estão num arquivo config.php incluida dentro da Index. O namespace painel é de uma pastinha dentro da library. quando rodo a aplicação da um erro que estou tentando resolver aqui. Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller class ("IndexController")' in F:\Web\zend\library\Zend\Controller\Dispatcher\Standard.php:346 Stack trace: #0 F:\Web\zend\library\Zend\Controller\Dispatcher\Standard.php(256): Zend_Controller_Dispatcher_Standard->loadClass('IndexController') #1 F:\Web\zend\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #2 F:\Web\zend\app\Bootstrap.php(42): Zend_Controller_Front->dispatch() #3 F:\Web\zend\index.php(20): Bootstrap->__construct() #4 {main} thrown in F:\Web\zend\library\Zend\Controller\Dispatcher\Standard.php on line 346 Tem idéia do que pode ser? Compartilhar este post Link para o post Compartilhar em outros sites
WarLiKe 0 Denunciar post Postado Abril 13, 2010 Opa . . . . resolvi isso aqui era esse returnResponse(true) eu tirei e começou a rodar direito vou testar mais aqui o restante (outros módulos) Compartilhar este post Link para o post Compartilhar em outros sites
WarLiKe 0 Denunciar post Postado Abril 13, 2010 Aew ImageStudio Deu certinho agora XD O engraçado é que eu adicionei um módulo de teste chamado "teste" e nos controllers de teste eu tenho que colocar Teste_IndexController extends . . . . . (exemplo) e na do portal que é a default não posso colocar se não da erro (Portal_IndexController) Mas tudo bem, o importante é que ta funcionando como eu queria . . . . vlw mesmo a ajuda cara XD Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Abril 13, 2010 Bom que resolveu, mas devo mencionar que essa sua observação foi considerada na minha resposta, na parte referente à nomenclatura de classes que eu fiz questão de incluir pois tive o mesmo problema quando migrei meu Bootstrapp para Orientado a Objetos. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
WarLiKe 0 Denunciar post Postado Abril 13, 2010 É verdade cara . . . axo q deixei passar essa observação sem querer hehe . . foi mal! Mas é isso aew . . . vlw mesmo =] Compartilhar este post Link para o post Compartilhar em outros sites