Dica: Listando as rotas no console
O Carlos Brando publicou hoje um artigo sobre como testar rotas no console. Achei legal e decidi compartilhar um código que uso freqüentemente, mas que serve para listar todas as rotas nomeadas existentes. Faça o seguinte no terminal:
$ ./script/console
>> app.methods.grep /_path$/
Este comando, pega todos os métodos da aplicação e filtra utilizando uma expressão regular.
Para melhorar a visualização, você pode adicionar o “y” na frente, para que ele converta o array de retorno em yaml:
>> y app.methods.grep /_path$/
E para ficar ainda melhor, adicione o “sort”, para ficar em ordem alfabética:
>> y app.methods.sort.grep /_path$/
O problema é que existem muitas rotas, numa aplicação bem pequena que tenho aqui chega a 500. Para contornar isso você pode utilizar o poder das expressões regulares. O código abaixo, lista apenas as que começam com ‘s’:
>> y app.methods.sort.grep /^s.*_path$/
Se você não conhece Expressões Regulares, dê uma lida na Web, tem muito material. Caso prefira livros, dê uma conferida no “livro do piazinho”, do Aurélio.
Utilizando layouts no CodeIgniter
Na grande maioria dos sites e sistemas web é apenas modificado o miolo da aplicação, enquanto que o cabeçalho, rodapé, menu, etc. permanecem iguais. E utilizando o modelo MVC, normalmente para cada action do controller temos uma view correspondente, sendo que geralmente um controller: Main com uma action: index, terá a view main/index.php.
No Code Igniter teríamos que fazer tudo manualmente, já que não há como definir um layout que será carregado em cada view, nem esse carregamento automático.
Pelo menos não havia… :D
Criei um pequeno hook que faz esse serviço. Crie seu controller como abaixo:
class Main extends Controller {
function Main()
{
parent::Controller();
}
function index()
{
$this->data->foo = $this->db->get('main_table');
}
function show()
{
$this->data->foo = $this->db->get('another_table');
// Você pode definir manualmente a view e o layout da seguinte forma:
$this->view = 'main/index';
$this->layout = 'popup';
}
}
E ao acessar as duas actions a view main/index.php será chamada com os valores definidos na variável $this->data. Também será carregado o layout application/views/layouts/default.php na função index e application/views/layouts/popup.php na função show.
Download
Faça o download da hook ou de uma aplicação de exemplo (CI 1.6.2).
Instalação
Para utilizar este hook, copie o arquivo Layout.php dentro da pasta application/hooks/, defina a opção $config[‘hooks’] com true no config e adicione o seguinte no arquivo application/config/hook.php:
$hook['post_controller'][] = array(
'class' => 'Layout',
'function' => 'view',
'filename' => 'Layout.php',
'filepath' => 'hooks',
'params' => array()
);
Espero que goste tanto de utilizar isto quanto eu. Me salva algumas linhas de código.
Cortando e redimensionando imagens com o CodeIgniter
Eu sei que não tenho aparecido muito por aqui, mas o desenvolvimento da nova versão do SiGA está tomando todo tempo imaginável e tive que priorizar aquilo, pois o prazo já está estourando. Mas não é sobre isso que quero escrever.
Recentemente precisei de imagens quadradas num projeto e esse mesmo procedimento se repetiria várias vezes, então criei esta extensão da Biblioteca Image_lib que já vem com o CodeIgniter. Na verdade o código serve não só para imagens quadradas, já que o tamanho tem que ser definido literalmente.
Cole o código abaixo na pasta application/library com o nome MY_Image_lib.php:
class MY_Image_lib extends CI_Image_lib {
/**
* Crop and resize a image
*
* @return bool
*/
function crop_and_resize() {
$width = $this->width;
$height = $this->height;
$size = getimagesize($this->source_folder . $this->source_image);
if ($size[0] > $size[1]) {
$this->width = $width / $height * $size[1];
$this->height = $size[1];
} else {
$this->width = $size[0];
$this->height = $height / $width * $size[0];
}
$this->x_axis = ($size[0] - $this->width) / 2;
$this->y_axis = ($size[1] - $this->height) / 2;
if ( ! $this->crop() ) {
return false;
}
$this->width = $width;
$this->height = $height;
if ( ! $this->resize()) {
return false;
}
return true;
}
}
Pra usar é muito fácil:
$config = array(
'source_image' => '/path/para/a/imagem.jpg',
'maintain_ratio' => false,
'width' => 48,
'height' => 48);
$this->load->library('image_lib', $config);
$this->image_lib->crop_and_resize();
E temos uma imagem como a mostrada abaixo:
![]()
