AngularJS – Adicionando loading nos requests via ngResource

Salve,

Uma  das coisas que achei complicado de achar facilmente ,e que sinceramente não achei na documentação, é em relação a criar um aviso de loading como resposta para o usuário aguardar os carregamentos de ajax e etc. No jQuery você poderia tratar individualmente, em cada chamada aos métodos $.ajax(), $.get(), $.post(), bem como de maneira geral utilizando o conjunto de funções $.ajax*().

Hoje tive que pesquisar e testar e consegui uma solução e daí não procurei outras, que podem ou não existir e que podem ou não serem fáceis. O que eu achei e estou utilizando é o angular-busy, que depende do promise-tracker e do ngAnimate, para fazer a mágica. No exemplo da documentação do promise você ver a utilização com o $http, mas existe um unit test para usá-lo com $resource, que é o que eu realmente necessitava saber. O resto foi ver os exemplos e a documentação do angular-busy e colocar pra rodar.

Basicamente foi:

- Injetar o ngAnimate, promise-tracker e angular-busy (que o módulo chama-se cgBusy) ao módulo que você quer tratar isso;

- Injetar o promise-tracker no(s) controller(s) onde você faz os requests;

- Inicializar e adicionar o promise para trackear o request;

- No bloco onde você vai carregar os dados, ou onde você quiser que apareça o loading, coloca a diretiva cg-busy:

loadingTracker é o ID do tracker. O mesmo que você deu na inicialização no controller.

 * Leia a documentação para entender o por que de passar o loadingTracker dentro de aspas simples, já que está dentro de aspas duplas.

Você ainda pode customizar o html do loading do angular-busy criando um template e configurando ele assim:

E lá você fará sua estrutura e poderá mexer com seu css normalmente, sem problema algum.

Ainda existem outras configurações que você saberá se ler a documentação do angular-busy e do promise-tracker.

Se alguém souber de algo mais fácil e bacana que nem esse, por favor me avise :D

Symfony2 e JMS Serializer – Adicionando tratamento na serialização e deserialização

Salve,

Utilizar o JMS Serializer no Symfony2 deixa muito fácil e rápido serializar dados , tendo um dos usos a construção de API RESTful usando o FOSRestBundle.

Mas uma dúvida que eu tive, e que é corriqueiro, é transformar dados antes ou depois, em alguns casos:

- Traduzir um status para um objeto ou string, ao invés de mandar um int, antes de serializar;

- Traduzir um status de objeto ou string para a sua representação real, na fonte de dados, que geralmente é um int na deserialização;

- Adicionar um campo  extra após a serialização, com uma informação extra, como um valor total de um pedido de compra, dentre outros.

Pesquisando achei alguns artigos no Stackoverflow, um com um exemplo pífio em relação a utilização e funcionamento e um mais completo, com toda explicação, mas a documentação do JMS Serializer, bem como a maioria das libs de PHP, é uma merda para explicar de forma prática, as vezes até na teoria são ruins.

Basicamente é isso:

Criar um subscriber

 

Cadastrar ele como um serviço, passando como argumento o serviço do Pedido

 

E pronto! É só trabalhar nos métodos e outros que quiser (tem que achar na documentação) e fazer suas mágicas.

Obrigado!

Symfony2: adicionando sufixo em um input em um Form Type utilizando o MopaBootstrap

Salve,

Estou em um projeto onde utilizo o Symfony2 e entre vários componentes/bundles, tenho o MopaBootstrap e necessitei de adicionar um sufixo num campo criado via Form Type e não encontrei na documentação/README do repositório e os links que achei no repositório não tinham também ou não estavam disponíveis, com isso fuçei o repositório e achei esse arquivo:

https://github.com/phiamo/MopaBootstrapBundle/blob/master/Form/Extension/WidgetFormTypeExtension.php

Olhando o código vi os parâmetros widget_suffix e widget_addon_append, testei e consegui colocar pra aparecer a caixinha no final, com o widget_addon_append. Mas o value não aparecia, então buscando nos códigos do bundle no meu projeto, achei um código twig que monta o template do campo, e ele utilizava o parâmetro text para pegar o texto, e assim funcionou. Então exemplo prático:

Infelizmente esse componente, bem como vários outros e também muitos frameworks, sofrem do problema de des-documentação, onde tem alguma coisa documentada, mínima, mas não tem tudo, e geralmente tem-se exemplos super básico e se você quiser mudar uma posição, você não encontrará SE pode e COMO faz.

Obrigado.

 

PHP Session em MySQL com Zend Framework

Salve,

As vezes precisamos, por diversos motivos, guardar a sessão do PHP em MySQL ou outro banco de dados relacional. No Zend Framework existe a classe Zend_Session_SaveHandler_DbTable que faz esse trabalho. A maneira mais fácil e rápida que consegui encontrar foi essa. É basicamente criar a tabela, configurar no application.ini os dados, que já vem padrão, e um _init*() no Bootstrap e estará tudo rolando beleza:

[sql]

 

[application.ini]

 

[bootstrap]

 

Agora você poderá manipular suas sessões ou fazer o que desejar.

Valeu!

Nota rápida: Zend_Form + Zend_Translate

Salve,

Usando o Zend_Translate e colocando a sua instância na chave Zend_Translate do Zend_Registry ( Zend_Registry::get(‘Zend_Translate’) ), os formulários com Zend_Form irão buscar, e se encontrar, traduzirá os textos do Label e do Description. Title e placeholder ainda não são automáticos, mas você pode criar uma classe que estenda do Zend_Form e no método de adicionar o elemento pegar e traduzir para pegar automático:

Usando a biblioteca padrão para a API do PagSeguro no Zend Framework

Salve,

O Cândido Sales ( @candidosales ) me procurou sobre o problema de carregar  a biblioteca padrão para uso da API do PagSeguro, que eles mesmos distribuem, no Zend Framework. Eu consegui resolver isso e não tinha compartilhado isso no blog mas na lista ZFBrasil, no GoogleGroups, já tinha postado.

Se está com o mesmo problema, veja o ótimo post do Cândido sobre como usar e outras explicações: http://candidosg.com/2012/04/28/pagseguro-zend-1-11/

* O modo de carregamento mostrado pode ser usado com qualquer tipo de bibliotecas externas/independentes. Mas isso vai acabar por que o PHP-FIG ( github.com/php-fig ) criou o PSR-0 que é o padrão de Autoload do PHP e as novas versões dos frameworks Zend Framework ( ZF2, que está em beta ) e o Symfony ( SF2, já lançado ) já usam, bem como outras ferramentas e é indicado a todos usarem. :D

Valeu!

Zend_Date e verificação se uma data maior ou menor que outra

O Zend Framework tem uma coleção muito grande de bibliotecas e com ótimos recursos. Uma delas é o Zend_Date, que você já pode supor, é para trabalhar com tudo relacionado a Tempo/Data/Hora.

Um dos ótimos recursos dela é o de comparação de data onde você pode verificar se uma data X é maior ( vem depois ) ou menor ( vem antes ) que uma outra. Evitando assim vários códigos para conversão para timestamp, que é uma das soluções usadas por algumas pessoas.

Vamos pegar 2 datas e comparar elas pra ver qual vem antes ou depois com os métodos isEarlier() e isLater():

Zend_Date::isEarlier() – saber se uma data vem anterior a outra;

Zend_Date::isLater – saber se uma data vem após a outra;

Exemplo:

Veja que os exemplos são parecidos mas só muda a ordem para poder usar os dois métodos.

Para mais leia a documentação: http://framework.zend.com/manual/en/zend.date.html

Obrigado!

Problema do mysql.sock no ZendServer CE para OSX

Salve,

Tive um problema após a instalação do ZendServer CE 5.6. Simplesmente não foi criado o link em /tmp/ como de costume, então é fácil resolver:

sudo ln -s /usr/local/zend/mysql/tmp/mysql.sock /tmp/mysql.sock

Se estiver usando o Navcat e ao criar a conexão com o MySQL mesmo colocando todos os dados ele insistir que não está conectando no servidor MySQL, vá para a aba Advanced marque a opção Use socket file: e passe o caminho do link simbólico: /tmp/mysql.sock

Sem problemas agora, é só mandar conectar ou testar para ter uma certeza que funcionou.

Valeu!

Usando o Snippely no Mac OSX compartilhando o banco de dados no Dropbox

Salve,

No post Usando o Snippely em vários locais com Dropbox no Ubuntu Natty 11.04 foi ensinado no Ubuntu, mas serve para qualquer Linux. No Mac OSX, por causa das suas frescuras e estrutura de diretório diferente do Linux, você vai ter um puta trabalho…pra descobrir onde fica o bendito banco de dados do Snippely. Mas agora eu achei e compartilho como usa ele junto com Dropbox.

~/Library/Preferences/com.snippely.{parte variável pela instalação}/Local\ Store/

Agora é entrar na pasta, apagar o application.db e criar o link simbólico:

ln -s ~/Dropbox/Snippely/application.db .

* lembrando que o caminho para seu arquivo application.db no Dropbox pode ser diferente, é só você definir ai o caminho como você usa.

Valeu!

Instalando extensão PHP via Pecl no MAMP/MacOSX

Salve,

Estou usando agora o MacOSX e, por hora, o melhor gerenciador de ambiente de desenvolvimento PHP para MacOSX é o MAMP e pra complementar tem o MAMP Pro que te dá mais ferramentas bacanas. Pra quem está no Linux acho que não precisa de um gerenciador por que o apt-get/yum já faz um ótimo trabalho para gerenciar esses pacotes/programas e é super fácil, ponto para o Linux.

Meu problema foi: no MAMP eu não achei como instalar ( ferramenta nele ) as extensões, coisa que no Wamp e outros tem. Isso é um super #fail. No Linux seria via pecl já estaria tudo lindo, mas no MacOSX não tem local fixo de instalação dos pacotes do PHP, ai deixa a merda fedida de usar.

Como eu tinha instala o PHP pelo Brew antes, ele continua instalado aqui, para saber basta ver se existe o comando php, via terminal. Se existir será fácil:

Ele instala aqui: /usr/lib/php/extensions/no-debug-non-zts-20090626/
Depois é criar o link simbólico para a pasta de extensão do MAMP que fica aqui: /Applications/MAMP/bin/php/php5.3.6/lib/php/extensions/no-debug-non-zts-20090626/

* O pecl que vem no MAMP não rodou aqui, dá erro no Config.php, que eu não cheguei a procurar pois já estou com o pecl instalado aqui, mesmo sendo de outra instalação.

Depois que criou o link simbólico, agora é necessário adicionar no php.ini. Isso vai depender de duas coisas: qual versão do PHP está usando e se está usando o MAMP Pro. Seu php.ini será um desses:

Ai voce adiciona: extension=mongo.so

E reinicia o MAMP e pronto. Espero que eles consigam fazer uma ferramenta para realizar essa tarefa por que o valor não é tão baratinho e é algo de extrema importância.

Valeu!