$_GET no CodeIgniter

20 de dezembro de 2010, em Configurações, Dicas, por

Por padrão, o CodeIgniter não suporta parâmetros $_GET; quando algo assim é identificado no URL, é automaticamente destruído pelo CI. Entretanto, pode haver situações em que é preciso pegar/passar variáveis com GET, seja por usar algum webservice, serviço de pagamento ou o que quer que seja.

Como o CodeIgniter é o melhor framework PHP, com ele também é possível liberar o acesso a parâmetros $_GET com muita facilidade. E mais: somente em controllers específicos!

Este artigo é altamente inspirado no post “$_GET parameters on CodeIgniter“, do blog de Danny Herran.

Configurar o CodeIgniter para aceitar $_GET

A primeira coisa que deve ser feita é uma pequena alteração no arquivo /application/config/config.php. Localize a linha com a configuração “uri_protocol” e altere seu valor para “PATH_INFO“:

$config['uri_protocol'] =  'PATH_INFO';

Então, para cada método que seja preciso mexer com parâmetros GET, adicione o seguinte:

parse_str($_SERVER['QUERY_STRING'], $_GET);

A função parse_str do PHP simplesmente converte os parâmetros do URL em variáveis. Por exemplo:

$str = "framework=codeigniter&features[]=best+framework&features[]=rocks";
parse_str($str);
echo $framework;  // "codeigniter"
echo $features[0]; // "best framework"
echo $features[1]; // "rocks"

Obviamente a variável “str” do exemplo vai receber a URL-alvo (uma ajudinha sobre como pegar a URL atual) e, a partir daí, é possível trabalhar com variáveis comuns pra usar os parâmetros passados através de $_GET no CodeIgniter. Um exemplo de URL seria:

http://codeigniterbrasil.com/controller/metodo/?s=conteudo&c=codeigniter

Bem facinho, certo? Se alguém tiver alguma outra solução/dica sobre como usar GET no CodeIgniter e/ou pegar o URL atual, basta comentar!

12 comentários em "$_GET no CodeIgniter"

gravatar

William Rufino  em 20 de dezembro de 2010

Só pra completar,

tem muitos servidores que o PATH_INFO não está disponível e sim o ORIG_PATH_INFO e também existe o workaround
RewriteCond %{ENV:REDIRECT_APP_PATH} !^$
RewriteRule ^(.*)$ – [E=APP_PATH:%{ENV:REDIRECT_APP_PATH}]

RewriteCond %{ENV:APP_PATH} ^$
RewriteRule ^(.*)$ – [E=APP_PATH:/$1]

Colocando isso no htacces vc pode colocar a oAPP_PATH

gravatar

Ricardo Pedrosa  em 25 de janeiro de 2011

Olá galera,

A um tempo atrás eu estava procurando uma solução assim, e encontrei a mesma citada neste post. Porém alguns dias atrás eu encontrei um outra solução no site oficial do codeigniter que me parece ser muito boa.

Com essa solução as urls ficam ainda mais amigáveis, e o controller fica mais organizado por se tratar de uma função.

Ex: http://www.yoursite.com/index.php/class/function/request...

Fica a dica http://codeigniter.com/wiki/alternative_to_GET/

gravatar

Thiago  em 2 de janeiro de 2012

Pessoal, tive que trocar para o PATH_INFO, pois o CodeIgniter não estava funcionando no servidor da Locaweb. Mas agora não está chegando nenhum dado com post. O $this->input->post() retorna sempre vazio. Vocês tem alguma ideia do que seria isso?

gravatar

Francis  em 12 de maio de 2012

Tárcio, me diga, na versão 2.1.0, não basta apenas chamar a url como está:

yoursite.com/class/function/value1/value2

e capturá-los com variáveis atribuídas na função criada na classe?

gravatar

Tárcio Zemel  em 13 de maio de 2012

Sim, é verdade! Mas, no seu exemplo, não há query string.

gravatar

Tárcio Zemel  em 13 de maio de 2012

O comportamento padrão do CI é passar os dados ao se usar $this->input->post(); caso não haja erros na lógica da sua aplicação, então, quase certeza de que seja algum tipo de configuração obscura no server da Locaweb (o que não me surpreenderia).

Entre em contato com seu suporte.

Att

gravatar

Marcelo  em 20 de novembro de 2012

Blz Tárcio,

Tudo bem ?

Carinha, tu manja um pouco de ARDUINO + PHP

gravatar

Tárcio Zemel  em 22 de novembro de 2012

Nada, nada!

Mas veja que coincidência, há alguns dias fiquei com uma enorme vontade de aprender Arduino para "brincar" um pouco! =D

Você tem alguma dica de por onde posso começar?

Att

gravatar

Marcelo  em 24 de novembro de 2012

Opa… sou iniciante também.

Estava/estou com problemas para passar uns valores do arduino para o CI…

Me passa um e-mail, podemos trocar uma idéia…

Te garanto, bem divertido esse Arduino.

Abraço

gravatar

Mateus Gamba  em 22 de janeiro de 2013

estava utlizando essa função, porem se enviar um parametro vazio, dá erro. então troquei a seguinte linha:

if(!empty($value) || $value='') $requestArray[$key]=$value;

por essa:

$requestArray[$key]=$value;

gravatar

Tárcio Zemel  em 30 de janeiro de 2013

Obrigado por compartilhar!

gravatar

Jorge Jeferson  em 28 de março de 2013

Man, eu estou pegando pelo $this->input->get() não serve não???

    Comente!