HUFERSIL.WEBDEVELOPER

Feriadão chegando

Colega de trabalho, Normet Piola, já curtindo um pouco do feriadão que tá chegando, na hora do almoço:

 

Validação de Dados

Uma das coisas mais chatas para fazer no momento do desenvolvimento é a validação de dados. Geralmente, o que vemos é:

if(empty($_POST['name'])) {
    echo 'Supply your name';
} else if(strlen($_POST['name']) < 5) {
    echo 'Your name must have at least 5 chars';
}

Logo, se você tiver que validar a mesma informação em dois locais diferentes, você recorre ao velho CTRL+C > CTRL+V..

Para evitar este tipo de coisa, eu geralmente uso regras de validação pré-determinadas, assim, se eu precisar re-utilizar a mesma regra em outro lugar, basta instanciar a classe e tá tudo certo. Por exemplo:

$user = new bean\User();
$user->setCpf('123132121321');
$user->setName('my name');
$user->setEmail('my@email.com');
 
// creating a validation list
$exec = new Executor();
$exec->addRule(new CPF('cpf', 'Invalid Brazilian CPf'));
$exec->addRule(new RequiredEmail('email','Invalid e-mail'));
$exec->addRule(new RequiredString('name','Supply your name with at least 4 chars', 4));
 
// executing 
$results = $exec->validate($user);
 
if(empty($results)){
     // ok, we're good to save in database
} else {
     echo 'Some errors occurred<br>';
     print_r($results);
}

Todos os erros encontrados na validação estão agora dentro da variável $results, indexados pelo nome da propriedade que gerou o erro. Logo, se ela estiver vazia, nenhum erro foi encontrado e você poderá prosseguir. Do contrário (tem algum valor), é só exibir ao usuário os erros encontrados.

Desta forma, facilita para enviar para a camada de visualização os erros encontrados, bem como posicioná-los de acordo com as necessidades.

Este formato pode ser aplicado à qualquer classe.

E o melhor: se eu precisar criar mais regras, eu não preciso refatorar/hackear códigos para suprir as necessidades – basta criar uma nova regra e aplicar no objeto em questão.

Os arquivos de exemplo podem ser baixados na área de downloads/exemplos.

@braços e fiquem com Deus!

PostgreSQL – Log automatico de alterações

Procurando algumas coisas sobre Stored Procedures e Triggers para o Postgres, cai neste link muito legal:

http://binodsblog.blogspot.com.br/2011/02/multi-table-trigger-in-postgresql-rocks.html

Espero que ajude como ajudou nos meus estudos!

@braços e fiquem com Deus

Database Modeler

Fala pessoal,

Depois de muito tempo sem postar, estou eu aqui de novo.
Coloquei na Chrome Web Store uma app para modelagem de dados.

Ainda está em versão beta e ainda tem alguns bugs, porém já estou usando em alguns projetos sem maiores problemas.

Quem quiser colaborar com o projeto, fique a vontade para dar sugestões!

@braços e fiquem com Deus!

Facilitando as chamadas ao servidor com RequestJS e jQuery

Em muito projetos eu uso HTML e jQuery.
A unica coisa que eu acho um pouco chata no jQuery é a forma das chamadas ao servidor.

Estudando ExtJS, achei muito legal a forma como ExtDirect funciona.

Então, resolvi fazer uma versão para eu poder usar em projetos com jQuery. Consiste, basicamente, de uma classe em PHP e outra JS (na verdade um objeto que não pode ser instanciado).

Ficou bem mais simples para eu trabalhar. Ainda estou testando, mas se alguém quiser se aventurar ou até mesmo me ajudar a testar/melhorar o código, qualquer ajuda será bem vinda! Continuar lendo

Reiniciando as sequences no PostgreSQL

Se você, como eu, usa muito o PostgreSQL, e de vez em quando precisa reiniciar as sequencias, vai uma dica de como fazer isso (testado no 9.0):

do $$
 
DECLARE
	rec RECORD;
	valor BIGINT;
BEGIN
	FOR REC IN SELECT  
		c.relname::text AS TABLE
		, f.attname::text AS FIELD
		, n.nspname::text AS schema
		, regexp_replace(CAST(d.adsrc AS TEXT), '.*?''(\w+)''.*?$'::TEXT, '\1'::TEXT, 'g'::TEXT) AS seq_name
 
		FROM pg_attribute f
		JOIN pg_class c ON c.oid = f.attrelid
		JOIN pg_type t ON t.oid = f.atttypid
		LEFT JOIN pg_attrdef d ON d.adrelid = c.oid AND d.adnum = f.attnum
		LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
		LEFT JOIN pg_constraint p ON p.conrelid = c.oid AND f.attnum = ANY ( p.conkey ) AND p.contype IN ('p')
		LEFT JOIN pg_constraint fk ON fk.conrelid = c.oid AND f.attnum = ANY ( fk.conkey ) AND fk.contype IN ('f')
		LEFT JOIN pg_class AS g ON fk.confrelid = g.oid
		WHERE c.relkind = 'r'::CHAR
			 AND f.attnum &gt; 0
			 AND n.nspname = 'public'
			 AND p.contype = 'p'
			 AND SUBSTR(CAST(d.adsrc AS TEXT), 1, 7) = 'nextval'
	LOOP
		EXECUTE 'SELECT COALESCE(MAX('||rec.FIELD||'),0) + 1 FROM '||rec.TABLE INTO valor ;
		RAISE NOTICE 'Valor para %: % na sequence %', rec.TABLE, valor, rec.seq_name;
 
		PERFORM SETVAL(rec.seq_name, valor);
 
	END LOOP;
END
$$

@braços e fiquem com Deus!

Exemplo para trabalhar com CRUD e Bootstrap do Twitter

Ajudando uma pessoa neste tópico, fiz um exemplo bem simples de CRUD com PDO, usando os arquivos de bootstrap do Twitter.

Você pode baixar os arquivos aqui.

@braços e fiquem com Deus!

Outro de Exemplo de ExtJS 4

Fala pessoas!

Estou gostando bastante dessa nova versão do ExtJS. Principalmente por conta do ExtDirect.

Consegui fazer boa parte deste exemplo usando somente a documentação. Poucas coisas que não funcionaram conforme o que estava descrito e tive que pedir ajuda ao oráculo.

Na seção de exemplos você poderá baixar o arquivo contendo todos os arquivos necessários (exceto o ExtJS 4, que você pode baixar no site da Sencha).

No arquivo ZIP contém um arquivo “readme.txt” que tem os passos a serem seguidos para configurar o exemplo.

@braços e fiquem com Deus!

Estudando ExtJS 4

Estou estudando e gostando muito do ExtJS 4.
Decidi pegar ele do zero, tentando fazer sozinho porque, particularmente, entendo melhor quando apanho bastante hehe.

Estou gostando bastante da forma como ele trabalha com o MVC. Facilitou muito em relação ao outro sistema que tinha feito quando trabalhava na faculdade.

Acredito que esta semana consigo colocar um outro exemplo para download.

@braços e fiquem com Deus!

Exemplo de ExtJS 4 e Lumine

Fala galera!

Resolvi começar a estudar o ExtJS 4.
Eu já tinha feito uma aplicação com uma versão anterior do ExtJS.
Agora resolvi retomar os estudos nesta versão.

Vocês podem conferir um exemplo básico aqui e baixar os arquivos na sessão de download de exemplos (o pacote do ExtJS deve ser baixado no site da Sencha).

Este exemplo foi feito em cima de um exemplo da própria documentação do ExtJS, agregando somente a parte de acesso a banco de dados usando Lumine. Os arquivos estão bem comentados.

@braços e fiquem com Deus!

Previous Posts