Named params no Code Igniter
Named params são parâmetros enviados numa url, mas sem ordem definida. Na prática são o velho ?var=valor&var2=valor2, mas de um modo mais limpo.
www.seusite.com/controller/método/nome:Felipe/cidade:Teutônia/
Eu venho utilizando CodeIgniter há algum tempo e ele não permite passar variáveis como o PHP normalmente faz e acabei criando algo assim para utilizar. E quando li o artigo do Tulio Faria falando sobre named params, mas no CakePHP, a primeira coisa que pensei é que deveria disponibilizar minha função aqui no blog.
Na verdade é uma estensão da biblioteca URI:
class MY_URI extends CI_URI {
function named_param($var) {
$arr = $this->segment_array();
foreach ($arr as $value) {
if ($var == substr($value, 0, strpos($value, ':'))) {
return substr($value, strpos($value, ':')+1);
}
}
return null;
}
}
Para chamar essa função faça da seguinte maneira:
$this->uri->named_param('nome'); // Na url de exemplo acima retornaria Felipe
$this->uri->named_param('cidade'); // Na url de exemplo acima retornaria Teutônia
Update:
Conversando o Guilherme Medeiros, chegamos a uma solução diferente da de cima. Nesta versão não se chama uma função que retornará o valor, mas sim os valores já estão na variável named, ficando a classe assim:
class MY_URI extends CI_URI {
var $named;
function MY_URI() {
parent::CI_URI();
$uri = $this->segment_array();
foreach($uri as $val) {
if (strpos($val, ':')) {
$this->named->{substr($val, 0, strpos($val, ':'))} = substr($val, strpos($val, ':')+1);
}
}
}
}
Sendo usado assim:
$this->uri->named->nome; // Na url de exemplo acima retornaria Felipe
$this->uri->named->cidade; // Na url de exemplo acima retornaria Teutônia
Vale lembrar que o valor deve ser testado com o isset()
, pois pode não existir.