Hamilcar 1 Denunciar post Postado Setembro 19, 2010 Estou iniciando com o zendframework, criei uma estrutura do zend pela zendtool e dentro desta estrutura criei um modulo 'admin', estou tentando implementar o código de autenticação publicado no imastes, http://imasters.com.br/artigo/16900/zend/autenticacao_com_zend_framework/, o código chama tanto o principal que ficou em application, quanto o módulo admin que se encontra em 'application/modules/admin', o que acontece é que quando é criado a instancia do form de login, o zend não encontra o mesmo, criei o form no application e aí sim encontra, então eu acredito que seja alguma configuração que não estou conseguindo acertar, será que poderiam me ajudar, obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Setembro 20, 2010 Olha, toda vez que eu trabalho com módulo, eu elimino da pasta application os controllers e views, deixando tudo dentro da pasta modules mesmo. Imaginando que estamos falando em um site, temos o site (módulo default) e o painel administrativo (módulo admin). Então, a estrutura fica assim: /appplication /configs /models /modules /admin /controllers /views /scripts /default /controllers /views /scripts /translate Bootstrap.php /library /Zend /ZendX /public /imagens /estilos /scripts index.php Eu não utilizo uma pasta para os forms, porque em nenhum projeto meu que eu tenha desenvolvido até hoje, precisei utilizar um mesmo formulário em mais de um controller. Se no seu caso isto é necessário, eu sugiro que a estrutura esteja assim: /appplication /configs /forms (ou outro nome que você quiser colocar) /models /modules /admin /controllers /views /scripts /default /controllers /views /scripts /translate Bootstrap.php /library /Zend /ZendX /public /imagens /estilos /scripts index.php Lembrando que o Zend_Tool tem a opção de criar a pasta e o arquivo do form, com o método init(). Utilizando este método, creio que você não terá problemas com arquivos não localizados. Uma pergunta, você está com o Zend_Autoload funcionando? Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Hamilcar 1 Denunciar post Postado Setembro 21, 2010 Matias, obrigado por responder, estou querendo montar a estrutura e ainda estou pensando como ficará, qual a mais prática e menos problemática, a sua primeira estrutura é legal, com a estrutura que exemplifiquei, consegui fazer rodar o exemplo de autenticação com a ajuda do próprio Fernando, mas estou pensando e adotar esta estrutura com o site inteiro dentro de modules, a única alteração que ainda quero é de colocar a pasta library fora do projeto para ser usada por mais de um site, e colocar o index no mesmo nível de application e fora de public para que não precise redirecionar para a pasta public, não tenho certeza ainda, gostaria que me indicassem como proteger o diretório root, onde ficaria o index, e também as demais pastas, na estrutura que montei, só consegui rodar a aplicação quando coloquei o autoloader como abaixo: protected function _initAutoload() { return new Zend_Application_Module_Autoloader(array( 'namespace' => 'Admin_', 'basePath' => APPLICATION_PATH . '/modules/admin', )); } tentei colocar como em um exemplo do Fábio que coloca 'autoloaderNamespace[]=modulo' sem resultado, talvez alguma coisa que fiz errado, então surgiu a dúvida, como colocar mais módulos com a função acima, obrigado mais uma vez. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Setembro 21, 2010 Vamos por partes: a única alteração que ainda quero é de colocar a pasta library fora do projeto para ser usada por mais de um site Olha, dá uma olhada em como o Zend Server faz. É exatamente o que você quer. ...e colocar o index no mesmo nível de application e fora de public para que não precise redirecionar para a pasta public Aí já não sei o porque disto... Imaginemos que você contrata um provedor, que tem a seguinte estrutura, no raiz do FTP, onde public_html é o diretório raiz do site: /logs /public_html /tmp Imaginando a primeira estrutura que eu sugeri: /appplication /configs /models /modules /admin /controllers /views /scripts /default /controllers /views /scripts /translate Bootstrap.php /library /Zend /ZendX /logs /public_html /imagens /estilos /scripts index.php /tmp Veja que fazendo desta forma, todo o seu conteúdo que estava fora de public (application que não deve ficar acessível) não fica acessível pela URL, já que o DOCUMENT_ROOT fica em public_html. E sabe qual o melhor desta estrutura? Se você utiliza na sua máquina como estava na primeira sugestão e coloca no servidor como eu sugeri agora, você não precisa mudar NADA no projeto... NADA MESMO!!! Sabe porque? Olha só como é o APPLICATION_PATH definido pelo ZF. defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); Então, o ZF pega o path completo a partir do index.php, volta um diretório e pega a pasta application. E todos os outros caminhos dentro do ZF são relativos a este, então, fica 100% show de bola assim. Na minha opinião, a melhor estrutura é a montada pelo Zend_Tool mesmo, colocando o site todo em modules. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Hamilcar 1 Denunciar post Postado Setembro 21, 2010 No meu caso, o servidor configura os site assim, se temos 2 sites, site1.com e site2.com, a estrutura fica assim: /logs/ /mail/ site1.com/ site2.com/ então da maneira que eu quero o index vai ficar dentro do diretório do site e será chamado direto, agora a library eu gostaria de colocar no mesmo nível dos sites. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Setembro 21, 2010 No meu caso, o servidor configura os site assim, se temos 2 sites, site1.com e site2.com, a estrutura fica assim: /logs/ /mail/ site1.com/ site2.com/ Certo. Então, para colocar o index fora da pasta public, você precisa modificar o APPLICATION_PATH dentro do index.php, retirando o ../. agora a library eu gostaria de colocar no mesmo nível dos sites. Você tem acesso ao php.ini? Se tiver, adicione este caminho ao include_path. Se não tiver ao php.ini, modifique no index.php o caminho para library. Então, seu index.php ficaria mais ou menos assim:Estrutura de pastas: /logs/ /mail/ /site1.com/ /appplication /configs /models /modules /admin /controllers /views /scripts /default /controllers /views /scripts /translate Bootstrap.php /library /public /imagens /estilos /scripts index.php site2.com/ /appplication /configs /models /modules /admin /controllers /views /scripts /default /controllers /views /scripts /translate Bootstrap.php /library /public /imagens /estilos /scripts index.php 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(); O problema de utilizar assim é que a pasta application fica disponível para acesso direto pela URL, o que é um problema. Para bloquear o acesso, você pode utilizar .htaccess, com deny for all (acho que é assim). O que você pode fazer também é colocar o seu CMS em módulos fora, no mesmo caminho que a library e compartilhar ele entre os seus projetos, trabalhando com rotas. Por exemplo, você monta um módulo de notícias, que vai ser compartilhado entre todos os sites. Se quiser pensar nesta hipótese, sugiro dar uma olhada na lógica utilizada pelo TomatoCMS, que é feito em Zend Framework. Eu não gosto dele, acho muito lento, mas, pode ser que te ajude. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Hamilcar 1 Denunciar post Postado Setembro 21, 2010 É isto mesmo que quero, já coloquei a primeira aplicação para começar alguns testes na estrutura e por enquanto está normal, preciso realmente de proteger as pastas, pois dão acesso direto, qualquer dúvida posto novamente, obrigado a todos. Compartilhar este post Link para o post Compartilhar em outros sites