Tag Archives: PHP

Laravel Framework: conditional assets

A big concern related to front end performance is the burden brought by javascript includes, which tend to be big in size. Fortunately there are techniques and best practices to minimize this issue. Loading javascript files (and why not CSS files…) during navigation can be a very good idea.

Laravel Framework has a class to manage assets that allows you, among other things, to load Javascript and CSS files only when needed. All you have to do is use asset containers. Add a new file to a container and it (the file) will be loaded when the route is called and the action is executed. Let’s take a look how it works from within a controller.

Let’s assume we have an asset container being registered and its assets being loaded in the layout file (layout.blade.php):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
< ?php
  // Register the files
  Asset::container('custom')->add('CustomJS', 'js/custom.js');
  Asset::container('custom')->add('CustomCSS', 'css/custom.css');
?>
< !doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8"/>
	<title>Title</title>
        <!--dump assets to HTML-->
  	{{ Asset::container('custom')->styles() }}
	{{ Asset::container('custom')->scripts() }}
</head>
<body>
...
</body></html>

Now we have a javascript with instructions related to products only. We create a filter before in the controller:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Product_Controller extends Base_Controller
{
    function __construct() 
    {
        parent::__contruct();
        // Aplicar o filtro apenas nestas actions
        $this->filter('before', 'addAssetsToProducts')->only( array('new', 'get') );     }
 
    public function action_new()
    {
    ...
}

And in the routes.php we add the filter behavior:

1
2
3
4
Route::filter('addAssetsToProducts', function()
{
    Asset::container("custom")->add("products", "js/products.js");});

When both actions new or get are executed, the file js/product.js (in this case stored in /public/js) will be inserted in our layout file and only for those actions.

Best!

Ved

Laravel Framework: assets condicionais

Uma das grandes preocupações de performance na interface do usuário é a carga trazida pelos includes Javascript, que tendem a ser grandes. Felizmente existem técnicas e boas práticas para minimizar o problema. Carregar arquivos javascript (e pq não folhas de estilos) durante a navegação pode se mostrar um coringa no seu desenvolvimento.

O Laravel Framework possui uma classe para gerenciar assets que lhe permite, entre outras coisas, carregar aquivos Javascript e CSS conforme se precisa deles. Basta utilizar o recurso de asset containers. Adicione um novo arquivo a um container e ele (o arquivo) será carregado quando o link da funcionalidade for requisitada. Vejamos como funciona a partir de um controller.

Supondo que se tenha um asset container sendo carregado no arquivo de layout (layout.blade.php) da aplicação:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
< ?php
  Asset::container('custom')->add('CustomJS', 'js/custom.js');
  Asset::container('custom')->add('CustomCSS', 'css/custom.css');
?>
< !doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8"/>
	<title>Titulo</title>
  	{{ Asset::container('custom')->styles() }}
	{{ Asset::container('custom')->scripts() }}
</head>
<body>
...
</body></html>

Agora imagine que no controller produtos, se tenha um javascript cujo conteúdo seja relevantes apenas para a funcionalidade de produtos. Basta criar um filtro before no controller:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Produtos_Controller extends Base_Controller
{
    function __construct() 
    {
        parent::__contruct();
        // Aplicar o filtro apenas nestas actions
        $this->filter('before', 'addAssetsToProducts')->only( array('new', 'get') );     }
 
    public function action_new()
    {
    ...
}

E no routes.php:

1
2
3
4
Route::filter('addAssetsToProducts', function()
{
    Asset::container("custom")->add("produtos", "js/produtos.js");});

Com isso, quando as actions new e get do controller produtos forem executadas, o javascript js/produtos.js (salvo em /public/js) será inserido no layout da aplicação e apenas para estas actions.

Grande abraço!

Ved

PHP Console: mais uma ferramenta para ajudar no desenvolvimento de apps

Eu frequentemente utilizo print_r() para ver o estado da informação naquele momento da execução, por diversos motivos. Quando se trata de uma API, recorro à gravação de arquivos texto no filesystem com a informação que preciso analisar (pense em chamadas AJAX que não podem ser quebradas). Certamente minha solução é um tanto mambembe e que, apesar de desconfortável, tem me atendido bem. Hoje me deparei com um serviço chamado PHP Console (http://phpconsole.com) que com um único include PHP lhe provê com diversos métodos que fazem o output dos seus dados no site do serviço. Achei uma boa proposta, pois você pode manter um histórico dos seus prints.

Já existe inclusive um package para Laravel 4: https://github.com/Prologue/Phpconsole/

Para entender bem, veja o curto video abaixo:

phpconsole – Getting Started from Support Phpconsole on Vimeo.

Screencast: Laravel e operações CRUD

Neste screencast serão abordadas as 4 operações básicas para o gerenciamento de informações e o armazenamento em banco de dados: Create, Read, Update and Delete, também conhecidas pela sigla CRUD.

Os recursos do framework utilizados durante o screencast foram:

  • Models e relacionamentos
  • ORM
  • Controllers
  • Templates
  • Filtros


Caso queira fazer o download do video, utilize este link: http://bit.ly/15vbgpW

Se encontrar alguma informação incorreta, por gentileza, me avise! vedovelli@gmail.com

Screencast: Laravel e o padrão MVC

Inicio este post agradecendo a todos pelo excelente feedback dado ao primeiro screencast (link) da série Laravel. Fiz tudo certinho, pois não apontaram nada! =D

Neste segundo vídeo, falo brevemente sobre o padrão de projeto MVC (Model, View, Controller) e sua implementação no Laravel.

Caso queira fazer o download do video, utilize este link: http://bit.ly/VqbmOC

Se encontrar alguma informação incorreta, por gentileza, me avise! vedovelli@gmail.com

E para quem está ansioso pela terceira parte, saiba que será sobre templates.

Treinamentos e mais treinamentos!

O ensino tá no meu sangue! A cada novo treinamento ministrado coloco mais uma pedra na base dessa convicção! Neste ano de 2012 o ensino a distância focado em tecnologia deu um salto espantoso: todos os desenvolvedores que conheço que possuem aptidão para ensinar estão ensinando algo, seja como atividade principal ou secundária.

Desde muito tempo eu venho querendo fazer com que o ensino se torne minha atividade principal e a oportunidade se apresentou neste ano, com uma boa parceria com a School of Net. Ali, encontrei o ambiente que eu precisava para me soltar e ensinar da maneira que eu gosto: com liberdade total de criação.

O curso mais recente foi de aplicações com atualização da interface em tempo real, utilizando tecnologias de ponta, tais como node.js, mongodb, raphäel.js, HTML5 e php 5.4. O produto desenvolvimento para o curso foi um sistema para acompanhamento de partidas de futebol, à semelhança do que é encontrado no site globo.com. Além do placar, lances e estatísticas em forma de gráfico são apresentados, todos com atualização realtime.

Clique para visualizar a imagem original

O treinamento foi um sucesso e os alunos receberam além de explicações detalhadas, todo o código fonte da aplicação, para utilizar como base para estudos, material de referência ou ainda utilizar trechos do código em aplicações próprias. No final, Wesley Willians ensinou a turma como criar uma máquina virtual no Amazon Webservices e instalou todos os serviços necessários para a publicação do sistema.

Se você quiser saber mais e se inscrever para a próxima turma, o link do curso é http://www.schoolofnet.com/realtime/