Vaga para programador PHP em Curitiba

Estou abrindo vagas para programadores PHP em Curitiba, tanto para plenos quanto juniores.

As descrições dos cargos estão em meu gist (reutilizável!).

As vagas são CLT e o projeto é altamente convidativo!

Os interessados devem ler o gist e fazer como recomendado, apenas incluindo “Curitiba” no Subject.

Keep-Alive: Fazendo flush antes do término da execução, no controller do Symfony 2

No Symfony (1 e 2), a saída do controlador apenas é enviada após o processamento interno.

Para uma saída constante, em processos demorados, precisamos outra abordagem,

chamando o flush manualmente e seguindo o caminho Keep-Alive.

A necessidade

A CamelSpiderBundle possui um controller que executa a CamelSpider e isto pode demorar um pouco.

É necessário que exista uma saída informativa e uma negociação com o navegador para que não seja interrompida a exibição.

Solução: 

//….

    public function captureAction($id)
    {
        $response = new Response();
        $response->headers->set(‘Content-Encoding’, ‘chunked’);
        $response->headers->set(‘Transfer-Encoding’, ‘chunked’);
        $response->headers->set(‘Content-Type’, ‘text/html’);
        $response->headers->set(‘Connection’, ‘keep-alive’);
        $response->sendHeaders();
        flush();
        ob_flush();
        echo “<html><head><title>Capture</title></head><body><pre>”; 
        $this->get(‘camel_spider.launcher’)->checkUpdates($id);
         echo nnnn<b>Done</b>.”;
        echo “</pre></body></html>”;
        return $response;
    }
//…..
Você pode visualizar o arquivo completo aqui
Algumas informações relevantes:

Customizando as páginas de erro no Symfony 2

Existem várias formas de customizar as páginas de erro no Symfony 2,

mas uma maneira bem simples,

é sobrecarregar a view de erros da Twig,

criando o arquivo app/Resources/TwigBundle/views/Exception/error.html.twig:

https://gist.github.com/1402754

 

Lógico que esta sobrecarga de exibição é feita apenas no ambiente de produção,

e para testar suas alterações você precisa limpar o cache.

./app/console cache:clear –env=prod

 

 

Como acessar as informações do Usuário, no Controller Symfony 2

Se você implementou o login conforme a documentação,
pode utilizar a seguinte forma:

<?php

namespace AcmeDemoBundleController;

class DemoController extends Controller
{
    public function indexAction()
    {
            //seu objeto Token, definido no Provider:
            $this->get(‘security.context’)->getToken();

            //seu objeto Identity, definido no Provider                        
            $this->get(‘security.context’)->getToken()->getUser();     

            //seu método implementado no objeto Identity
            $this->get(‘security.context’)->getToken()->getUser()->getLastName();   

//….

pecl_http no Ubuntu

Instalando a pecl_http PHP extension no Ubuntu em 4 palhetadas:

  • sudo apt-get install php-pear php5-dev libcurl4-openssl-dev
  • sudo pecl install pecl_http
  • criar /etc/php5/conf.d/http.ini contendo:
         extension=http.so
  • sudo /etc/init.d/apache2 restart

PHP 5.3 ?: ternary operator e o Twitto

Pense comigo em um exemplo simples,
onde você testa x e define valor padrão caso x não atenda ao
requisito mínimo.

Tradicionalmente escreveríamos algo assim:
  
> php > $x = 1; if( $x < 2 ){ $x = 3; }; var_dump($x);
> int(3)

Agora a escrita reduzida, adicionada no PHP 5.3:

> php > $x = 1; $x > 1 ?: $x = 3; var_dump($x);
> int(3)
> php > $x = 2; $x > 1 ?: $x =  3; var_dump($x);
> int(2)

A escrita reduzida permitiu a escrita de um framework em um tweet,
o Twitto – A web framework in a tweet:

require __DIR__.‘/c.php’; if (!is_callable($c = @$_GET[‘c’] ?: function() { echo ‘Woah!’; }
)) throw new Exception(‘Error’); $c();

Onde mais você vê o uso de :? ?

Dicas do Google para performance PHP

Dt-improved-performance

Para leitura, algumas dicas do Google, para melhorar a performance nos gargalos:

http://code.google.com/intl/pt-BR/speed/articles/optimizing-php.html

Destaque na simplicidade do tópico “Avoid doing SQL queries within a loop”.

Apesar de ser uma página antiga, é bom todos terem isso em mente, apesar de que,
em algumas vezes (raras) é necessário resolver o conflito “Orientação à performance” VERSUS “Orientação à objeto”.