Arquivo de janeiro de 2008

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:

PHP:
  1. class MY_URI extends CI_URI {
  2. function named_param($var) {
  3. $arr = $this->segment_array();
  4. foreach ($arr as $value) {
  5. if ($var == substr($value, 0, strpos($value, ':'))) {
  6. return substr($value, strpos($value, ':')+1);
  7. }
  8. }
  9. return null;
  10. }
  11. }

Para chamar essa função faça da seguinte maneira:

PHP:
  1. $this->uri->named_param('nome'); // Na url de exemplo acima retornaria Felipe
  2. $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:

PHP:
  1. class MY_URI extends CI_URI {
  2. var $named;
  3.  
  4. function MY_URI() {
  5. parent::CI_URI();
  6.  
  7. $uri = $this->segment_array();
  8. foreach($uri as $val) {
  9. if (strpos($val, ':')) {
  10. $this->named->{substr($val, 0, strpos($val, ':'))} = substr($val, strpos($val, ':')+1);
  11. }
  12. }
  13. }
  14. }

Sendo usado assim:

PHP:
  1. $this->uri->named->nome; // Na url de exemplo acima retornaria Felipe
  2. $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.