<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CodeIgniter Brasil &#187; Configurações</title>
	<atom:link href="http://codeigniterbrasil.com/categoria/configuracoes/feed/" rel="self" type="application/rss+xml" />
	<link>http://codeigniterbrasil.com</link>
	<description>tutoriais, dicas, macetes, códigos e informações sobre o melhor framework PHP: CodeIgniter</description>
	<lastBuildDate>Thu, 03 May 2012 01:07:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Trabalhando com diversos ambientes no CodeIgniter</title>
		<link>http://codeigniterbrasil.com/configuracoes/trabalhando-com-diversos-ambientes-no-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/configuracoes/trabalhando-com-diversos-ambientes-no-codeigniter/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 13:00:34 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Configurações]]></category>
		<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=147</guid>
		<description><![CDATA[O CodeIgniter é o melhor framework PHP da atualidade e, para corroborar esta informação, veremos que é possível trabalhar com diversos &#8220;ambientes&#8221; no CI. Mas o que, exatamente, isso significa? O que são &#8220;ambientes&#8221; no CodeIgniter? Em desenvolvimento de software &#8211; principalmente quando se trabalha com algum tipo de controle de versões &#8211; é bastante [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-64 ilustra-artigo" src="http://codeigniterbrasil.com/wp-content/uploads/2010/01/controllers-codeigniter.jpg" alt="" width="350" height="200"></p>
<p>O <strong>CodeIgniter</strong> é o <strong>melhor framework PHP</strong> da atualidade e, para corroborar esta informação, veremos que é possível trabalhar com diversos &#8220;ambientes&#8221; no CI. Mas o que, exatamente, isso significa?</p>
<h2>O que são &#8220;ambientes&#8221; no CodeIgniter?</h2>
<p>Em desenvolvimento de software &#8211; principalmente quando se trabalha com algum tipo de controle de versões &#8211; é bastante comum existirem diversos &#8220;<strong>ambientes</strong>&#8220;. Quando se desenvolve software (e sistemas e aplicações web estão aí inclusos), é desejável que determinadas configurações de seu ambiente de desenvolvimento sejam diferentes, dependendo de onde estão atualmente sendo executadas.</p>
<p>Por exemplo, quando se está programando, é desejável que a exibição de erros esteja habilitada. Afinal, este tipo de informação é útil para o(s) programador(es) e, como o site ainda não está &#8220;aberto ao público&#8221;, não há perigo em expor quaisquer configurações e/ou <em>paths</em> referentes ao projeto. Já para quando o site está &#8220;aberto&#8221;, é importante que este tipo de informação <strong>não seja exibida</strong>, já que exibe informações críticas relativas ao <em>software</em> e atrapalha a experiência do visitante/usuário &#8211; imagine erros de MySQL sendo exibidos para um pobre visitante que veio de uma SERP&#8230;</p>
<p>Geralmente existem 3 ambientes:</p>
<ul>
<li><strong>desenvolvimento.</strong> Como sugere o próprio nome, é o ambiente usado pelos desenvolvedores para a produção e aprimoramento do software.</li>
<li><strong>homologação ou teste.</strong> Quando chegar o momento de testar o software (isso varia conforme o projeto, metodologia, equipe, etc), é neste ambiente em que isso é feito. O ambiente, além de estar disponível para &#8220;testadores oficiais&#8221; que fazem parte da equipe, também pode ser acessado por usuários escolhidos ou outras pessoas.</li>
<li><strong>produção.</strong> Acessado pelos visitantes e &#8220;usuários finais&#8221;. É quando já de desenvolveu/aprimorou o projeto (ou alguma parte específica dele), isso já foi passado (e aprovador) no ambiente de testes e, agora, está disponível para todas as pessoas.</li>
</ul>
<p>Essas não são nomenclaturas &#8220;oficiais&#8221; e nem os ambientes precisam se restringir a 3, mas esse é o dia-a-dia da maioria dos projetos de desenvolvimento de software e funciona muito bem, obrigado!  ;-)</p>
<p>E, como não poderia deixar de ser, uma das características do CodeIgniter é permitir que se lide com esses diferentes ambientes e suas respectivas configurações de forma bem fácil e simples!</p>
<h2>Como configurar ambientes no CodeIgniter</h2>
<p>A configuração de ambientes no CodeIgniter se dá, principalmente, no arquivo <strong>index.php</strong>. Nele, logo no início, há a definição da constante <strong>ENVIRONMENT</strong>. É aqui que se define qual ambiente será usado para a execução do CI.</p>
<p>Logo abaixo tem um <strong>switch</strong>. Ele simplesmente checa qual é o tipo de ambiente e, dependendo do resultado, aplica diferentes configurações.</p>
<p>E pode parecer incrível, mas é somente isso! Somente definindo qual ambiente será usado no momento (e que vai ser configurado segundo as configurações/diretrizes definidos no switch), já temos um controle de ambientes no CodeIgniter!</p>
<h2>Exemplo de configuração de ambientes</h2>
<p>Como se trata de um switch simples, é possível definir qualquer coisa que se queira para os diferentes ambientes. Voltemos ao exemplo da exibição de erros segundo o ambiente. Aproveitando, vamos suprimir o salvamento de queries ao BD quando não for necessário. Veja como é simples configurar o switch:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p147code5'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1475"><td class="code" id="p147code5"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>ENVIRONMENT<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'desenvolvimento'</span><span style="color: #339933;">:</span>
        <a href="http://www.php.net/error_reporting"><span style="color: #990000;">error_reporting</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">E_ALL</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'teste'</span><span style="color: #339933;">:</span>
    <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'producao'</span><span style="color: #339933;">:</span>
	<a href="http://www.php.net/error_reporting"><span style="color: #990000;">error_reporting</span></a><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save_queries</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
	<a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'O ambiente da aplica&amp;ccedil;&amp;atilde;o n&amp;atilde;o est&amp;aacute; definido corretamente.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Então, se o ambiente estiver configurado como &#8220;desenvolvimento&#8221;, os erros serão exibidos e as queries salvas.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p147code6'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1476"><td class="code" id="p147code6"><pre class="php" style="font-family:monospace;"><a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ENVIRONMENT'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'desenvolvimento'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Caso esteja definido o ambiente de &#8220;teste&#8221; ou &#8220;producao&#8221;, os erros e salvamento de queries são suprimidos.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p147code7'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1477"><td class="code" id="p147code7"><pre class="php" style="font-family:monospace;"><a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ENVIRONMENT'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Ou seja, mudando <strong>1 palavra em 1 linha de código</strong> é possível alternar entre os diferentes ambientes (lembrando que não precisando ser somente 3, seu switch pode ter quantos você quiser) e colher os benefícios de suas respectivas configurações.</p>
<h2>Fluxo do software controlado pelo ambiente atual</h2>
<p>Além de definir configurações que variam conforme o ambiente em que se esteja, também é possível definir o fluxo da aplicação e/ou executar funções específicas. Trata-se, tão somente, de uma constante que é definida, portanto, nada impede que, em algum controller, tenha-se um condicional do tipo:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p147code8'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1478"><td class="code" id="p147code8"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>ENVIRONMENT <span style="color: #339933;">==</span> <span style="color: #0000ff;">'desenvolvimento'</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// Código somente para o ambiente de desenvolvimento</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h2>Conclusão</h2>
<p>Como vimos, lidar com diferentes ambientes em desenvolvimento de software usando CodeIgniter é tão difícil quanto alterar 1 linha de código&#8230; Configurando corretamente cada ambiente, é possível garantir maior <strong>segurança</strong>, <strong>desempenho</strong> e <strong>estabilidade</strong> ao projeto, já que é possível estabelecer diretivas específicas para cada um.</p>
<p>E você, tem alguma dica ou configuração que gostaria de recomendar para cada ambiente? Comente!</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/configuracoes/trabalhando-com-diversos-ambientes-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>$_GET no CodeIgniter</title>
		<link>http://codeigniterbrasil.com/configuracoes/_get-no-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/configuracoes/_get-no-codeigniter/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 12:00:04 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Configurações]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[controller]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=93</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-61 ilustra-artigo" src="http://codeigniterbrasil.com/wp-content/uploads/2010/01/url-uri-codeigniter.jpg" alt="" width="350" height="200"></p>
<p>Por padrão, o <strong>CodeIgniter</strong> 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.</p>
<p>Como o <strong>CodeIgniter é o melhor framework PHP</strong>, com ele também é possível liberar o acesso a parâmetros $_GET com muita facilidade. E mais: somente em <a href="http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/">controllers</a> específicos!</p>
<div class="alert">
Este artigo é altamente inspirado no post &#8220;<a href="http://www.dannyherran.com/2010/12/_get-parameters-on-codeigniter/">$_GET parameters on CodeIgniter</a>&#8220;, do <a href="http://www.dannyherran.com/">blog de Danny Herran</a>.
</div>
<h2>Configurar o CodeIgniter para aceitar $_GET</h2>
<p>A primeira coisa que deve ser feita é uma pequena alteração no arquivo <strong>/application/config/config.php</strong>. Localize a linha com a configuração &#8220;<strong>uri_protocol</strong>&#8221; e altere seu valor para &#8220;<strong>PATH_INFO</strong>&#8220;:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p93code13'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p9313"><td class="code" id="p93code13"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'uri_protocol'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span>  <span style="color: #0000ff;">'PATH_INFO'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

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

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p93code14'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p9314"><td class="code" id="p93code14"><pre class="php" style="font-family:monospace;"><a href="http://www.php.net/parse_str"><span style="color: #990000;">parse_str</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'QUERY_STRING'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>A <a href="http://php.net/manual/en/function.parse-str.php">função parse_str do PHP</a> simplesmente converte os parâmetros do URL em variáveis. Por exemplo:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p93code15'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p9315"><td class="code" id="p93code15"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;framework=codeigniter&amp;features[]=best+framework&amp;features[]=rocks&quot;</span><span style="color: #339933;">;</span>
<a href="http://www.php.net/parse_str"><span style="color: #990000;">parse_str</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$framework</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// &quot;codeigniter&quot;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$features</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// &quot;best framework&quot;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$features</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// &quot;rocks&quot;</span></pre></td></tr></table></div>

<p>Obviamente a variável &#8220;str&#8221; do exemplo vai receber a URL-alvo (uma ajudinha sobre <a href="http://www.google.com.br/search?q=php+get+url">como pegar a URL atual</a>) 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:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p93code16'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p9316"><td class="code" id="p93code16"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//codeigniterbrasil.com/controller/metodo/?s=conteudo&amp;c=codeigniter</span></pre></td></tr></table></div>

<p>Bem facinho, certo? Se alguém tiver alguma outra solução/dica sobre <strong>como usar GET no CodeIgniter</strong> e/ou pegar o URL atual, basta comentar!</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/configuracoes/_get-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Configuração de rotas (routes) no CodeIgniter</title>
		<link>http://codeigniterbrasil.com/configuracoes/configuracao-rotas-routes-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/configuracoes/configuracao-rotas-routes-codeigniter/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 18:38:03 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Configurações]]></category>
		<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=78</guid>
		<description><![CDATA[O relacionamento padrão entre uma URL e um Controller no CodeIgniter segue a estrutura exemplo.com/classe/metodo/id/ (como mostrado no artigo sobre Controllers no CodeIgniter), mas, às vezes, é preciso &#8220;remapear&#8221; este relacionamento. No CodeIgniter, isso é feito através de routes (rotas). Este é um guest post de Julio Bitencourt, que pode ser encontrado na internet através [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2010/07/rotas-routes-codeigniter-configuracao.gif" alt="Rotas (routes) no CodeIgniter: configuração" title="" width="400" height="200" class="aligncenter size-full wp-image-83 ilustra-artigo" /></p>
<p>O relacionamento padrão entre uma URL e um Controller no CodeIgniter segue a estrutura exemplo.com/classe/metodo/id/ (como mostrado no artigo sobre <a href="/passos-iniciais/controllers-no-codeigniter/">Controllers no CodeIgniter</a>), mas, às vezes, é preciso &#8220;remapear&#8221; este relacionamento. No CodeIgniter, isso é feito através de <strong>routes</strong> (rotas).</p>
<div class="guest-post">
Este é um guest post de <strong>Julio Bitencourt</strong>, que pode ser encontrado na internet através de:</p>
<ul>
<li><a href="http://www.juliobitencourt.com/">Blog de Julio Bitencourt</a></li>
<li><a href="http://www.twitter.com/juliobitencourt">twitter de Julio Bitencourt</a></li>
</ul>
</div>
<p>Tomemos como exemplo a visualização de produtos em uma loja virtual. Digamos que a página para visualização dos detalhes de uma cadeira de balanço seja acessada através da URL <strong>minhaloja.com/produtos/detalhes/1/2</strong> onde &#8220;produtos&#8221; é nosso controller; &#8220;detalhes&#8221; é a função que exibe os detalhes do produto; &#8220;1&#8243; seja o código da categoria cadeiras; e &#8220;2&#8243; seja o código de nossa cadeira de balanço. Esta estrutura funciona perfeitamente, mas, convenhamos, não é &#8220;elegante&#8221;.</p>
<h2>Configuração de rotas</h2>
<p>A configuração de rotas é feita através do arquivo <strong>/application/config/routes.php</strong>, na instalação padrão  do CodeIgniter. Alguns exemplos de configuração de routes:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p78code24'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7824"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p78code24"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// &quot;minhaloja.com/fale-conosco&quot; vai direcionar para o controller &quot;contato&quot;</span>
<span style="color: #000088;">$route</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'fale-conosco'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;contato&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// &quot;minhaloja.com/fale-conosco&quot; vai direcionar para o controller &quot;cadastros&quot;</span>
<span style="color: #666666; font-style: italic;">// utilizando a função &quot;novo_cliente&quot;</span>
<span style="color: #000088;">$route</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cadastro/clientes'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;cadastros/novo_cliente&quot;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<div class="alert">
Rotas são executados na ordem em que são definidas. Rotas &#8220;superiores&#8221; sempre prevalecem sobre rotas &#8220;inferiores&#8221;.
</div>
<h2>Wildcards ou Curingas</h2>
<p>Você pode usar curingas (<em>wildcards</em>) para configurar rotas. Desta forma, é possível deixar as URLs mais dinâmicas. Existem 2 tipos de wildcards:</p>
<ol>
<li><strong>:num.</strong> O wildcard &#8220;:num&#8221;, utilizado para rotear somente números.</li>
<li><strong>:any.</strong> O curinga &#8220;:any&#8221;, utilizado para rotear qualquer caractere.</li>
</ol>
<p>Voltando ao exemplo anterior, que tal transformar a URL &#8220;minhaloja.com/produtos/detalhes/1/2&#8243; em &#8220;minhaloja.com/1/2/&#8221;? Seguindo a estrutura padrão do CodeIgniter, pressupõe-se que se está chamando o controller &#8220;1&#8243; e, dentro do controller, a função &#8220;2&#8243;, o que não existe na prática.</p>
<p>Para resolver o problema, vamos escrever a seguinte rota:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p78code25'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7825"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p78code25"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$route</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">':num/:num'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;produtos/detalhes&quot;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Dessa forma, haverá direcionamento para &#8220;produtos/detalhes&#8221; sempre que os seguimentos 1 e 2 da URL sejam numéricos.</p>
<p>Exemplo da função detalhes dentro do controller &#8220;produtos&#8221;:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p78code26'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7826"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code" id="p78code26"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Produtos <span style="color: #000000; font-weight: bold;">extends</span> CI_Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Função index é acessada quando não for passada nenhuma função para o controller</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> detalhes<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">uri</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">segment</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// retorna o código da categoria</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">uri</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">segment</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// retorna o código do produto</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h2>Rotas com expressões regulares</h2>
<p>É possível utilizar expressões regulares para definir as rotas no CodeIgniter. Vamos reescrever a rota do nosso exemplo:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p78code27'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7827"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p78code27"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$route</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'(:num)/(:num)'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;produtos/detalhes/<span style="color: #006699; font-weight: bold;">$1</span>/<span style="color: #006699; font-weight: bold;">$2</span>&quot;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Agora, o controller fica assim:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p78code28'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7828"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code" id="p78code28"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Produtos <span style="color: #000000; font-weight: bold;">extends</span> CI_Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Função index é acessada quando não for passada nenhuma função para o controller</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> detalhes<span style="color: #009900;">&#40;</span><span style="color: #000088;">$id_categoria</span><span style="color: #339933;">,</span> <span style="color: #000088;">$id_produto</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$id_categoria</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// retorna o código da categoria</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$id_produto</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// retorna o código do produto</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h2>Rotas e SEO</h2>
<p>A URL minhaloja.com/1/2/ ficou bem mais curta e elegante, mas não é amigável quando vamos falar de <a href="http://pt.wikipedia.org/wiki/SEO">SEO</a>. É muito melhor ter uma estrutura como:</p>
<p><strong>http://minhaloja.com/cadeiras/cadeira-de-balanco/</strong></p>
<p>Esta URL é &#8220;amigável&#8221; para os motores de busca e, se você tiver, por exemplo, um campo no cadastro de produtos da loja para armazenar o nome da categoria e uma &#8220;descrição de URL&#8221; (slug) do produto &#8211; como &#8220;cadeira-de-balanco&#8221; -, fica muito fácil. Essa técnica é comumente chamada de <strong>URLs amigáveis</strong>.</p>
<p>A regra do exemplo é:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p78code29'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7829"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p78code29"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$route</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'(:any)/(:any)'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;produtos/detalhes/<span style="color: #006699; font-weight: bold;">$1</span>/<span style="color: #006699; font-weight: bold;">$2</span>&quot;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>O controller permanece inalterado; só é preciso buscar no banco de dados os produtos com base nos slugs de categoria e produto &#8211; caso não saiba como criar slugs, confira o artigo &#8220;<a href="http://desenvolvimentoparaweb.com/php/urls-amigaveis-slug-a-wordpress/">URLs amigáveis (slug) à WordPress</a>&#8220;, do blog <a href="http://desenvolvimentoparaweb.com/">desenvolvimento para web</a>.</p>
<h2>Rotas reservadas</h2>
<p>Existem um <em>wildcard</em> reservado no CodeIgniter: &#8220;welcome&#8221;. Ou seja, você não poderá utilizar a seguinte rota em seus projetos:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p78code30'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7830"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p78code30"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$route</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default_controller'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'welcome'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h2>Conclusão</h2>
<p>Rotas servem para alterar o relacionamento padrão entre uma URL e um Controller no CodeIgniter. Sabendo utilizar bem os tipos de rotas disponíveis, é possível criar estruturas incríveis, que realmente facilitam o desenvolvimento e acesso a controllers e funções &#8211; e o SEO agradece!</p>
<p>Com estas dicas já é possível configurar suas rotas e melhorar a navegação em seus projetos com CodeIgniter.</p>
<p>Espero que tenham gostado deste meu primeiro artigo no <a href="/">CodeIgniter Brasil</a> e <a href="/feed">fiquem ligados</a> para mais novidades!</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/configuracoes/configuracao-rotas-routes-codeigniter/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
	</channel>
</rss>

