Componentes / Extensões Com Acesso Estático

Fala moçada!

Utilizei em um projeto uma extensão para Yii do PHPMailer:

http://www.yiiframework.com/extension/mailer

Tudo estava mil maravilhas e funcionando perfeitamente!

Entretanto em uma rotina de e-mails batch (rodando dezenas de envios ao mesmo tempo), tive um sério problemas de privacidade já que o método AddAddress foi se acumulando estaticamente na aplicação. Ou seja, os usuários receberam inúmeros e-mails repetidos, e pior, com endereços de vários outros usuários. Puuuutz! Mas como? Vacilo da extensão, do PHP Mailer, meu, enfim de quem? Sinceramente vejo o início do problema no próprio Yii!

Vejam só, qualquer extensão e componente que for registrado na main.php, será acessado via Yii::component.

Fiz o debug na aplicação inteira e a cadeia do desastre começou aí. Me surgiu uma preocupação tremenda! Já que qualquer processo semelhante, rodando simultaneamente cairá no mesmo problema!

Talvez eu esteja entendendo errado então!

Só devem ser registrados objetos que serão acessado estaticamente?

Enfim, vale a discussão e a dica para os desavisados como eu :-X

  1. o problema esta na logica da sua programacao e nao no Yii (garantido)

  2. verfique o uso correto de addAdress. Lembra-se de resetar ("unset") o objeto email depois cada envio/email

Você entendeu errado.

Existem vários componentes que funcionam perfeitamente isoladamente. Declará-los como alias no main pode ser uma falha grave, pois estes componentes podem não estar preparados para trabalhar estaticamente. Foi o caso do Mailer. Realmente não é um erro do Yii, mas é um ato falho eles não recomendarem atenção neste detalhe.

Já cheguei a uma conclusão concreta sobre isso e o que recomendo é que tome cuidado com componentes pré-loaded além do básico. A suíte do framework foi preparada e testada, as extensões e componentes thirds não.

[]s