sexta-feira, 30 de setembro de 2011

Criando Helpers para o controller

Olá meus amigos tudo bem? Hoje vou falar de forma rápida (como sempre) uma forma de utilizar Helpers no Controller, ou seja nas action do ZEND FRAMEWORK.

Muitas vezes precisamos fazer coisas repetidas que refere-se a camada de negócio, um calculo, uma validação, um tratamento de string, uma rotina e etc... 
E ai pensando em reutilização buscamos uma forma prática de não precisar fazer a mesma coisa duas vezes certo? E ainda não vamos fazer coisas que não refere-se ao banco de dados na model certo?

Mas ai começam as dúvidas... Onde exatamente vou fazer essa função? Não queiro deixar em um controller específico pois e se eu precisar utilizar em outro controller? Como faço? Muito provavelmente você que utiliza o ZF vai se pergunta se existe algum helper simples como o da view...e a resposta é: SIM, EXISTE e isso chama-se ACTION HELPERS utiliza-las é tão simples como aquelas da view...

Vamos para a configuração da bixinha...
Vá em seu bootstrap e no construtor adicione:


    1. $loader = Zend_Loader_Autoloader::getInstance();
      $loader->registerNamespace('Helper_');                                             


 depois adicione esse método:

    1. protected function _initHelpers() {
    2.  Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH . '/controllers/helpers');  
    3. }                                             


Veja bem estamos ai adicionando a localização dos nossos helpers. Alguns desenvolvedores talvez reclamem isso que fiz pois estou colocando os helpers dentro de uma pasta 'helpers' no controller da minha aplicação ou seja, é claro que nesse caso não estou trabalhando com modulos... mas vc que trabalha com modulo pode facilmente apontar esses helpers para um acesso mais GLOBAL da aplicação, a idéia aqui é ensinar como montar o helper simples 

BELEEEEEEEEEEEEEEZA? 








OK então vamos dar um exemplo do uso, vou montar um helper genérico ta? Ou seja, sem algo muito util que vai receber uma string e retornar ela maiuscula, outro que retorna a quantidade de caracteres e mais algumas de string (claro que na maioria das vezes vou utilizar uma função nativa do php mas ai só uso em um lugar certo? 

Então vamos em nossa aplicação no diretório do controller que apontamos la no bootstrap (/application/controllers/helpers) e vamos criar um arquivo chamado String.php e nele fica assim:



Examplo de como utilizar um Action Helper
  1. class Zend_Controller_Action_Helper_String extends Zend_Controller_Action_Helper_Abstract {
  2.     public function maiusculo($string)
  3.     {
  4.         return strtoupper($string);
  5.     }
  6.        
  7.    public function conta($string)
  8.    {
  9.         return strlen($string);
  10.     }
  11.    public function minusculo($string)
  12.    {
  13.         return strtolower($string);
  14.     }
  15. }
Certo, criamos ai helper para string com métodos que retornam a string maiúscula, conta ela e mínuscula, veja que precisamos estender da Zend_Controller_Action_Helper_Abstract agora é só chamar o helper no controller assim:


  1. class TesteController extends Zend_Controller_Action
  2. {
  3.     public function indexAction()
  4.     {
  5.       echo $this->_helper->getHelper('String')->maiusculo('oi helper');
  6.     }
  7. }


Pronto, essa é a forma simples de utilizar, agora pense na quantidade de facilidades que vc pode fazer com esses helpers ainda mais quando for referente a processos da camada de negócio de forma repetitiva não é? 

Por hoje é só meus amigos! Aproveitando o final do post... Hey comunidade PHP em todo o brasil logo logo chega o PHP CONFERENCE 2011 e eu acho que vale apena todo mundo ir no evento, independente do conhecimento... A comunidade PHP vem evoluindo muito e para que isso continue acontecendo precisamos apoiar sempre.

PHP Conference Brasil

Eu não vou de vip, não sou palestrante e muito menos tenho ligação com os organizadores, só pretendo ir e contribuir com a comunidade e acho que vc deveria fazer o mesmo :]...

Valeuuu, e nos vemos no PHPCONFERENCE 


terça-feira, 20 de setembro de 2011

Jquery - O que há de errado com o $(this) ?

Olá amigos tudo bem? Hoje vou falar sobre um erro clássico de Javascript que os desenvolvedores WEB não percebem mas que atrapalhar legal!...
O que há de errado com o $(this) ?




Você tem um manipulador de evento que adiciona uma classe a um elemento DOM, espera um segundo usando setTimeout() e, em seguida, remove essa classe veja o script:

  1. // Exemplo do uso do this na jquery
  2. $(document).ready(function(){
  3.     $('.elemento').click(function(){
  4.     $(this).addClass('clicado');
  5.     setTimeout( function(){
  6.     $(this).removeClass('clicado');
  7. }, 1000);
  8.  });
  9. });
A classe é adicionada quando você clica isso é lógico, mas nunca é removida (ué não era para ser?).

SÉRIO?

SIMMMMM


Você confirmou que o código dentro de setTimeout() está sendo chamado, mas ele não faz nada.
Presta atenção, você já usou o removeClass() antes e confirmou que o código está correto ou seja esse método ai FUNUNNCIAAA meu =[ então qual é o problema?? 


Você está usando $(this) da mesma forma em ambos os lugares, mas ele parece não funcionar dentro da chamada a setTimeout()...


Justamente ele não vai funcionar, pois o $(this) agora não faz mais sentido... afinal... this oq ?


Mas e ai? Como eu resolvo essa JÓÇA?


Solução:
Salve this em uma variável antes de chamar setTimeout();  tipo assim:
 " var $elemento = $(this) "


Mas e ai pq isso acontece? O que é o $(this), e por que ele nem sempre funciona?


Fica mais fácil entender se separarmos em duas partes, $() e this.


O $() parece misterioso, mas não é: trata-se apenas de uma chamada de função. o $ é uma referência para a função Jquery; então, $() é simplesmente um caminho mais curto de se escrever Jquery(). É apenas uma chamada normal de função Javascript que acontece para retornar um objeto.


Bem pessoal... valeu pela atenção e até a próxima. 

sexta-feira, 9 de setembro de 2011

Mercurial e bitbucket

Olá amigos e amigas tudo bem? Hoje vou falar sobre algo que abrange muito mais que uma tecnologia. Hoje eu vou falar sobre o controle de versão MERCURIAL e ainda sobre o serviço bitbucket.

Mas espera ai o que é um controle de versão mesmo? Para que serve? 
Um sistema de controle de versão (ou versionamento), é um software com a finalidade de gerenciar diferentes versões no desenvolvimento de um documento qualquer. Normalmente ele é mais utilizado pela galera do desenvolvimento de software pois assim tornamos mais controlado o nosso desenvolvimento.



Minha intenção aqui não é explicar controle de versão, mas sim o controle de versão mercurial utilizando o Bitbucket, um serviço para vc armazenar sua aplicação de forma atualizada para produção.

Imagina que hoje você começa a desenvolver um sistema para uma loja de carros, onde nesse sistema sua empresa irá mobilizar 3 programadores...

Análise pronta, MER pronto, ambiente configurado tudo bem legal e agora?
Quem vai fazer o que?
 Como vamos mesclar isso tudo sem perder tempo arrumando conflitos inuteis como acontece com o SVN ?
NÃOOOOOOOOOOOOOOOOOOOOOOOOOOO
PERDER 10 DIAS ARRUMANDO CONFLITOS?
VOU CONTRATAR UM FAXINEIRO DE CÓDIGO
MUDAR DE EMPREGO, MUDAR A VIDA,
MAS RESOLVER COISAS SIMPLES QUE O SVN
NÃO RESOLVE NÃO DA MAISSS
=[


Nossos problemas acabaram, vamos fazer uma breve comparação (a primeira entre o mercurial e o SVN)

Vamos supor que vc e seu colega estejam trabalhando no mesmo arquivo, mas vc em um método e ele em outro... logo são lugares distintos então não tem problema pq quando utilizarmos o controle de versão ele irá mesclar de forma simples não é?

NÃO COM O SVN... ele não está nem ai para isso, mecheu no mesmo arquivo é CONFLITO... então ele te avisa sobre o conflito e vc mescla manualmente (ou deixa o automatico doido dele cagar no código...)
Agora com o mercurial... aaaa com ele não tem problema, basta mandar ele mesclar que ele faz sem problema nenhum... é simples, é indolor e é rápido....

E sabe o que é melhor de tudo? Existe um serviço online na qual vc controla tanto de forma técnica quando burocratica o desenvolvimento da sua aplicação, e ele é o bitbucket.

Então para começar a acompanhar esse artigo vc vai ai nesse site (bitbucket) cria sua conta aproveita e faz o download do mercurial eu espero ok?

Se vc utiliza o LINUX em seu computador então não vai sentir dificuldades, e se usa o WINDOWS (diferente dq a comunidade costuma a dizer) também não hehehe...

Eu não sou fanático, acho os dois S.O. utilizáveis e ao meu ver precisamos conhecer muito bem OS DOIS.

Então vamos la...

Vamos supor que vc tem o projeto do sistema chamado projetoCarros (diretório com tudo dentro).
Depois de feita a instalação do mercurial abre o console(linux) ou o prompt de comando (windows) e acesse esse diretório via comando (cd diretório...).

O primeiro comando que vc irá digitar é o comando para inicializar o projeto com o mercurial e é esse:
hg init

Estou já imaginando que vc tenha arquivos nesse documento então vamos jogar tudo no bitbucket?
adicione os arquivos e faça o commit dessa forma

hg addremove

hg commit -m "Uma mensagem qualquer entre aspas"


Vamos até o bitbucket criar um repositório chamado 'projetoCarros', para criar clique em Repositories > creaty repository .... informe o titulo, descrição e confirme.

agora de volta no seu terminal faça
hg push https://seuusuario@bitbucket.org/seuusuario/seuprojeto

Veja que o comando é hg push e o endereço, logicamente altere ai onde coloquei seuusuario para o seu usuario do bitbucket e seu projeto para o projeto que vc criou. Logo após ele irá pedir uma senha, vc informa e aperta enter, depois é só esperar um pouco que ele irá enviar os dados para o servidor. E pronto, começamos nosso controle de versão com mercurial utilizando bitbucket.
Vou colocar uma pequena lista de comandos aqui

Inserindo alterações (commits)

hg commit

    Enviando as alterações para o repositório

    hg push

      Adicionando arquivos

      hg add nomedoarquivo.ext


      Renomeando arquivos

      hg rename NomeAntigo.ext Nomenovo.ext


      Removendo arquivos

      hg remove nomedoarquivo.ext


      Recebendo as alterações do repositório

      hg pull

      Aplicando as alterações recebidas do repositório

      hg update


        Visualizando a lista de alterações

        hg log

          Outros comandos

          hg -v help
          • Esse ultimo exibe outros comandos disponibilizados pelo Mercurial


          Criando branch (ramificação)

          hg branch nomebranch

          Verificando qual branch estamos

          hg branch

          Fazendo merge com branch  

          hg merge branch

          Listar branches mercurial

          hg branches

          Update em branch

          hg update branch

          Criando um branch remoto

          hg push https://seunome@bitbucket.org/seunome/repositorio --new-branch
          • Para criar o repositório remoto vc precisa estar no repositório que quer criar no servidor ok?

          Existem ainda vários comandos mas a sintaxe do mercurial é bem simples não acham?

          Vou continuar com exemplos do dia dia e explicando em breve como resolver grandes conflitos...

          Posso ressaltar aqui que o mercurial se mostrou muito mais util que o git em algumas situações. Talvez não para mesclar e nem para voltar versão pois isso é muito similar entre os dois... Mas nas questões de deleções de arquivos feitos manualmente... na questão de mandarmos os branches para o servidor e ainda simplicidade com que ele trabalha... Ta eu ainda não sou expert com o mercurial mas ando aprendendo muita coisa interessante nele e estou gostanto muito. Vocês perceberam que no final eu nem falei mais de svn não é? Bem talvez pq o segmento seja TÃO diferente dos dois que achei mais justo comparar com um controle de versão com o nível dele próprio.


          Espero ter ajudado, esclarecido de uma forma ou de outra aspectos iniciais sobre esse controle de versão.

          Antes de fechar algumas coisas interessantes sobre o mercurial...
          1. Pq HG o inicio do comando? Pq hg é o tipo do mercurio na tabela periódica
          2. E pq o bitbucket chamou atenção? Pois em diversos aspectos ele é mais organizado e ainda seu código pode ser fechado (isso é bom quando vc esta fazendo uma aplicação para um cliente) e o melhor? O serviço é gratuito, caso queira trabalhar com mais de 3 desenvolvedores a taxa que eles cobram é muito baixa então vale e MUITO apena.
          3. Outra coisa, pq ele é tão rápido? Escrito em PYTHON eu preciso falar outra coisa? Hehehe...
          Bem amigos, por hoje é isso... Obrigado



          quinta-feira, 8 de setembro de 2011

          Apelidando classes no PHP

          Fala gente tudo bem? Hoje o assunto é algo muito util para desenvolvedores que utilizam frameworks ou ainda classes com nomes largos pois vamos 'agilizar' nossa escrita e entendimento apelidando nossas classes sem afetar o funcionamento da aplicação mas antes, uma breve histórinha...



          Em uma Vila muito distante chamada KAKI existia um cara chamado José Henrico Fernando Camargo da Silva Santos Pereira Vilella(Foto) na qual por ter esse nome ‘PEQUENO’ seus amigos preferiam chama-lo de Zé pois era muito mais prático falar com ele dessa forma.



          Mas espera ai, se nessa vila que mal tinha telefone eles usam APELIDOS pq nós que buscamos agilidade no desenvolvimento de aplicações chamamos classes com nomes do tamanho do apolo 12 da bíblia sagrada? Principalmente quando utilizamos frameworks como o ZEND que evitamos o uso de includes e requires pelo simples fato do mapeamento a partir do nome da classe como por exemplo chamar a entidade pessoa do model que ficaria assim Application_Model_Entity_Pessoa que para ficar facil de entender seria a classe pessoa que esta na entity dentro do model na application... mas pq não posso chamar ela com um apelido? 

          Pode sim e o trabalho é simples, basta aplicar um apelido nela assim como o pessoal da vila kaki fez com o José (ZÉ) mas diferente deles que chamaram uma função nativa da cabeça nós vamos chamar uma do PHP =]
          Olha como iriamos fazer com o Zé se ele fosse uma classe PHP...


          Mostrando o funcionamento do class_alias
          1. class_alias('Jose_Henrico_Fernando_Camargo_da_Silva_Santos_Pereira_Vilella' ,'ze');
          2. $pessoa = new ze();

          Olha só, utilizamos a função class_alias que cria um alias (apelido) para uma classe e pronto é só chamar pelo apelido... Ai vc pode utilizar sua mente criativa e pensar onde trabalhar com isso... se cria uma lib que monta tudo perfeitinho mas isso vai fazer parte =]

          Para aproveitar vamos ver que classe é esse alias?



          Utilizando o get_class
          1. echo get_class($pessoa);
          E sinceramente vc acha que vai aparecer oq na tela? O apelido ou o nome real?

          O nome real pq a classe da pessoa é o nome completo e não o apelido...
          Bem, post rápido como sempre mas acho interessante =]

          Flw e até a próxima.