Se alguém usa o netbeans no Windows, deve sofrer com a interface traduzida.
Pra conseguir usar o netbeans em inglês, só tive que adicionar alguns parâmetros no netbeans.conf.
Procure pela propriedade netbeans_default_options e adicione “-J-Duser.language=en -J-Duser.region=US” no final.
Meu arquivo de configuração está em C:\Program Files (x86)\NetBeans 7.1\etc\netbeans.conf
Ficou assim:
netbeans_default_options=”-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.zip.disableMemoryMapping=true -J-Duser.language=en -J-Duser.region=US”
Preciso me conectar a vários bancos de dados ao mesmo tempo.
Para isso encontrei uma solução simples.
No exemplo usarei dois bancos, um rodando no Microsoft SQL Server 2005 e outro no PostgreSQL 9.1.
Observação: A versão do gerenciador não influencia em nada neste exemplo, só coloquei ali porque sou hipster.
Primeiro configuro os bancos de dados no application.ini:
application/configs/application.ini
resources.multidb.mssql.adapter = "sqlsrv" resources.multidb.mssql.dbname = "badass" resources.multidb.mssql.host = "192.168.0.200" resources.multidb.mssql.username = "badass" resources.multidb.mssql.password = "lollipop" resources.multidb.pgsql.adapter = "pdo_pgsql" resources.multidb.pgsql.host = "192.168.0.201" resources.multidb.pgsql.username = "badass" resources.multidb.pgsql.password = "lollipop" resources.multidb.pgsql.dbname = "badass"
Esse exemplo está rodando no Windows, então eu estou usando a extensão SQLSRV (http://php.net/manual/en/book.sqlsrv.php).
Na maioria dos casos você precisará usar a pdo-dblib (http://php.net/manual/en/ref.pdo-dblib.php) que no ubuntu você encontra no pacote php5-sybase.
No caso de você estar usando a pdo-dblib, a configuração para o primeiro banco mudará um pouco.
O parâmetro adapter é “pdo_mssql”, pois ela tem que encontrar a classe Zend/Db/Adapter/Pdo/Mssql.php (assim como o adapter com o valor “sqlsrv” tem que encontrar Zend/Db/Adapter/Sqlsrv.php) e o parâmetro adicional “pdoType” está lá para que ele adicione o prefixo “dblib” no início da DSN.
Observação: Se você não sabe nem o que é DSN por favor, GTFO!! _o/
Segue o arquivo de configuração usando pdo-dblib:
application/configs/application.ini
resources.multidb.mssql.adapter = "pdo_mssql" resources.multidb.mssql.dbname = "badass" resources.multidb.mssql.host = "192.168.0.200" resources.multidb.mssql.username = "badass" resources.multidb.mssql.password = "lollipop" resources.multidb.mssql.pdoType = "dblib" resources.multidb.pgsql.adapter = "pdo_pgsql" resources.multidb.pgsql.host = "192.168.0.201" resources.multidb.pgsql.username = "badass" resources.multidb.pgsql.password = "lollipop" resources.multidb.pgsql.dbname = "badass"
Lindo né?
Vamos em frente.
Agora preciso inicializar ambos e gravar com Zend_Registry para que fique disponível na aplicação inteira.
Segue meu Bootstrap:
application/Bootstrap.php
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initDatabase()
{
/* @var $resource Zend_Application_Resource_Multidb */
$resource = $this->getPluginResource('multidb');
// inicia as conexões aos bancos de dados
$resource->init();
Zend_Registry::set('db_mssql', $resource->getDb('mssql'));
Zend_Registry::set('db_pgsql', $resource->getDb('pgsql'));
}
No Bootstrap é só pegar o MultiDb Resource Plugin, inicializar as conexões dos bancos e adicionar cada banco no Zend_Registry.
Se você quiser que um dos bancos seja default, é só adicionar o parâmetro “default” com o valor “true” no application.ini e chamar o método getDb() sem parâmetro algum.
Pronto, agora é mágico.
Acessando ele de uma controller action:
application/controllers/IndexController.php
<?php
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$sql = "SELECT * FROM tracker";
/* @var $db Zend_Db_Adapter_Sqlsrv */
$db = Zend_Registry::get('db_pgsql');
/* @var $statement Zend_Db_Statement_Sqlsrv */
$statement = $db->query($sql);
$results = $statement->fetchAll();
Zend_Debug::dump($results);
die;
}
Observação: Não se esqueçam dos comentários que dão uma ajudinha pra IDE auto-completar o código.
Espero ter ajudado.
Algumas vezes o netbeans não tem como seguir as referências necessárias para autocompletar eficientemente.
Nós podemos resolver isso especificando o tipo do objeto com phpdoc.
Tente.
<?php
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
/* @var $db Zend_Db_Adapter_Sqlsrv */
$db = Zend_Registry::get('db_mssql');
/* @var $statement Zend_Db_Statement_Sqlsrv */
$statement = $db->query('SELECT TOP 10 * FROM rodcli');
$results = $statement->fetchAll();
Zend_Debug::dump($results);
}
}
vim ~/netbeans-7.0.1/etc/netbeans.conf
Adicione o conteúdo em vermelho nesta linha:
netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m
-J-XX:MaxPermSize=200m-J-Dapple.laf.useScreenMenuBar=true
-J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true
-J-Dswing.aatext=true -J-Dawt.useSystemAAFontSettings=on"
Testei no Ubuntu 10.04.3 LTS.
Uso pra pegar todos os resultados do mês.
Alguém conhece um método melhor?
<?php
//...
$fromDate = DateTime::createFromFormat('d-m-Y H:i:s', '01-' . date('m-Y') . ' 00:00:00');
$toDate = clone $fromDate;
$toDate->modify('+1 month');
$toDate->modify('-1 second');
var_dump($fromDate, $toDate);
//...
?>
?>
Resultado:
object DateTime(3) {
public date => string(19) "2011-11-01 00:00:00"
public timezone_type => integer 3
public timezone => string(17) "America/Sao_Paulo"
}
object DateTime(3) {
public date => string(19) "2011-11-30 23:59:59"
public timezone_type => integer 3
public timezone => string(17) "America/Sao_Paulo"
}
Gambi né? rs
<?php
class Simp_Validate_CPF extends Zend_Validate_Abstract
{
const INVALID = 'cpfInvalid';
/**
* @var array
*/
protected $_messageTemplates = array(
self::INVALID => "'%value%' is an invalid CPF",
);
public function isValid($value) {
$this->_setValue($value);
$value = preg_replace('[-|.]', '', $value);
for ($i = 9; $i < 11; $i++) {
for ($d = 0, $c = 0; $c < $i; $c++) {
$d += $value{$c} * (($i + 1) - $c);
}
$d = ((10 * $d) % 11) % 10;
if ($value{$c} != $d) {
$this->_error(self::INVALID);
return false;
}
}
return true;
}
}
Atualização:
15 Novembro 2011 – Substitui ereg_replace por preg_replace.
Estávamos encucados com um companheiro de profissão e suas respostas sagazes.
Hoje o amigo Iacami (http://www.facebook.com/enapupe) encontrou o algoritmo sagaz:
http://www.amatilha.com.br/blog/como-falar-bonito-sem-dizer-nada/
Não satisfeito, o amigo Iacami implementou a bagaça:
http://www.enapupe.com.br/giverny/
Pra facilitar eu e meus amigos de trabalho fizemos a simulação.
Parecemos ou não mais sagazes falando bonito desse jeito?
Aprendendo com o Giverny na hora do almoço:
[youtube http://www.youtube.com/watch?v=PX7vKqgQ7lk]
[youtube http://www.youtube.com/watch?v=pqEHxys-isI]
[youtube http://www.youtube.com/watch?v=IOv0xrmmCOA]
Abraço.
O meu favorito:
$('.meucheckbox').is(':checked');
Uma alternativa:
$('.meucheckbox').attr('checked');
Trabalhar com múltiplos:
$("input[type=checkbox][checked]").each(function(index, element){
// itera cada um dos checkboxes "checkados".
});
O último é útil quando você quer implementar ações em múltiplos elementos, igual o gmail por exemplo.
Espero ter ajudado.
Categorias

