Estendendo o Core do Code Igniter

December 1st, 2006 by newton

Uma das razões que nos faz utilizar uma framework é poupar tempo. Porém, as vezes é preciso fazer algumas adaptações para melhorarmos ainda mais a eficiência no desenvolvimento da aplicação. É aí que a framework precisa oferecer flexibilidade.

Como já disse anteriormente, estou utilizando o Code Igniter para desenvolver um projeto pessoal, e vou mostrar o princípio de uma pequena adaptação que vai me poupar muito tempo e várias linhas de código.

A framework possui uma funcionalidade chamada Active Records, que simplifica os comandos básicos de acesso ao banco (Select, Update, Delete e Insert). Veja um exemplo de um Insert, tirado do próprio user guide:

$data = array(
               'title' => $title,
               'name' => $name,
               'date' => $date
);
$this->db->insert('mytable', $data);

Simples, porém, pra utilizar este método dentro de um método inserir() numa classe de modelo, eu preciso sempre especificar a tabela e seus campos em um array com seus respectivos valores.

Utilizando Modelos que representam as Tabelas do meu banco, isto é, a classe conter atributos iguais aos campos das tabelas, podemos criar uma estensão da classe Model para não ter trabalho com estes métodos, e fazer nossos modelos estenderem desta nova classe.

O código abaixo deverá ser colocado num arquivo chamado MY_Model.php dentro do diretório application\libraries, que o CI se encarrega de carregá-la pra você (1).

class MY_Model extends Model
{
    var $nmTabela;
    var $nmCampoId;

    /**
    * metodo construtor da classe
    * @param    [str] nome da tabela do objeto
    * @param    [str] nome do campo identificador do objeto
    */
    function MY_Model($nmTabela, $nmCampoId)
    {
        $this->nmTabela  = $nmTabela;
        $this->nmCampoId = $nmCampoId;

        parent::Model();
    }

    /**
    * metodo de insercao no banco
    * @param    [arr] array com os dados do objeto para insercao do banco
    * @return   [boo] sucesso ou falha no processo
    */
    function inserir($arrDados)
    {
        $atributos = get_class_vars( get_class($this) );
        foreach ($atributos as $nmAtributo => $valor)
        {
            if ( ($nmAtributo != 'nmTabela') && ($nmAtributo != 'nmCampoId') )
                $this->$nmAtributo = $arrDados[$nmAtributo];
        }

        return $this->db->insert('usuarios', $this);
    }
}

Dessa forma, toda classe de modelo da sua aplicação terá um método inserir() onde você só precisa passar por parâmetro um array (provavelmente vindo de um formulário) com o nome dos campos da classe e seus valores. O método se encarrega de definir os valores para os atributos do objeto e chamar a função de inserção.

Como o artigo ficou um pouco grande, resolvi omitir os métodos alterar() e excluir(), mas o arquivo completo está disponível para download aqui. Este foi apenas um exemplo simples do que podemos fazer em cima de uma boa estrutura.

(1) - Apesar do que diz o manual, o Code Igniter não carrega o MY_Model automaticamente. E não adianta também usar o autoload, pois ali o Model ainda não foi carregado. Você pode criar um MY_Controller que executa a chamada do MY_Model automaticamente, usando: $this->load->model('model');. Acredito que seja um bug do CI, mas ainda vou verificar com mais calma.

Framework Code Igniter

November 24th, 2006 by newton

Dando início aos estudos de frameworks PHP, vou falar um pouco sobre a que eu estou planejando adotar para trabalhar em um projeto pessoal. Apesar de não ter avaliado as outras fws disponíveis, como estou sem muito tempo, a maneira de testar vai ser usando.

Framework Code IgniterOuvi muita gente falando bem do Code Igniter, e resolvi dar esse voto de confiança. :)

Pra começar, gostei muito do guia do usuário. Explica o básico sobre o funcionamento do framework, fazendo que você passe pelas 3 camadas do MVC em um piscar de olhos. Além disso, explica algumas particularidades da framework, com uma linguagem tranquila e muitos exemplos.

A participação da comunidade é bem ativa, e a primeira dúvida que eu tive sobre a existência de uma funcionalidade nativa da framework (ou se eu teria que implementar), encontrei rapidamente no fórum, que tem uma boa quantidade de posts.

Com a mão na massa, em poucas horas já comecei a me sentir a vontade, implementando algumas melhorias estendendo algumas classes do núcleo da fw. Estou apenas começando, mas já acredito que ela vai cumprir seu papel e me poupar muitas horas de programação, além de me oferecer uma boa organização do código. Com o tempo, vou postando aqui mais informações sobre minha experiência com o Code Igniter.

Obs.: Para os fãs do CakePHP, entrei em contato com o dono do site cakephp.com.br e ele ficou de escrever a respeito da fw. Vamos aguardar…

Por que é tão dificil encontrar bons programadores?

November 23rd, 2006 by newton

[atualização]Incrível, mas o artigo foi removido da base do Web Insider. Não sei se foi a administração do site ou o próprio autor, mas acho que não poderia ter sido feito nada pior.[/atualização]

Em artigo publicado no Web Insider, Marcelo Okano (já citado aqui anteriormente) nos dá a visão das agências na contratação de programadores, fazendo a pergunta: Por que é tão difícil encontrar bons programadores?

O artigo começa muito bem, falando sobre as complexas questões do mercado de trabalho na área de desenvolvimento, porém, depois o autor inicia uma série de generalizações, indicando uma marginalização dos profissionais da área.

Não vou me aprofundar nos trechos que dizem coisas como: passou pela cabeça do programador limpar as bases de dados e apagar os arquivos. Se passou pela cabeça do programador, poderia ter passado na cabeça do médico, do eletricista, do mecânico e de qualquer profissional picareta que existe por aí. É preciso lembrar que esse tipo de atitude não está relacionada à área profissional, e sim à pessoa.

Eu credito essa “dificuldade” de se encontrar bons programadores, ao próprio mercado, que atravessa uma fase de carência por profissionais, gerando uma enorme quantidade de oportunidades. Quem oferece as melhores condições de trabalho, fica com os melhores profissionais, e é aí que as agências podem estar encontrando tal dificuldade. Olhando de fora (nunca trabalhei em agência), eu acredito que o profissional disputado entre as agências sejam os publicitários.

Sendo assim, as agências, ao invés de contratar estagiários ou programadores inexperientes acreditando que eles conseguirão gerenciar um projeto de desenvolvimento do dia pra noite sem cometer erros, deveriam buscar outros caminhos, como terceirização ou até mesmo investir na área, montando uma pequena fábrica de desenvolvimento própria. Depende do custo/benefício de cada solução.

Microsoft, Google e Yahoo! unidas pelo Sitemaps

November 16th, 2006 by newton

As gigantes se juntaram para unificar o protocolo Sitemaps. Você encontra mais informações sobre o protocolo no website oficial.

Frameworks em PHP

November 16th, 2006 by newton

Depois de constatar mais uma vez que a visão que muita gente tem do PHP ainda é aquela de sites e formulários, como relatei antes, fiquei pensando sobre o que pode ser feito para mudarmos essa imagem. Foi então que surgiu a idéia de divulgar as frameworks escritas na linguagem. Para isso, acredito que com a extensa comunidade PHP pode formar uma extensa rede de informações a esse respeito, e é esse o objetivo deste post: convocar a comunidade a divulgar as frameworks.

Caso você já tenha utilizado uma ou mais das frameworks abaixo, escreva sobre ela no seu blog, ou, caso não tenha um, me envie para que eu publique aqui mesmo (claro que dando os devidos créditos ao autor).

PHP, Ruby on Rails ou Java?

November 11th, 2006 by newton

Comparação PHP, Ruby on Rails e JavaUma das palestras realizadas no International PHP Conference, realizada em Frankfurt esse ano, causou uma chuva de posts revoltados lá fora. O motivo? O palestrante Tim Bray, apresentou gráficos comparativos onde o PHP perde, por muito, em facilidade de manutenção de código para o Ruby on Rails (que na verdade é uma framework) e Java.

Infelizmente eu não estava lá para saber o real contexto da palestra, apesar do próprio Tim Bray ter postado no seu blog mais informações, mas curiosamente na sexta-feira, comentei sobre isso com alguns de meus novos colegas de trabalho, e pelo que vi, eles estavam comentendo, o mesmo erro que o palestrante: culpar a linguagem por seus desenvolvedores.

Dizer que a linguagem PHP é difícil de manter, simplesmente por que muitas das aplicações são desenvolvidas com macarronada de HTML e SQL, é esquecer de se informar sobre quem desenvolveu este código. O código está ruim, por que o programador era inexperiente, ou a aplicação, geralmente opensource, foi desenvolvida por um grupo enorme de pessoas.

Assim como não podemos comparar códigos desenvolvidos por novatos do Java com gurus do PHP, também não podemos fazer o inverso, ou lá seja qual for a linguagem.

É preciso acabar com essa visão de que o PHP foi feito para construir sites e formulários para a web. Hoje existem muitas ferramentas e grandes aplicações muito bem desenvolvidas, e já é verdade que o mercado abriu os olhos para isso, pois está crescendo o número de oportunidades para bons desenvolvedores de PHP, com conhecimentos de Orientação à Objetos, design patterns e tudo mais que um bom programador deve saber. :).

Pra quem sabe inglês, alguns posts lá de fora sobre o assunto:

Estatísticas de Configuração do PHP

November 4th, 2006 by newton

Quem já programou em PHP, provavelmente conhece a função phpinfo(), que exibe uma página com as configurações do PHP. Porém, parece que nem todo mundo percebe que deixar essa informação disponível sem qualquer tipo de segurança, pode ser um facilitador para possíveis ataques ao seu servidor.

Um cara chamado Damien Seguy, encontrou diversos “phpinfos” no Google/Yahoo, e viu a oportunidade de criar uma estatística sobre configurações do PHP, como por exemplo, quantos servidores ainda habilitam register_globals e safe_mode ou, ainda, quais os sistemas operacionais e servidores web mais utilizados com PHP. Você ainda pode contribuir com a pesquisa enviando a sua configuração, em nome da pesquisa, claro (sem ironia).

Como dito pelo próprio Damien, óbviamente nenhum site de grande porte teve seu phpinfo() capturado, o que me faz pensar em até que ponto essas informações são de fato úteis no primeiro momento, pois não acredito que, assim como os grandes portais, desenvolvedores mais experientes, (e provavelmente os que nos interessaria observar suas políticas de configuração/segurança), tenham tido suas configurações capturadas pela pesquisa nos mecanismos de busca.

Pra terminar, veja se o seu phpinfo não está no Google, procure por: phpinfo site:seusite.com.

Expandindo horizontes: Linguagem Ruby

October 27th, 2006 by newton

Não sou daqueles fanáticos por programação, que estão sempre em busca da linguagem mais nova para aprender e passar horas se divertindo com novas regras de sintaxe. :D. Ta bom, exagerei um pouco, mas a verdade é que, desde que comecei a trabalhar profissionalmente com PHP, não tenho tido muito interesse em estudar outras linguagens. Não tinha.

Hoje resolvi dar uma olhada rápida nas queridinhas dos desenvolvedores web: Ruby e Python. Resolvi começar pelo Ruby.

Na wikipedia dei uma revisada geral sobre a linguagem, e, no site oficial, achei o link Ruby em vinte minutos.

Um amigo da faculdade já havia me falado da interessante Orientação a Objetos da linguagem, e comprovei isso nos meus pouco mais de 20 minutos com Ruby. Instalei no meu Linux (simples como sempre: apt-get install ruby) e comecei a fazer algumas experiências via linha de comando mesmo.

Não tive problemas para me adaptar à sintaxe, apesar de sentir falta dos delimitadores de bloco, e acredito que para os já iniciados, é uma linguagem fácil de se acostumar e com potencial para tornar o trabalho do programador mais produtivo. O próximo passo agora é testar o Ruby com um nível de complexidade mais alto, rodando sobre a framework Rails, que foi o responsável por tornar a linguagem de fato conhecida.

Para os fãs de PHP como eu, que ainda não conhecem, existe uma framework que promete oferecer a mesma produtividade que o Ruby on Rails, é o CakePHP. Será? :)

Programação do PHP Conference Brasil

October 25th, 2006 by newton

phpconferenceO grupo ProPHP e a Tempo Real Eventos divulgaram hoje a programação do PHP Conference Brasil. Mais informações no site do grupo.

Foi confirmada a participação internacional do Derick Rethans, além de uma grande diversidade de temas, discorridos por figuras conhecidas, como Pablo Dall’Oglio, Adler Medrado (Instrutor de PHP na X25 em Brasília), Eustáquio Rangel e Guilherme Blanco (ProPHP), dentre outros.

Infelizmente minha presença no evento não está garantida, já que acabei de trocar de emprego. Com menos de um mês na casa, já pedir um dia de folga é complicado. Mas como ainda não sei a política da empresa sobre isso, não custa nada tentar. Qualquer novidade eu posto aqui.

Queria parabenizar o pessoal do ProPHP pela organização do evento. Imperdível.

Rodando múltiplas versões do Firefox no Windows

October 24th, 2006 by newton

A um tempo atrás, postei aqui sobre os novos navegadores antigos, falando sobre como nós, desenvolvedores, corremos para atualizar nossos softwares, mas esquecemos que a maioria dos usuários não tem esse hábito. Dessa forma, navegadores não tão antigos (como Opera 8 e Firefox 1.0x), podem apresentar falhas de renderização, por simples descuido de nossa parte.

Vi este link em uma das listas de discussão que participo, e achei bastante útil, para quem quer ter essa preocupação. Ele explica como rodar versões diferentes do Firefox no Windows.

Com uma pesquisada rápida no Google, acabei achando esse link no Sinistras, para rodar versões diferentes também do Internet Explorer.

Fechar
Envie por e-mail