PHP

Como utilizar o Zend_Db_Table sem precisar vincular uma entidade de Banco

Quem usa o ZendFramework, provavelmente já passou muita raiva pois ele gera aquela mensagem “simpática”: “A table must have a primary key, but none was found”. Isso se deve ao fato de a classe Zend_Db_Table / Zend_Db_Table_Abstract tentar fazer os mapeamentos de nome da entidade, colunas e chave primária – em suma, efetuar um describe da entidade informada.

Mas há momentos em que o modelo não representa uma entidade do banco. Por exemplo, pode-se usar o modelo para executar uma função, uma procedure ou uma consulta à uma “View” de banco. Trabalhando nessa estrutura, onde o modelo representa os dados persistidos no banco, esse paradigma é quebrado.

O Zend Framework é bastante flexível em vários quesitos; um deles é o quesito mapeamento de dados, é possível sobrescrever algums métodos da classe herdada (Zend_Db_Table / Zend_Db_Table_Abstract). Um desses é o método “_setupPrimaryKey”, responsável por instanciar a chave primária da tabela; metódo, também, responsável por gerar a exceção quando, no mapeamento, não é encontrada a chave primária à partir das colunas buscadas à partir de um describe da tabela. Todo esse processo é executado automaticamente pelo Zend_Db.

Para resolver esse problema, é necessário forçar o mapeamento manual de algumas variáveis utilizadas pela classe “pai”. Nessa situação, foi suficiente forçar a variável “$this->_cols” para um vetor vazio. Adicionalmente, foi informado como vazio o nome da tabela, porém a classe pai define como sendo o nome da Classe filha o valor dessa variável ($this->_name).

Portanto, para trabalhar nessa estrutura, onde o modelo não representa uma entidade no banco basta sobrescrever o método “_setupPrimaryKey”:

public function _setupPrimaryKey() {
$this->_cols = array();
$this->_name = “”;
}

Instalando o Xdebug no Debian/Ubuntu

Olá pessoal.

Pra quem já teve a mesma dificuldade que eu, pra instalar o componente xdebug no PHP, vai ai uma ajuda e tanto. Como utilizo o repositório do Ubuntu pra instalar meus serviços e programas, passei por uma dificuldade com a instalação do componente xdebug.

Eu utilizo o ZendServer Community Edition – um Apache + PHP + Componentes básicos do ZendServer todos num pacote -, e nessa situação, executei o comando padrão: “aptitude install php-5.3-xdebug-zend-server.

Ao restartar o Apache, a surpresa, o serviço não estava no ar e ao analisar os logs a mensagem, que “diz tudo” e não diz nada:

[notice] caught SIGTERM, shutting down

Pesquisando nas listas do xdebug, encontrei algo que poderia resolver meu problema. Mas antes, tentei mais uma opção, compilar a extensão com o phpize. Fiz o download da última versão do xdebug, e executei os seguintes comandos:

# sudo su
# wget http://xdebug.org/files/xdebug-2.1.0beta2.tgz
# /usr/local/zend/bin/phpize
# ./configure –enable-xdebug –with-php-config=/usr/local/zend/bin/php-config
# make
# cp modules/xdebug.so /usr/local/zend/lib/php_extensions/

Como já havia instalado o xdebug do repositório, ele criou em /usr/local/zend/etc/conf.d um link simbólico “xdebug.ini” para o arquivo “/usr/local/zend/etc/ext.d/xdebug.ini”.

Bom, o detalhe maior está nesse arquivo, portanto não precisávamos dessa etapa de compilação. A extensão instalada do repositório cria a seguinte diretiva:

zend_extension=/usr/local/zend/lib/php_extensions/xdebug.so

Dessa forma, a extensão não é carregada e para matar a charada, basta mudar de “zend_extension” para “extension”, portanto:

extension=/usr/local/zend/lib/php_extensions/xdebug.so

extension=/usr/local/zend/lib/php_extensions/xdebug.so

Facebook reescreve PHP do zero e pode estar desenvolvendo um compilador para a linguagem

Parece realidade mesmo, o Facebook, em parceria com a equipe do core do PHP, reescreveu o código do PHP. A idéia, pelo que tenho lido a respeito, é melhorar o desempenho do nosso amável PHP.

O trabalho de melhoria do PHP, deveria ficar a cargo da própria Zend em parceria com a comunidade, mas parece que eles estão sem tempo e mais interessados no mercado corporativo, com suas ferramentas de desenvolvimento, proteção de código e servidor, do que com o crescimento e melhoria da linguagem.

Mais detalhes estão disponíveis em: http://www.geek.com.br/posts/12221-facebook-reescreve-php-do-zero-e-pode-estar-desenvolvendo-um-compilador-para-a-linguagem