Criando componentes
Postado por Carlitos | Tags cakebook , cakephp , componentes , components | Postado em 12:03
0
Bom dia povo! Ontem eu vi que havia um trecho de código que sempre se repetia ao longo de alguns controllers de um sistema em Cake que estou desenvolvendo e resolvi criar um componente com esta funcionalidade e aproveitar o reuso de código de forma limpa né ;)
Bom, vamos lá... mãos a obra!
O código é simples, trata-se de uma função que retorna o nome do navegador (browser) que o usuário está utilizando e qual a versão dele. Mas pra que usar isto, mano? Bom, é muito útil quando há alguma parte do seu site/sistema que "não funciona" em determinado navegador. Por exemplo, no meu caso existe uns getgads (firulas) na parte de validação de formulário que "não funciona" no IE 6 ou inferior.
Os componentes devem ficar dentro da pasta "./app/controllers/components/". O nome do meu componente é "Navegador", então criei o arquivo "./app/controllers/components/navegador.php", com o código
<?php
class NavegadorComponent extends Object {
}
?>
Depois adicionei a função que retorna as informações sobre o navegador
<?php
class NavegadorComponent extends Object {
// Função que retorna o Brownser que está sendo usado
function getBrowser(){
$var = $_SERVER['HTTP_USER_AGENT'];
$info['browser'] = "OTHER";
// valid brosers array
$browser = array ("MSIE", "OPERA", "FIREFOX", "MOZILLA", "NETSCAPE", "SAFARI", "LYNX", "KONQUEROR");
// bots = ignore
$bots = array('GOOGLEBOT', 'MSNBOT', 'SLURP');
foreach ($bots as $bot)
// if bot, returns OTHER
if (strpos(strtoupper($var), $bot) !== FALSE)
return $info;
// loop the valid browsers
foreach ($browser as $parent){
$s = strpos(strtoupper($var), $parent);
$f = $s + strlen($parent);
$version = substr($var, $f, 5);
$version = preg_replace('/[^0-9,.]/','',$version);
if (strpos(strtoupper($var), $parent) !== FALSE){
$info['browser'] = $parent;
$info['version'] = $version;
return $info;
}
}
return $info;
}
}
?>
Agora para poder ter acesso a esta nova funcionalidade você deverá adicionar o componente "Navegador" ao seu controller. Mas como? Veja exemplo abaixo
<?php
class TestesController extends AppController{
$components = array('Navegador'); // Adiciono o componente "Navegador" ao controller Testes
function add(){
/* guardo na variável 'browser' o array retornado pela função getBrowser do
* meu componente Navegador com os dados do navegador do usuário
* como usei o $this->set, esta informação estará disponível para a view add
* através da variável $browser, que é um array. */
$this->set('browser', $this->Navegador->getBrowser());
}
}
?>
Simples não? Espero que tenham entendido e que seja útil!
Consultem também a documentação oficial do CakePHP sobre o uso e criação de componentes aqui!
Abração,
Comentários postados (0)
Postar um comentário