Views complexas com o Zend Framework: Parte 2

April 23rd, 2007 by newton

Saiu a segunda parte do artigo que fala sobre como trabalhar com Views mais complexas no Zend Framework. No artigo, o autor fala sobre o uso do pattern View Helper, implementado no ZF, pra fazer o trabalho sujo de inserir Views dentro de Views ou colocar um pouco de lógica na camada de visualização.

Novidades no Code Igniter

April 23rd, 2007 by newton

Uns tempos atrás Rick Ellis, autor do Code Igniter, anunciou que daria novos rumos ao framework, dando mais importância para o projeto. Começou convidando o Derick Allard, figura conhecida no fórum de discussão oficial, pra colaborar e disponibilizando um repositório público.

Fiquei uns tempos sem codificar, e como direcionei minhas atenções para o Zend Framework, parei de acompanhar as evoluções do CI, até hoje que tive que dar uma olhada no User Guide, e fiquei surpreso com a revolução que fizeram por lá. Site novo, logo nova, fórum novo e até uma nova release (1.5.3). Vale a pena dar uma conferida.

Aplicações complexas com Zend Framework

April 19th, 2007 by newton

Um grupo de desenvolvedores PHP decidiu criar uma aplicação, baseada no exemplo de PetShop do J2EE, utilizando o Zend Framework, do “Hello World” até a aplicação funcional. O bom disso tudo é que eles vão disponibilizar o código fonte e, provavelmente, compartilhar as soluções para as dificuldades encontradas no desenvolvimento.

Você pode ver os primeiros passos no artigo Complex Web Pages with Zend Framework. Se você não entende inglês, ou está afim de ir direto pro código fonte, pode ir também direto pro repositório em: http://w3style.co.uk/devnet-projects/pet-store/trunk/.

No momento em que escrevo este arquivo, eles já disponibilizaram toda a estrutura da aplicação com o “Hello World”. Bom pra visualizar como eles trabalharam as configurações básicas do framework e o bootstrap file do ZF.

A discussão agora é como implementar a camada de Views, já que construir visualizações mais complexas, com chamadas de views compostas pode se tornar um problema. A seguir, cenas do próximo capítulo. :)

Mais Zend Framework

April 5th, 2007 by newton

Continuo lendo sobre o Zend Framework internet à fora. Queria agradecer o Adler, que vez ou outra me dá uma força também. :). Bem, seguem dois links úteis para quem quiser, também, se aventurar no ZF:

Estou enfrentando um problema com POST vars e o mod_rewrite. Quando passo um formulário para um endereço tipo http://dominio/controle/metodo/, o array global $_POST vem sempre vazio. Se eu direciono pra http://dominio/index.php funciona normalmente. Até achei uma pessoa com o mesmo problema que eu, mas solução que é bom, até agora nada.

Estou subindo os arquivos pra um servidor Linux pra ver se o problema persiste, já que estou rodando o Apache em uma máquina Windows. Se você já teve algum problema parecido, deixe um comentário para trocarmos algumas idéias, principalmente se tiver a solução. rs.

[Update] No servidor Linux funcionou perfeitamente.

Visitando o Zend Framework

March 29th, 2007 by newton

Esses dias, depois de tanto ouvir falar (ou ler?) sobre o Zend Framework, tomei vergonha na cara e fui dar uma pesquisada sobre ele. Pelo que vi até agora, acho que é mais uma ótima opção de framework para o PHP.

Algumas funcionalidades do ZF:

  • Documentação detalhada, já sendo traduzida para o Português (valeu Adler);
  • Implementa o padrão MVC (Model-View-Controller);
  • É possível estender a framework facilmente;
  • Componente para conexão com Banco de Dados, que utiliza a PDO;
  • Componentes de Autenticação e Controle de Acesso;
  • Componente para aplicações multi-linguagem;
  • Componentes para Web Services (XmlRpc e Rest);
  • Integração com APIs de sites como Flickr, Amazon e Delicious, dentre outros;
  • Outras funcionalidades como: Log, Cache, Debug, Json, Email, PDF, Feeds (RSS/Atom) e Validações de Entrada de Dados

Como podemos notar, ela atende desde algumas “necessidades básicas” para um desenvolvimento organizado, como as camadas do MVC ou Logs e Validações, até ferramentas como as integrações com as APIs de grandes serviços da web, oferecendo uma vasta quantidade de componentes para o desenvolvedor.

Estou tendo pouco tempo pra desenvolver alguma coisa, e por enquanto só estou lendo o manual. Porém, já deu pra perceber que, se você está procurando um framework mais consolidado, acho que pode parar de procurar. Como o projeto leva o nome da Zend, acho que as chances de ser descontinuado são menores do que em outros bons projetos que acabam por falta de incentivo ou gente pra contribuir, como o Studs.

Vou ver se consigo fazer uma série de artigos sobre alguns componentes do ZF. Enquanto isso, você pode ver o artigo “Zend Framework para um PHP mais poderoso“, de Felipe Tonello, que dá uma visão geral e os primeiros passos do framework.

Studs framework para PHP

February 9th, 2007 by newton

Graças a algumas mudanças aqui no trabalho, tivemos que repensar o uso do Code Igniter como framework para os sistemas PHP. A idéia é aproximar programadores Java e PHP, e fazer com que ambos sejam capazes de desenvolver em qualquer uma das duas linguagens. Por isso eu disse que estava bebendo do café, uns tempos atrás.

Pra facilitar o trabalho de todo mundo, e até mesmo facilitar o entendimento da framework Struts do Java, pelos programadores PHP, resolvemos testar alguns portes desta aplicação. Com a ajuda do Leonardo Rodrigues, que programa Java e PHP, adotamos o Studs por ela ser, segundo ele, bem fiel ao Struts.

Achei a documentação um pouco fraca, e não esclarece muito como a framework funciona, mas entender o funcionamento das coisas, pelo menos até aqui, não foi muito difícil.

De cara o Leonardo achou uma diferença entre o Struts e o Studs, que é a possibilidade de definir qual método da classe será acionado pela action, configurado pela propriedade parameter do elemento action no struts-config.xml. Mas nada que uma mexida no núcleo não resolva. :). Basta abrir o arquivo RequestProcessor.php, na pasta WEB-INF/studs/action/. Procure o método processActionExecute. Segue o método alterado:


function &processActionExecute(&$request, &$response, &$action, &$form, &$mapping)
{
	$parameter = $mapping->getParameter() ? $mapping->getParameter() : 'execute';

	// try {
	$result =& $action->$parameter($mapping, $form, $request, $response);
	//$result =& $action->execute($mapping, $form, $request, $response);
	// } catch (RootException $e) {
	if ($e = catch_exception())
	{
		$result =& $this->processException($request, $response, $e, $form, $mapping);
	}
	// }

	return $result;
}

Dessa forma você não precisará fazer uma classe pra cada Action, e, se não definir um parameter, o Struds vai assumir o comportamento padrão, que é executar o método execute().

Comparação de Frameworks PHP

January 22nd, 2007 by newton

Vi só agora no blog do Elton Luís Minetto um link para um TCC (Trabalho de Conclusão de Curso) com uma comparação entre três famosas frameworks desenvolvidas em PHP: PRADO, Symfony e CakePHP, disponível em PDF.

É uma boa pra quem pretende escolher a dedo qual framework utilizar, ou apenas aprender mais sobre elas.

Veja mais informações sobre frameworks também aqui mesmo no blog.

Rapyd com Code Igniter

January 17th, 2007 by newton

Voltando aos meus estudos do Code Igniter, acabei encontrando no Blog do Deco uma espécie de estensão da framework, que é o Rapyd. Ele oferece uma série de componentes, agilizando ainda mais o desenvolvimento da sua aplicação.

Dei uma olhada rápida até aqui, mas achei bem interessante e já baixei a instalação pra testar mais tarde. Por enquanto você pode ir dando uma olhada também em alguns exemplos e no guia do usuário, que é bem prático, assim com a documentação do CI.

Code Igniter: Estendendo o Controller

December 15th, 2006 by newton

Continuando a adaptação da framework Code Igniter para utilização no meu projeto, e também para utilização no meu trabalho, desta vez vou falar de como estender o Controller para sempre carregar uma visualização padrão, e inserir nela a view de conteúdo.

Como já disse anteriormente, para criar extensões das core classes do CI, devemos salvar o arquivo com na pasta application\libraries, com o prefixo MY_. Nesse caso, teremos o arquivo MY_Controller, e a classe de mesmo nome.

Vamos para o código, depois eu explico os detalhes:

class MY_Controller extends Controller
{
	/**
	 * metodo construtor da classe
	 */
	function MY_Controller()
	{
		parent::Controller();
	}
	/**
	 * mostra a view definida utilizando uma estrutura pre-definida
	 * @param	[str] nome da view a ser exibida
	 * @param	[arr] array com os dados da view a ser exibida
	 */
	function _mostrar($nmView, $viewData)
	{
		$conteudo = $this->_carregarConteudo($nmView, $viewData);
		$data = array(
			"conteudo" => $conteudo
		);
		$this->load->view('estrutura', $data);
	}
	/**
	 * carrega a view a ser inserida em uma estrutura pre-definida
	 * @param 	[str] nome da view a ser inserida
	 * @param 	[arr] array com os dados da view a ser exibida
	 * @return 	[vew] objeto de View para ser incluido
	 */
	function _carregarConteudo($nmView, $viewData)
	{
		return $this->load->view($nmView, $viewData, TRUE);
	}
}

Criamos o metodo _mostrar(), que deve ser utilizado nas suas classes de controle para exibir uma view (ao invés de usar $this->load->view()). O método _carregarConteudo() não é totalmente necessário para este exemplo, mas ele é responsável por carregar a view de conteúdo da sua página, ou seja, o que será inserido dentro da view geral.

Nossas classes de controle da aplicação, agora teriam funcionamento parecido ao desta:

class Meucontrole extends MY_Controller
{
	function Meucontrole()
	{
		parent::MY_Controller();
	}
	function index()
	{
		$data = array("var"   => "valor");
		$this->_mostrar('minhaview', $data);
	}
}

Declaramos a classe estendendo de MY_Controller, definimos o método construtor, e, no método de exibição, definimos “var” para ser utilizada na view “minhaview“, através do método _mostrar() que criamos anteriormente. Dessa forma, o conteúdo de “minhaview” será inserido na view “estrutura“, através da variável conteudo.

Este é mais um exemplo simples, que pode ser incrementado conforme suas necessidades. Pode-se criar chamadas de Menus dinâmicos, Banners de Publicidades, tudo automaticamente, sem precisar carregá-los em todo controle que você criar.

Bug estendendo o Code Igniter: MY_Model

December 12th, 2006 by newton

No meu artigo sobre como estender o Core do Code Igniter, eu informei sobre um possível bug que não nos permite criar nosso MY_Model, como manda o user guide da framework.

Reportei o bug no fórum e até hoje não obtive resposta do desenvolvedor do CI, mas acredito que a solução que encontrei é aceitável. A alteração deve ser realizada no arquivo Loader.php, que está na pasta system\libraries. No método model() desta classe, temos o seguinte trecho:

if ( ! class_exists('Model'))
{
    require_once(BASEPATH.'libraries/Model'.EXT);
}

Ou seja, ele carrega a classe Model, mas não realiza nenhuma verificação se criamos alguma estensão (MY_Model). Para resolver o problema, verifiquei que existe uma função que executa esta tarefa de carregar uma classe buscando por extensões. Logo, bastava utilizá-la. No lugar do código anterior, coloquei a chamada para a função:

load_class('Model', false);

O if não é necessário, pois a função também realiza esta verificação. O segundo parâmetro é utilizado para que a classe não seja instanciada, apenas carregada. Assim, evitamos o problema de instanciar classes, dentro de um controle, sem que elas tenham sido definidas.

Fechar
Envie por e-mail