Archive for abril \30\-02:00 2013

Zend Framework 2: Retornando dados no formato JSON no Controller

Posted on abril 30, 2013. Filed under: PHP, Zend Framework | Tags:, , |

O Zend Framework 2 disponibiliza uma forma simples de retornar dados no formato JSON na camada de View. Basta usar a classe JsonModel no lugar de ViewModel no action do seu Controller. Para utilizar essa funcionalidade, primeiro é necessário habilitar o JsonStrategy dentro do arquivo module.config.php referente ao seu módulo. Veja como fazer abaixo:

// arquivo module.config.php
'view_manager' => array(
		'display_not_found_reason' => true,
		'display_exceptions'       => true,
		'doctype'                  => 'HTML5',
		'not_found_template'       => 'error/404',
		'exception_template'       => 'error/index',
		'template_map' => array(
				'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
				'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
				'error/404'               => __DIR__ . '/../view/error/404.phtml',
				'error/index'             => __DIR__ . '/../view/error/index.phtml',
		),
		'template_path_stack' => array(
				__DIR__ . '/../view',
		),
		'strategies' => array(
				'ViewJsonStrategy',
		),
),

Para gerar um conteúdo no formato JSON, basta retornar uma instância da classe JsonModel. Veja exemplo abaixo:

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\View\Model\JsonModel;

class IndexController extends AbstractActionController
{
	public function indexAction()
	{
		return new JsonModel(array(
				'nome' => 'Douglas V. Pasqua',
				'email' => 'blablabla@bla.xyz',
		));
	}
}

Ao acessar o action, a saída gerada seria:

{"nome":"Douglas V. Pasqua","email":"blablabla@bla.xyz"}

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Desabilitando a renderização do Layout e View
Zend Framework 2: Renderizando a view dentro do Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Redirecionamento de Rota
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

Zend Framework 2: Desabilitando a renderização do Layout e View

Posted on abril 30, 2013. Filed under: PHP, Zend Framework | Tags:, , |

  • Desabilitando a renderização de Layout e View (Ambos)
  • Desabilitar a renderização do Layout e View é bem simples. Veja abaixo:

    namespace Application\Controller;
    
    use Zend\Mvc\Controller\AbstractActionController;
    
    class IndexController extends AbstractActionController
    {
    	public function indexAction()
    	{	
    	     echo "texto qualquer";   
    	     return $this->response;
    	}
    }
    
    
  • Desabilitando somente a renderização do Layout
  • Segue exemplo abaixo caso queira desabilitar somente a renderização do Layout, mas manter a renderização da view:

    namespace Application\Controller;
    
    use Zend\Mvc\Controller\AbstractActionController;
    use Zend\View\Model\ViewModel;
    
    class IndexController extends AbstractActionController
    {
    	public function indexAction()
    	{	
    		$view_params = array(); // parametros passados para a view
    		$viewModel = new ViewModel($view_params);
    		$viewModel->setTerminal(true); // desabilita a renderizacao do layout
    		return $viewModel;
    	}
    }
    

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Renderizando a view dentro do Controller
Zend Framework 2: Retornando dados no formato JSON no Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Redirecionamento de Rota
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

Zend Framework 2: Renderizando a view dentro do Controller

Posted on abril 30, 2013. Filed under: PHP, Zend Framework | Tags:, , |

Renderizar a View dentro do Controller pode ser útil caso desejamos retornar a view renderizada em algum outro formato que não seja o padrão. A view renderizada será retornada para dentro de uma variável. Dessa forma podemos retornar o conteúdo da view para um requisição ajax por exemplo. Veja abaixo como fazer:

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class IndexController extends AbstractActionController
{
	public function indexAction()
	{
		$view_params = array (
				'nome' => 'Douglas V. Pasqua',
		);
		
		$viewModel = new ViewModel($view_params);
		$viewModel->setTemplate('application/index/index.phtml'); // caminho para o template que será renderizado
		$html = $this->getServiceLocator()->get('ViewRenderer')->render($viewModel);
				
		// enviar conteudo de $html via ajax
	}
}

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Desabilitando a renderização do Layout e View
Zend Framework 2: Retornando dados no formato JSON no Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Redirecionamento de Rota
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

Zend Framework 2: Chamando View Helpers dentro do Controller

Posted on abril 30, 2013. Filed under: PHP, Zend Framework | Tags:, , |

É possível fazer chamadas para view helpers dentro do Controller. Muito útil em determinadas situações. Abaixo temos o exemplo da utilização do view helper chamado paginationControl. A situação foi útil pois precisava retornar o html referente a paginação de uma lista via requisição Ajax.

// instanciando o Zend Paginator de acordo com suas proprias regras
$paginator = new \Zend\Paginator\Paginator(new \Zend\Paginator\Adapter\ArrayAdapter($array));
...

// obtendo a instância do view helper chamado paginationControl dentro do Controller
$paginationControlHelper = $this->getServiceLocator()->get('viewhelpermanager')->get('paginationControl');

// usando o view helper dentro do controller
$html = $paginationControlHelper($paginator, 'Sliding', 'module/paginator_control');

// temos dentro do $html o renderização da paginação retornada pelo View Helper paginationControl
// podemos usar o $html para retorno de um requisição ajax

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Desabilitando a renderização do Layout e View
Zend Framework 2: Renderizando a view dentro do Controller
Zend Framework 2: Retornando dados no formato JSON no Controller
Zend Framework 2: Redirecionamento de Rota
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

Dicas para testar aplicativos para facebook durante o desenvolvimento

Posted on abril 18, 2013. Filed under: Facebook, PHP | Tags:, , |

Introdução

Neste artigo vamos aprender algumas dicas importantes para usarmos durante a fase de desenvolvimento do seu aplicativo facebook. Tópicos:

  • Fazendo com que o aplicativo seja visível somente para contas de desenvolvedores
  • Modificando a privacidade de publicação no feed de notícias e de fotos
  • Criando usuário de teste de aplicativos
  • Alterando a visibilidade da sua fan page
  1. Fazendo com que o aplicativo seja visível somente para contas de desenvolvedores do aplicativo
  2. Ative a opção Sandbox Mode na configuração de seu aplicativo para que ele fique visível somente para contas de desenvolvedores do seu aplicativo. Veja figura abaixo: (O aplicativo ficará visível somente para seus administradores e desenvolvedores)

    ScreenShot097

    PS: Não se esqueça de desabilitar essa opção quando for publicar seu aplicativo em produção

  3. Modificando a privacidade de publicação no feed de notícias e de fotos
  4. Quando você realiza uma publicação no seu feed de notícias ou de uma foto através da API do facebook, por padrão, essa publicação fica visível para todos usuários. Isso pode ser um incomodo durante a fase de desenvolvimento do seu aplicativo. Para ajudar nesse problema, você pode alterar a privacidade da publicação, fazendo com que ela seja visível somente para o seu usuário. Isso pode ser alcançado através da configuração do parâmetro privacy. Veja exemplo abaixo:

    $feed_data = array(
        "message" => "Youtube",
        "name" => "Site do Youtube", 
        "link" => "http://www.youtube.com", // link da publiccao
        "caption" => "www.youtube.com",
        "privacy" => "{'value':'SELF'}",
    );
     
    // publica foto na timeline
    $dados = $facebook->api("/me/feed", "post", $feed_data);
    

    Somente você irá visualizar a publicação. Veja na figura abaixo a indicação que mostra a visibilidade da publicação:

    ScreenShot098

    Você pode usar o parâmetro privacy também na publicação de fotos no perfil do usuário. Veja exemplo:

    // dados para envio da publicacao da foto
    $post_data = array(
    	"message" => "Fiquei Legal nessa foto",
    	"privacy" => "{'value':'SELF'}",
    	"image" => '@' . realpath("minha-foto.jpg"), // localizacao da foto
    );
    
    // publica foto na timeline
    $data['photo'] = $facebook->api("/me/photos", "post", $post_data);
    

    Para maiores informações sobre como usar o parâmetro privacy, acessar o link:
    https://developers.facebook.com/docs/reference/api/privacy-parameter/

  5. Criando usuário de teste de aplicativos
  6. Usuários testes do facebook são contas especiais, invisíveis para usuários normais, criadas com objetivo de testar à integração com aplicativos. Você pode usar usuários testes tanto manualmente como de forma automatizada. O facebook permite à criação de até 2000 usuários testes para cada aplicativo. Usuários testes tem algumas limitações em relação à usuários normais. Aconselho a analisar os detalhes de acordo com o link abaixo:

    https://developers.facebook.com/docs/test_users/

    Para criar usuários testes, edite o aplicativo desejado, entrando no link https://developers.facebook.com/apps, acessando e editando o seu aplicativo.

    No menu lateral, clique na opção Privilégios de Desenvolvedores e identifique a àrea Test Users. Veja figura abaixo:

    ScreenShot101

    Para criar novos usuários testes, clique no botão Criar. Escolha o número de usuários testes que deseja criar. Caso desejar, já marque a opção para que usuário já autorize seu aplicativo. Veja Figura:

    ScreenShot102

    Após criado o usuário teste, você pode alternar para a conta dele de forma manual clicando no link Alternar para. Você tem também a opção Modify caso queira realizar mais operações com os usuários criados: (Removê-los, criar conexões de amizades entre eles, adicioná-los em outros aplicativos que você tem criado). Veja figuras:

    ScreenShot103

    ScreenShot104

    Você pode adicionar usuários teste no seu aplicativo de forma dinâmica também, veja como através do link abaixo:
    https://developers.facebook.com/docs/test_users/

  7. Alterando a visibilidade da sua fan page
  8. Aplicativos para facebook podem interagir com fan pages de várias formas. Caso esteja trabalhando com uma fan page nova, que ainda esta em fase de “desenvolvimento” é interessante manter essa fan page oculta, até que você finalize todos os detalhes para poder publicá-la.

    Existe uma opção na configuração da fan page que mantém ela oculta. Para habilitar a opção, primeiramente, clique em Editar Página e em seguida, Editar Configurações/Editar Permissões. Veja Figura:

    ScreenShot099

    Com o menu Gerenciar Permissões selecionado, identifique a opção Página não publicada, habilite ela e clique em Salvar Alterações. Veja figura abaixo:

    ScreenShot100

    Pronto, neste momento, sua fan page já esta oculta.

Ler Post Completo | Make a Comment ( None so far )

Enviando arquivos de backup para o Amazon S3 através do sdk para PHP

Posted on abril 6, 2013. Filed under: Amazon AWS, PHP | Tags:, , , , , , |

Introdução

Neste artigo vamos aprender como usar o serviço S3 da Amazon para armazenar arquivos de backup. O intuito é criarmos um script em php que utiliza o SDK da Amazon para enviar os arquivos para o serviço de Storage. Ideal para armazenar dumps de banco de dados e backup de diretórios de aplicações web. Através desse método fica simples integrar scripts de backup em shell já existentes em seu ambiente com o serviço da Amazon.

Vamos ver como ingressar no serviço S3, gerar as chaves de configuração, baixar e usar o sdk no php. Além disso, vamos abordar aqui como configurar o serviço da Amazon para deletar os arquivos de backups após um período de tempo determinado automaticamente.

  1. Cadastrando-se no Amazon AWS
  2. Será necessário ter um cadastro no serviço de AWS da Amazon. Caso ainda não tenha uma conta no serviço, acesse o link abaixo e clique em cadastrar-se. Siga as orientações do processo.

    http://aws.amazon.com/pt/

  3. Acessando o S3 e criando um bucket
  4. O Amazon S3 é um serviço de Storage em cima de um plataforma de computação em nuvem usado para armazenar e recuperar qualquer quantidade de dados. Para maiores informações sobre o serviço e preços, consultar o link abaixo:

    http://aws.amazon.com/pt/s3/

    O primeiro passo é criarmos um bucket no serviço S3 da Amazon. O bucket é uma unidade de armazenamento dentro da infra estrutura da Amazon. Estaremos armazenando os arquivos dentro do bucket.

    Para criarmos o bucket, acesse o console da Amazon, no serviço S3, através do link abaixo: (Já estando logado)
    https://console.aws.amazon.com/s3/

    Clique no botão Create Bucket. Ao clicar no botão, será exibida uma tela como na figura abaixo:

    ScreenShot092

    Insira o nome do bucket e clique no botão Create. O nome do bucket é um identificador único dentro da estrutura global do serviço da Amazon. Portanto, você deverá escolher um nome que ainda não esteja em uso. O nome da Region, mantive US Standard, pois o preço cobrado pelo uso na região EUA é mais barato do que no Brasil. Como estamos trabalhando com arquivos de backup, vamos escolher a região que cobra o menor preço possível.

    Com o bucket criado, vamos agora aprender como gerar as chaves conhecidas como Amazon Web Services Key. As chaves serão usadas na configuração do sdk. Dessa forma, a Amazon consegue identificar o usuário que esta realizando as requisições pelo sdk.

  5. Gerando as chaves de Acesso
  6. Para gerar as chaves de acesso, clique no menu superior “Nome_do_seu_Usuario -> Security Credentials”. Veja figura:

    ScreenShot093

    Ache a seção Credenciais de Acesso e clique em Criar uma nova chave de acesso, Veja figura abaixo:

    ScreenShot094

    Confirme a geração da chave. Anote as chaves geradas, o campo ID de chave de acesso e o campo Chave de acesso secreta (clicando no link mostrar). Usaremos as chaves mais tarde na configuração do sdk.

  7. Instalando e configurando o sdk
  8. Nosso script de envio de backup utilizará o sdk da Amazon S3 para a linguagem PHP. Portanto, baixe a última versão do sdk do Amazon S3 no link abaixo:

    http://pear.amazonwebservices.com/get/sdk-latest.zip

    Descompacte o arquivo zip dentro do diretório raiz onde estará seu script de backup. Ao descompactar será criado um diretório sdk-x.x.x/.(Onde x.x.x é a versão do sdk). Crie um link simbólico desse diretório para sdk-amazon/ ou renomeie a pasta para sdk-amazon/ como preferir. No meu caso, preferi criar um link simbólico, ficando da seguinte forma:

    $ ln -s sdk-1.6.2/ sdk-amazon
    

    Para configurar as chaves de acesso, entre no diretório do sdk da amazon e renomeie o arquivo config-sample.inc.php para config.inc.php

    $ cd sdk-amazon/
    $ mv config-sample.inc.php config.inc.php
    

    Identifique as linhas abaixo no arquivo config.inc.php e substitua com os valores das chaves geradas no portal da Amazon:

    ...
    CFCredentials::set(array(
    
            // Credentials for the development environment.
            'development' => array(
    
                    // Amazon Web Services Key. Found in the AWS Security Credentials. You can also pass
                    // this value as the first parameter to a service constructor.
                    'key' => 'development-key',
    
                    // Amazon Web Services Secret Key. Found in the AWS Security Credentials. You can also
                    // pass this value as the second parameter to a service constructor.
                    'secret' => 'development-secret',
    
                    // This option allows you to configure a preferred storage type to use for caching by
                    // default. This can be changed later using the set_cache_config() method.
                    //
                    // Valid values are: `apc`, `xcache`, or a file system path such as `./cache` or
                    // `/tmp/cache/`.
                    'default_cache_config' => '',
    
                    // Determines which Cerificate Authority file to use.
                    //
                    // A value of boolean `false` will use the Certificate Authority file available on the
                    // system. A value of boolean `true` will use the Certificate Authority provided by the
                    // SDK. Passing a file system path to a Certificate Authority file (chmodded to `0755`)
                    // will use that.
                    //
                    // Leave this set to `false` if you're not sure.
                    'certificate_authority' => false
            ),
    
            // Specify a default credential set to use if there are more than one.
            '@default' => 'development'
    ));
    
    

    Neste ponto já temos o sdk para php com as chaves de acesso configuradas. Vamos agora para a criação do nosso script de envio de arquivos para o bucket.

  9. Criando e usando o script de envio de backup
  10. Crie um script php com o conteúdo abaixo (O nome do arquivo que eu criei foi aws_s3_send.php). Substitua o valor da constante BUCKET_NAME com o nome do bucket criado no serviço do S3. No meu caso, usei um bucket chamado douglas.pasqua que criei anteriormente.

    <?php
    // Bucket Name
    define('BUCKET_NAME', 'douglas.pasqua');
    
    // inclui sdk da amazon
    require_once("sdk-amazon/sdk.class.php");
    
    // Instantiate the AmazonS3 class
    $s3 = new AmazonS3();
    
    /* validacoes */
    $bucket_exists = $s3->if_bucket_exists(BUCKET_NAME);
    if(!$bucket_exists) {
            die("Bucket '" . BUCKET_NAME . "' nao existe");
    }
    
    if ($argc != 2) {
            die("Usage: " . $argv[0] . " <arquivo_para_upload>" . PHP_EOL);
    }
    
    // verifica se arquivo p/ upload existe no bucket
    $file = $argv[1];
    if(!file_exists($file) || !is_file($file)) {
            die("Arquivo informado '$file' nao existe ou nao eh valido" . PHP_EOL);
    }
    $filename = basename($file);
    
    // verifica se objeto jah existe no bucket
    $object_exists = $s3->if_object_exists(BUCKET_NAME, $filename);
    if($object_exists) {
            die("Arquivo '$filename' ja consta no bucket remoto" . PHP_EOL);
    }
    
    $response = $s3->create_object(BUCKET_NAME, $filename, array('fileUpload' => $file));
    $upload_ok = $response->isOk();
    
    if($upload_ok) {
            echo "Arquivo '$file' enviado com sucesso para o bucket '" . BUCKET_NAME . "'" . PHP_EOL;
    } else {
            echo "Erro ao enviar '$file' para o bucket '" . BUCKET_NAME . "'" . PHP_EOL;
    }
    
    

    Usando o script:

    $ php aws_s3_send.php www-20130404.tar.gz
    Arquivo 'www-20130404.tar.gz' enviado com sucesso para o bucket 'douglas.pasqua'
    $ php aws_s3_send.php sqldump-20130404.gz
    Arquivo 'sqldump-20130404.gz' enviado com sucesso para o bucket 'douglas.pasqua'
    

    Basta agora você usar esse script no seu próprio mecanismo de geração de backup.

    PS: Você pode verificar os arquivos existentes no bucket acessando o console da amazon no serviço S3, usando sua conta. Através do console da amazon é possível fazer o download dos arquivos, excluir ou incluir novos.

    Nosso script faz algumas validações interessantes antes de enviar o arquivo:

    • Verifica se o bucket de destino existe no storage da Amazon, para evitar uma tentativa de envio para um bucket inexistente.
    • Verifica se o arquivo com o mesmo nome já consta no bucket, para evitar duplicidade.
  11. Configurando o Lifecycle
  12. O Lifecycle é uma funcionalidade associado ao seu bucket que permite configurar o tempo de vida para os arquivos armazenados nele. Útil por exemplo, caso você queria manter um histórico dos backups de no máximo 30 dias ou o tempo que preferir.

    Após o tempo configurado, o próprio serviço da Amazon excluirá seus arquivos.

    PS: Lembre-se que a Amazon cobra pelo uso de dados armazenados. Portanto, é interessante avaliar essa questão de tempo de vida dos seus arquivos para economizar dinheiro com o serviço.

    PS: A Amazon disponibiliza uma opção de mover seus arquivos para o Glacier, caso não queira excluí-los de vez. o Glacier é uma opção de armazenamento de custo extremamente mais baixo. Porém você não consegue recuperar imediatamente os arquivos armazenados no Glacier. (Normalmente terá que esperar de 3 a 5 horas).

    Para criar uma regra no Lifecyle, abra o console da Amazon no serviço S3. Identifique o bucket que deseja configurar, clique primeiro no ícone da lupa ao lado, depois na opção Lifecycle e depois em Add rule. Veja figura:

    ScreenShot095

    Irá abrir uma janela para configurar a Regra. Veja figura abaixo já parametrizada:

    ScreenShot096

    Principais parâmetros:

    • Name: Nome identificador da regra.
    • Apply to Entire Bucket: A regra se aplica para o bucket inteiro. Como alternativa, ao invés de marcar essa opção, você pode inserir um prefixo no campo Prefix: para que a regra se aplique somente aos arquivos que comecem com o prefixo escolhido.
    • Expiration: Clique no botão Expiration: e defina o número de dias em que o objeto deverá ser excluído contando a partir da data que foi incluso.
    • Move to Glacier: Clique no botão Move to Glacier: e defina o número de dias em que o objeto deverá ser movido para o Glacier contando a partir da data que foi incluso.

    PS: Você tem a opção de escolher um tempo de expiração ou um tempo para mover para o Glacier ou os dois juntos.

Parabéns

Caso tenha chego até aqui, provavelmente conseguiu criar seu script de envio de arquivos para o bucket com sucesso. Boa sorte!

Referências:

http://aws.amazon.com/pt/s3/
http://aws.amazon.com/pt/glacier/
http://aws.amazon.com/pt/sdkforphp/

Ler Post Completo | Make a Comment ( 2 so far )

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: