cheap dedicated servers

Newton Wagner se desenvolvendo na web

9Feb/070

Studs framework para PHP

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().

Artigos Relacionados:

Tagged as: , No Comments
22Jan/074

Comparação de Frameworks PHP

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.

Artigos Relacionados:

Tagged as: , 4 Comments
17Jan/071

Rapyd com Code Igniter

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.

Artigos Relacionados:

15Dec/062

Code Igniter: Estendendo o Controller

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.

Artigos Relacionados:

12Dec/060

Bug estendendo o Code Igniter: MY_Model

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.

Artigos Relacionados:

Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.