<?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; Passos Iniciais</title>
	<atom:link href="http://codeigniterbrasil.com/categoria/passos-iniciais/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>Mon, 30 Jan 2012 11:20:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>CodeIgniter Drivers</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/codeigniter-drivers/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/codeigniter-drivers/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 15:57:25 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[código-fonte]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=140</guid>
		<description><![CDATA[Drivers no CodeIgniter, apesar de ser algo relativamente novo no framework, não tem nada de complicado. Na verdade, drivers não passam de bibliotecas, mas com característica e modo de usar ligeiramente diferentes. Como já foi abordado aqui, no CodeIgniter Brasil, como carregar bibliotecas e como criar bibliotecas no CodeIgniter, chegou a hora de abordar os [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://codeigniterbrasil.com/wp-content/uploads/2012/01/codeigniter-driver-drivers.jpg"><img src="http://codeigniterbrasil.com/wp-content/uploads/2012/01/codeigniter-driver-drivers.jpg" alt="CodeIgniter Drivers" title="" width="500" height="200" class="aligncenter size-full wp-image-141 ilustra-artigo" /></a></p>
<p><strong>Drivers no CodeIgniter</strong>, apesar de ser algo relativamente novo no framework, não tem nada de complicado. Na verdade, drivers não passam de bibliotecas, mas com característica e modo de usar ligeiramente diferentes. Como já foi abordado aqui, no CodeIgniter Brasil, <a href="http://codeigniterbrasil.com/passos-iniciais/carregando-bibliotecas-libraries-no-codeigniter/" title="Carregando bibliotecas (libraries) no CodeIgniter">como carregar bibliotecas</a> e <a href="http://codeigniterbrasil.com/passos-iniciais/como-criar-biblioteca-library-codeigniter/" title="Como criar bibliotecas (libraries) no CodeIgniter">como criar bibliotecas no CodeIgniter</a>, chegou a hora de abordar os <strong>Drivers do CodeIgniter</strong>.</p>
<h2>Drivers no CodeIgniter</h2>
<p>Como foi dito, <strong>drivers</strong> são, somente, um tipo diferente de library que trabalha mais com o conceito de herança do PHP, quer dizer, existe uma classe mãe e outras classes filhas quaisquer. Classes filhas têm acesso à classe mãe, mas não a suas &#8220;classes irmãs&#8221;.</p>
<p>Então, drivers podem ser usados em situações em que a programação e organização de uma ou mais bibliotecas de um projeto sejam beneficiados ao serem esta(s) classe(s) dividida(s) em diversas outras classes.</p>
<h2>Criando drivers no CodeIgniter</h2>
<p>Drivers devem ser criados no diretório <strong>system/libraries</strong>, em sua própria pasta, que deve ter o mesmo nome da classe mãe. Dentro deste diretório deve existir outra pasta chamada <strong>drivers</strong>, que conterá todas as possíveis classes filhas.</p>
<p>Para que fique mais claro, veja o seguinte modelo de estrutura de drivers no CodeIgniter:</p>
<ul>
<li>/application/libraries/Driver_name</li>
<ul>
<li>Driver_name.php</li>
<li>drivers</li>
<ul>
<li>Driver_name_subclass_1.php</li>
<li>Driver_name_subclass_2.php</li>
<li>Driver_name_subclass_3.php</li>
</ul>
</ul>
</ul>
<div class="alert">
A fim de manter compatibilidade em sistemas de arquivos que são case-sensitive, o diretório &#8220;Driver_name&#8221; deve seguir o padrão <a href="http://www.php.net/manual/pt_BR/function.ucfirst.php">ucfirst()</a>, ou seja, o primeiro caracter em maiúsculo e, os demais, em minúsculo.
</div>
<h2>Usando drivers no CodeIgniter</h2>
<p>Para usar um driver, primeira é preciso inicializá-lo (tal como fazemos com libraries) da seguinte maneira:</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('p140code4'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1404"><td class="code" id="p140code4"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">driver</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'driver_name'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Métodos dessa classe são invocados usando:</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('p140code5'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1405"><td class="code" id="p140code5"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">driver_name</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">method</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>As classes filhas &#8211; os drivers, propriamente ditos &#8211; podem ser chamados diretamente por sua classe mãe, sem a necessidade de iniciar cada uma delas:</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('p140code6'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1406"><td class="code" id="p140code6"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">driver_name</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">child_one</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">some_method</span><span style="color: #009900;">&#40;</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;">driver_name</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">child_two</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">another_method</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Bem tranquilo, certo? Como dissemos, não passam de <a href="http://codeigniterbrasil.com/passos-iniciais/carregando-bibliotecas-libraries-no-codeigniter/" title="Carregando bibliotecas (libraries) no CodeIgniter">bibliotecas do CI</a>.</p>
<h2>Exemplo de driver no CodeIgniter</h2>
<p>Pelo fato de já termos passado sobre alguns artigos sobre libraries e pelo conceito e conteúdo deste artigo, já é possível entender o funcionamento e dinâmica dos drivers no CodeIgniter. Mas, para fixar um conceito, é sempre interessante a visualização e análise de algum exemplo concreto.</p>
<p>E, para o caso, indico o projeto no GitHub que foi criado, justamente, para servir de exemplo: <a href="https://github.com/oliverhr/CI2_Drivers_example/" title="CI2_Drivers_example, no GitHub">CI2_Drivers_example</a>.</p>
<p>Ao baixar e analisar os arquivos, certamente você entenderá melhor como é funcionamento deste recursos interessantíssimo do framework e poderá, a partir de agora, julgar corretamente ao escolher quando usar <strong>drivers no CodeIgniter</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/codeigniter-drivers/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Como criar bibliotecas (libraries) no CodeIgniter</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/como-criar-biblioteca-library-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/como-criar-biblioteca-library-codeigniter/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 12:00:02 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[padrões de projeto]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=136</guid>
		<description><![CDATA[Bibliotecas (ou libraries) no CodeIgniter são importantíssimas, pois, através delas, podemos estender recursos do framework, seja criando nossas próprias bibliotecas ou pegando recursos já prontos disponibilizados pela comunidade. Para o primeiro caso, aprenda como criar bibliotecas no CodeIgniter e veja como essa criação é simples e fácil de ser feita. O que são as bibliotecas [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2011/08/codeigniter-library-biblioteca.jpg" alt="Como criar bibliotecas (libraries) no CodeIgniter: imagem ilustrativa" title="" width="500" height="200" class="aligncenter ilustra-artigo size-full wp-image-122"></p>
<p><strong>Bibliotecas</strong> (ou <strong>libraries</strong>) no CodeIgniter são importantíssimas, pois, através delas, podemos estender recursos do framework, seja criando nossas próprias bibliotecas ou pegando recursos já prontos disponibilizados pela comunidade. Para o primeiro caso, aprenda <strong>como criar bibliotecas no CodeIgniter</strong> e veja como essa criação é simples e fácil de ser feita.</p>
<h2>O que são as bibliotecas no CodeIgniter</h2>
<p>Bibliotecas no CodeIgniter nada mais são do que classes PHP localizadas em <strong>/application/libraries</strong>. Perceba que existe, também, a pasta <strong>/system/libraries/</strong>, mas como foi visto no artigo <a href="http://codeigniterbrasil.com/passos-iniciais/estrutura-de-diretorios-organizacao-de-pastas-do-codeigniter-2/" title="Estrutura de diretórios no CodeIgniter 2">sobre a estrutura de diretórios do CodeIgniter</a>, dentro de /system ficam os arquivos de core do CI, portanto, é prudente mexer ali somente quando realmente souber o que está fazendo.</p>
<p>Fique sabendo, também, que, caso crie uma biblioteca com o mesmo nome de alguma biblioteca nativa do CodeIgniter, esta será sobreescrita pelo seu código! Tenha muita atenção!</p>
<h2>Convenções sobre libraries no CodeIgniter</h2>
<p>Em relação a bibliotecas no CI, <strong>com exceção</strong> das que são para mexer com bancos de dados, é possível:</p>
<ul>
<li>Criar novas bibliotecas</li>
<li>Estender bibliotecas nativas</li>
<li>Sobreescrever bibliotecas nativas (!)</li>
</ul>
<p>Como vimos, os arquivos devem ser criados em <strong>/application/libraries</strong> e seguir as seguintes convenções:</p>
<ul>
<li>O nome deve capitalizado. Por exemplo: <strong>Minhalib.php</strong> </li>
<li>A declaração da classe também: <strong>class Minhalib</strong></li>
<li>O nome do arquivo e da classe devem ser o mesmo (vide exemplos acima)</li>
</ul>
<p>Veja este protótipo de como deve ser uma library no CodeIgniter:</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('p136code21'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13621"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p136code21"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span> <a href="http://www.php.net/defined"><span style="color: #990000;">defined</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'BASEPATH'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</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;">'No direct script access allowed'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Minhalib <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</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>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009900;">&#91;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* End of file Minhalib.php */</span></pre></td></tr></table></div>

<p>E pronto! Já temos uma biblioteca pronta e já podemos usá-la em nossa aplicação! Para usar, você já sabe, basta seguir o que foi explicado no artigo &#8220;<a href="http://codeigniterbrasil.com/passos-iniciais/carregando-bibliotecas-libraries-no-codeigniter/" title="Como carregar bibliotecas (libraries) no CodeIgniter">Carregando bibliotecas (libraries) no CodeIgniter</a>&#8220;. Em um controller, basta usar:</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('p136code22'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13622"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p136code22"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'minhalib'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Em minúsculo, mesmo</span></pre></td></tr></table></div>

<p>E, depois, usar quaisquer funções que sua library contenha. Vamos passar nosso modelo para 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('p136code23'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13623"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code" id="p136code23"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span> <a href="http://www.php.net/defined"><span style="color: #990000;">defined</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'BASEPATH'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</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;">'No direct script access allowed'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Minhalib <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</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>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ola_mundo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">'Ol&amp;aacute; mundo!'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* End of file Minhalib.php */</span></pre></td></tr></table></div>

<p>Então, depois de carregar a biblioteca, para se usar a função ola_mundo(), basta codificar:</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('p136code24'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13624"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p136code24"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">minhalib</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ola_mundo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Sempre em minúsculo</span></pre></td></tr></table></div>

<p>No caso, como temos um retorno em texto, caso fosse preciso escrever esse retorno:</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('p136code25'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13625"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p136code25"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">minhalib</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ola_mundo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h2>Passando parâmetros no carregamento da biblioteca</h2>
<p>É bastante comum ser preciso passar alguns parâmetros na invocação de uma biblioteca. Evidentemente o CI permite fazer isso de uma maneira bastante simples. Primeiramente, vamos preparar nossa classe para receber parâmetros:</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('p136code26'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13626"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p136code26"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span> <a href="http://www.php.net/defined"><span style="color: #990000;">defined</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'BASEPATH'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</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;">'No direct script access allowed'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Minhalib <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$parametros</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009900;">&#91;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* End of file Minhalib.php */</span></pre></td></tr></table></div>

<p>Com isso feito, os $parametros passados o devem ser através de um array (chave/valor). Dessa maneira, na inicialização da classe teríamos algo como:</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('p136code27'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13627"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p136code27"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'minhalib'</span><span style="color: #339933;">,</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'chave1'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'valor1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'chave2'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'valor2'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Ou, para facilitar a leitura e entendimento posteriores:</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('p136code28'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13628"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p136code28"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$parametros</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'chave1'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'valor1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'chave2'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'valor2'</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;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'minhalib'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$parametros</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Então, você pode fazer o que quiser com esses parâmetros. Só por curiosidade, execute o código acima depois de mudar a biblioteca para:</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('p136code29'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13629"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p136code29"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Minhalib <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$parametros</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <a href="http://www.php.net/print_r"><span style="color: #990000;">print_r</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$parametros</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h2>Usando recursos do CodeIgniter em bibliotecas</h2>
<p>É perfeitamente possível (e frequentemente necessário) utilizar recursos nativos do CodeIgniter em bibliotecas que criamos. Mas, para isso, é preciso fazer uma coisinha antes. Como foi visto anteriormente, para chamarmos algum recurso do CI devemos nos valer de funções usando o <strong>$this</strong>, mas, no contexto de criação/edição de bibliotecas, isso não funciona; o $this só funciona, por padrão, para <a href="http://codeigniterbrasil.com/passos-iniciais/models-views-controllers-trabalhando-juntos-codeigniter/" title="MVC em ação no CodeIgniter">models, views e controllers</a>. </p>
<p>Então, para se usar recursos nativos do CodeIgniter em bibliotecas próprias, é preciso <strong>atribuir por referência o super objeto do CodeIgniter a uma variável</strong>:</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('p136code30'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13630"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p136code30"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$CI</span> <span style="color: #339933;">=&amp;</span> get_instance<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>A partir de então, temos acesso a todos os recursos nativos usando a variável <strong>$CI</strong> (ou qualquer outro nome que você queira):</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('p136code31'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13631"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p136code31"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$CI</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">helper</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'url'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$CI</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'session'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#91;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<h2>Estendendo bibliotecas nativas do CodeIgniter</h2>
<p>Foi explicado no <a href="http://codeigniterbrasil.com/passos-iniciais/my_controller-estendendo-o-ci_controller/" title="MY_Controller : estendendo o CI_Controller">artigo sobre MY_Controller</a> que é possível estender o &#8220;controller base&#8221; CI_Controller. O mesmo raciocínio se aplica para o caso de ser preciso estender libraries nativas do CI e, para se fazer isso, é um processo tão simples quanto.</p>
<p>Por exemplo, caso queiramos estender as funcionalidades da library nativa de e-mails, nos valemos do já conhecido prefixo de subclasse &#8220;<strong>MY_</strong>&#8221; (ou o que você tenha definido em <strong>/application/config/config.php</strong>):</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('p136code32'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13632"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p136code32"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> MY_Email <span style="color: #000000; font-weight: bold;">extends</span> CI_Email <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> minha_funcao<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #009900;">&#91;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>E, para os (não raros) casos em que é preciso chamar o construtor da superclasse na inicialização da biblioteca:</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('p136code33'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13633"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p136code33"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> MY_Email <span style="color: #000000; font-weight: bold;">extends</span> CI_Email <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</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;">public</span> <span style="color: #000000; font-weight: bold;">function</span> minha_funcao<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #009900;">&#91;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Feitos os devidos acréscimos de funcionalidades, a chamada para a biblioteca e o uso das funções não se altera em nada:</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('p136code34'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13634"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p136code34"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// SEM o prefixo &quot;MY_&quot;</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">minha_funcao</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Simples, rápido, objetivo, enfim, nenhum mistério no mundo PHP OO!</p>
<h2>Conclusão</h2>
<p>Como vimos, <strong>criar bibliotecas no CodeIgniter</strong> é bastante simples. Seguindo algumas pequenas convenções de localização e nomenclatura, é possível criar funcionalidades espetaculares e/ou estender as (também espetaculares) funcionalidades do CI. Afinal, é para isso que serve um <a href="http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/">framework</a>! Sua produtividade agradece!</p>
<p>Ah, e espero que você tenha notado o quão fácil é integrar classes feitas em PHP puro ao CodeIgniter, simplesmente as &#8220;transformando&#8221; em bibliotecas do framework! ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/como-criar-biblioteca-library-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estendendo o CodeIgniter: como adicionar novas funcionalidades ao framework</title>
		<link>http://codeigniterbrasil.com/dicas/estendendo-o-codeigniter-como-adicionar-novas-funcionalidades-ao-framework/</link>
		<comments>http://codeigniterbrasil.com/dicas/estendendo-o-codeigniter-como-adicionar-novas-funcionalidades-ao-framework/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 17:18:22 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=118</guid>
		<description><![CDATA[Lembrando das lições básicas sobre controllers no CodeIgniter, vimos que, quando criamos um novo controller para um projeto, devemos estender o &#8220;CI_Controller&#8221;. Isso nada mais é do que PHP OO básico: uma classe estendendo outra para adquirir as propriedades e métodos permitidos. Seguindo a OO, o CodeIgniter permite, de forma bastante simples, estender suas principais [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2011/08/como-estender-codeigniter.jpg" alt="" title="Estendendo o CodeIgniter: imagem ilustrativa" width="500" height="200" class="aligncenter ilustra-artigo size-full wp-image-119" /></p>
<p>Lembrando das lições básicas sobre <a href="http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/">controllers no CodeIgniter</a>, vimos que, quando criamos um novo controller para um projeto, devemos estender o &#8220;CI_Controller&#8221;. Isso nada mais é do que <a href="http://www.php.net/manual/pt_BR/language.oop5.php">PHP OO</a> básico: uma classe estendendo outra para adquirir as propriedades e métodos permitidos.</p>
<p>Seguindo a OO, o <strong>CodeIgniter</strong> permite, de forma bastante simples, estender suas principais classes, adicionando ou substituindo funcionalidades a suas classes de sistema ou, como mais comumente conhecidas, <strong>core classes</strong>.</p>
<p>Toda vez que o CodeIgniter roda, essas core classes são iniciadas automaticamente (por serem essenciais ao funcionamento do <em>framework</em>) e, ao estender ou modificar alguma funcionalidade delas, a modificação é iniciada também <strong>automaticamente</strong>, conferindo um nível de adaptação e flexibilidades incríveis a qualquer projeto! Estas são as core classes que são chamadas toda vez que o CI roda (localizadas em <strong>/system/core</strong>):<br />
<strong></p>
<ul>
<li>Benchmark</li>
<li>Config</li>
<li>Controller</li>
<li>Exceptions</li>
<li>Hooks</li>
<li>Input</li>
<li>Language</li>
<li>Loader</li>
<li>Log</li>
<li>Output</li>
<li>Router</li>
<li>URI</li>
<li>Utf8</li>
</ul>
<p></strong><br />
O &#8220;segredo&#8221; para estender/modificar estas classes está no diretório <strong>/application/core</strong> (<a href="http://codeigniterbrasil.com/passos-iniciais/estrutura-de-diretorios-organizacao-de-pastas-do-codeigniter-2/">veja o artigo sobre a estrutura de diretórios no CodeIgniter</a>).</p>
<h2>Estender as core classes do CodeIgniter</h2>
<p>Em tempo oportuno serão mostradas, aqui no <a href="http://codeigniterbrasil.com">CodeIgniter Brasil</a>, as funcionalidades de todas as <a href="http://codeigniterbrasil.com/passos-iniciais/classes-do-codeigniter/">classes do CodeIgniter</a>. Por enquanto, basta saber que, mesmo suas funcionalidades padrão já serem poderosíssimas, é possível estendê-las, conferindo mais poder e flexibilidade no momento de desenvolver projetos.</p>
<p>Então, por exemplo, caso queira estender a classe de Input do CI (/system/core/Input.php), basta criar o arquivo <strong>/application/core/MY_Input.php</strong> e partir do seguinte ponto:</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('p118code37'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p11837"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p118code37"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> MY_Input <span style="color: #000000; font-weight: bold;">extends</span> CI_Input <span style="color: #009900;">&#123;</span>
&nbsp;
    <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: #666666; font-style: italic;">// Seu código aqui</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>A partir deste trecho de código, podemos deduzir 2 importantes informações:</p>
<ul>
<li><strong>Prefixo para o nome da classe.</strong> Ao estender uma core classe do CodeIgniter, é preciso que o nome da classe seja &#8220;prefixo&#8221; + &#8220;nome&#8221;, como no exemplo &#8220;MY_Input&#8221;.</li>
<li><strong>Declaração &#8220;extends&#8221;.</strong> Sua classe deve, necessariamente, estender a classe-pai que se deseja manipular propriedades/métodos. No exemplo, a classe MY_Input estendeu a classe CI_Input (localizada em /system/core/Input.php).</li>
</ul>
<p>Para quem já está familiarizado com PHP OO (o que, aliás, é um <a href="http://codeigniterbrasil.com/pre-requisitos/">pré-requisito</a> para se trabalhar com CI), a única novidade ficou por conta do prefixo necessário ao nome da classe. Como é de se esperar, caso você use um nome de método igual a algum já existem na core classe, toda a classe será substituída por suas novas instruções, portanto, atenção a isso!</p>
<p>Aliás, este prefixo pode ser outro, conforme sua vontade. Basta abrir o arquivo <strong>/application/config/config.php</strong> e alterar a diretiva &#8220;subclass_prefix&#8221; &#8211; por razões óbvias, não é possível alterar para &#8220;CI_&#8221;&#8230;</p>
<h2>Substituir as core classes do CodeIgniter</h2>
<div class="alert">Só substitua uma classe inteira do CodeIgniter se você <strong>realmente souber</strong> o que está fazendo!</div>
<p>Para substituir as core classes do CodeIgniter, basta criar um arquivo com o mesmo nome da &#8220;classe alvo&#8221;. Por exemplo, para substituir a classe de Input, basta criar o arquivo <strong>/application/core/Input.php</strong> com o seguinte código-base:</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('p118code38'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p11838"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p118code38"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> CI_Input <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// seu código aqui</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>O prefixo &#8220;CI_&#8221; é necessário para que o framework entenda do que se trata. Então, para substituir as <em>core classes</em>, basta seguir este modelo acima, sempre lembrando de usar o prefixo indicado.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/dicas/estendendo-o-codeigniter-como-adicionar-novas-funcionalidades-ao-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MY_Controller : estendendo o CI_Controller</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/my_controller-estendendo-o-ci_controller/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/my_controller-estendendo-o-ci_controller/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 16:13:57 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=120</guid>
		<description><![CDATA[Como já vimos no artigo sobre Controllers no CodeIgniter, todo controller que criamos deve estender o controller &#8220;original&#8221; CI_Controller: ?View Code PHPclass Usuario extends CI_Controller &#123; // código &#125; Isso é simplesmente PHP Orientado a Objetos no qual, no exemplo, a classe &#8220;Usuario&#8221; estende a classe &#8220;CI_Controller&#8221; para herdar os métodos e propriedades herdáveis (públicos [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2011/09/codeigniter-my_controller-ci_controller.jpg" alt="MY_Controller : estendendo o CI_Controller" title="" width="500" height="200" class="aligncenter size-full wp-image-128 ilustra-artigo" /></p>
<p>Como já vimos no artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/">Controllers no CodeIgniter</a>, todo controller que criamos deve estender o controller &#8220;original&#8221; <strong>CI_Controller</strong>:</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('p120code46'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12046"><td class="code" id="p120code46"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Usuario <span style="color: #000000; font-weight: bold;">extends</span> CI_Controller <span style="color: #009900;">&#123;</span>
     <span style="color: #666666; font-style: italic;">// código</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Isso é simplesmente <a href="http://www.php.net/manual/pt_BR/oop5.intro.php">PHP Orientado a Objetos</a> no qual, no exemplo, a classe &#8220;Usuario&#8221; estende a classe &#8220;CI_Controller&#8221; para herdar os métodos e propriedades herdáveis (públicos e protegidos).</p>
<p>Como estamos falando do bom e &#8220;velho&#8221; PHP OO, pensem comigo: seria possível, também, estender o próprio CI_Controller, já que se trata, tão somente, de uma classe em PHP? A boa notícia é que, sim, é possível <strong>estender o CI_Controller</strong> e adicionar novas funcionalidades ao &#8220;controller-mor&#8221; do CodeIgniter!</p>
<h2>MY_Controller</h2>
<p>Podemos encontrar no arquivo principal de configuração do CodeIgniter, em <strong>/application/config/config.php</strong> a diretiva de qual é o prefixo a ser usado para estender classes nativas. Por padrão, é &#8220;MY_&#8221; (mas pode ser alterado):</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('p120code47'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12047"><td class="code" id="p120code47"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'subclass_prefix'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'MY_'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Ou seja, quando queremos estender <a href="http://codeigniterbrasil.com/passos-iniciais/carregando-bibliotecas-libraries-no-codeigniter/">libraries</a> nativas (e alguns outros recursos, também), usamos o prefixo especificado nesta diretiva.</p>
<p>Então para estender o CI_Controller, é preciso criar o arquivo <strong>/application/core/MY_Controller.php</strong> e usar o modelo:</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('p120code48'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12048"><td class="code" id="p120code48"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> MY_Controller <span style="color: #000000; font-weight: bold;">extends</span> CI_Controller <span style="color: #009900;">&#123;</span>
     <span style="color: #666666; font-style: italic;">// código</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Se não, vejamos: já que estendemos o CI_Controller para usar métodos e propriedades gerais, não faz mais sentido os controllers &#8220;comuns&#8221; estenderem o CI_Controller, já que ele continua o mesmo da instalação original. Portanto, a partir do momento em que se quer estender as funcionalidades do CI usando esta técnica, todos os controller devem, a partir de agora, estender o MY_Controller!</p>
<p>Nosso exemplo mudaria para:</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('p120code49'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12049"><td class="code" id="p120code49"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Usuario <span style="color: #000000; font-weight: bold;">extends</span> MY_Controller <span style="color: #009900;">&#123;</span>
     <span style="color: #666666; font-style: italic;">// código</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Ficando com a seguinte hierarquia:</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('p120code50'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12050"><td class="code" id="p120code50"><pre class="php" style="font-family:monospace;">CI_Controller <span style="color: #339933;">&gt;</span> MY_Controller <span style="color: #339933;">&gt;</span> Usuario <span style="color: #009900;">&#40;</span>e demais controllers<span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<h2>Benefícios de uso do MY_Controller</h2>
<p>Ao usar o <strong>MY_Controller</strong> temos tantos benefícios quantos podem ser necessários/requeridos em um projeto. Obviamente esta técnica não é para ser usada sem critérios, mas alguns pontos são indicativos de quando devemos nos valer do MY_Controller:</p>
<ul>
<li>Se determinados métodos e/ou propriedades devem (ou tem a chance de ser) usados em muitos controllers</li>
<li>Criação de métodos específicos que ajudarão e poderão ser usados em muitos controllers</li>
<li>Variáveis (propriedades) usadas em todos ou muitos controllers</li>
</ul>
<p>Porque, agora, os controllers do projeto que estendem o MY_Controller tem acesso a todas as funções e variáveis de CI_Controller e MY_Controller (conforme pode ser visto na representação da hierarquia acima). Vamos a um exemplo de uma função útil que pode constar no MY_Controller:</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('p120code51'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12051"><td class="code" id="p120code51"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> MY_Controller <span style="color: #000000; font-weight: bold;">extends</span> CI_Controller <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> is_ajax<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_X_REQUESTED_WITH'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_X_REQUESTED_WITH'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'XMLHttpRequest'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Nisso, todos os controllers que estenderem o MY_Controller contarão com o método is_ajax(), que testa se a requisição à classe está sendo feita via AJAX ou não. Poderíamos ter, por exemplo, algo 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('p120code52'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12052"><td class="code" id="p120code52"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Usuario <span style="color: #000000; font-weight: bold;">extends</span> MY_Controller <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> get_by_name<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">is_ajax</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// Se for AJAX...</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">else</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// Se não for AJAX...</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h2>Conclusão</h2>
<p>Como pudemos ver, há casos em que todos ou a maioria dos controllers precisam acessar ou serem capazes de realizar determinados métodos e/ou ter determinadas propriedades em comum.</p>
<p>Caso seja esse seu caso, é possível facilitar a produção e a manutenção de códigos usando o <strong>MY_Controller</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/my_controller-estendendo-o-ci_controller/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>CodeIgniter Template Parser Class</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/codeigniter-template-parser-class/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/codeigniter-template-parser-class/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 17:38:02 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[documentação]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=123</guid>
		<description><![CDATA[Vimos no artigo &#8220;Models, Views e Controllers trabalhando juntos no CodeIgniter&#8221; como é feita a &#8220;passagem&#8221; de dados numa aplicação em CodeIgniter e como se faz para exibir informações nas views. Bem, esse é o método &#8220;tradicional&#8221; de se trabalhar nas views, mas não o único! Já existe no CodeIgniter, nativamente, uma maneira de deixar [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2011/08/codeigniter-template-parser-engine.jpg" alt="CodeIgniter Template Parser Engine Class: imagem ilustrativa" title="" width="500" height="200" class="ilustra-artigo aligncenter size-full wp-image-125" /></p>
<p>Vimos no artigo &#8220;<a href="http://codeigniterbrasil.com/passos-iniciais/models-views-controllers-trabalhando-juntos-codeigniter/">Models, Views e Controllers trabalhando juntos no CodeIgniter</a>&#8221; como é feita a &#8220;passagem&#8221; de dados numa aplicação em <strong>CodeIgniter</strong> e como se faz para exibir informações nas <a href="http://codeigniterbrasil.com/passos-iniciais/views-no-codeigniter/">views</a>.</p>
<p>Bem, esse é o método &#8220;tradicional&#8221; de se trabalhar nas views, mas não o único! Já existe no CodeIgniter, nativamente, uma maneira de deixar os views mais enxutos e facilmente inteligíveis; uma maneira de exibir dados mais fácil e rapidamente; e essa maneira é usar a <strong>Template Parser Class do CodeIgniter</strong>!</p>
<h2>O que é a Template Parser Class</h2>
<p>A <a href="http://codeigniter.com/user_guide/libraries/parser.html">Template Parser Class</a> é uma classe nativa do CodeIgniter que permite usar o sistema de &#8220;<strong>parser</strong>&#8221; em pseudo-variáveis nas views. Se você ainda não trabalhou com <em>template engines</em>, então veja a nítida diferença entre exibir dados 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('p123code59'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12359"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p123code59"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>h1<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$title</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>h1<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$posts</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$p</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    <span style="color: #339933;">&lt;</span>h1<span style="color: #339933;">&gt;&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;/blog/&lt;?php echo <span style="color: #006699; font-weight: bold;">$p-&gt;slug</span> ?&gt;&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$p</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;&lt;/</span>h1<span style="color: #339933;">&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$p</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">content</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>E 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('p123code60'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12360"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p123code60"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>h1<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$title</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">&lt;/</span>h1<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #009900;">&#123;</span>posts<span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">&lt;</span>h1<span style="color: #339933;">&gt;&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;/blog/{slug}&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #009900;">&#123;</span>title<span style="color: #009900;">&#125;</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;&lt;/</span>h1<span style="color: #339933;">&gt;</span>
    <span style="color: #009900;">&#123;</span>content<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>posts<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>E aí, qual você prefere?  ;-)</p>
<h2>Como usar a Template Parser Class do CodeIgniter</h2>
<p>Se você gostou dessa maneira &#8220;diferente&#8221; de apresentar seus dados nas views, saiba que é muito simples começar a usar a Template Parser Class!</p>
<p>Primeira, você deve <a href="http://codeigniterbrasil.com/passos-iniciais/carregando-bibliotecas-libraries-no-codeigniter/">carregar a biblioteca</a> (ou configurar para auto carregar, como conta no artigo) de parser:</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('p123code61'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12361"><td class="code" id="p123code61"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'parser'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h4>No controller</h4>
<p>Tomemos um controller fictício para exemplificar o uso do parser. Primeiro carregamos a library (caso não esteja auto carregada), pegar os dados do <a href="http://codeigniterbrasil.com/passos-iniciais/models-no-codeigniter/">model</a>, normalmente, mas, ao invés de darmos um load em alguma view usando $this->load->view(), chamamos o &#8220;método-base&#8221; da Template Parser Class:</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('p123code62'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12362"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code" id="p123code62"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Carrega Template Parser Class</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'parser'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Carrega um model de Blog qualquer</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">model</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Blog_model'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Pega algumas informações do BD	</span>
<span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Blog de Testes do CodeIgniter'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'posts'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Blog_model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_posts</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Chama a view &quot;parseada&quot;</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">parser</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">parse</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'blog_index'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Perceba o seguinte neste método:</p>
<ul>
<li><strong>Primeiro parâmetro.</strong> É o nome da view que se deseja &#8220;parsear&#8221; (&#8220;blog_index&#8221;).</li>
<li><strong>Segundo parâmetro.</strong> Dados enviados para o &#8220;parseamento&#8221; ($data).</li>
</ul>
<p>Dessa maneira, como foi visto no início do artigo, é possível usar a seguinte sintaxe para exibição de dados nas views:</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('p123code63'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12363"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p123code63"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>h1<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$title</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">&lt;/</span>h1<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #009900;">&#123;</span>posts<span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">&lt;</span>h1<span style="color: #339933;">&gt;&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;/blog/{slug}&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #009900;">&#123;</span>title<span style="color: #009900;">&#125;</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;&lt;/</span>h1<span style="color: #339933;">&gt;</span>
    <span style="color: #009900;">&#123;</span>content<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>posts<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Veja que, para as variáveis simples, não é preciso echo(), print() ou qualquer função de exibição que seja. Basta envolver o nome da pseudo-variável entre colchetes que funciona! Para <em>sets</em> de resultados vindos do BD ou algum array multidimensional de dados, nos quais, para cada iterador, há valores diferentes a serem exibidos, basta &#8220;abrir&#8221; e &#8220;fechar&#8221; o par de pseudo-variáveis, tal como consta no exemplo.</p>
<p>Há um terceiro parâmetro, booleano, opcional, que pode ser usado para, ao invés de já enviar as pseudo-variáveis para serem exibidas, retorna o valor do &#8220;parseamento&#8221; para ser usado de alguma outra forma na view:</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('p123code64'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12364"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p123code64"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">parser</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">parse</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'blog_index'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>E existe, também, um método para parsear strings ao invés de views. Caso queira saber mais a respeito, veja o método <em>$this->parser->parse_string()</em> na <a href="http://codeigniter.com/user_guide/libraries/parser.html">documentação oficial</a>.</p>
<h2>Conclusão sobre o template engine do CodeIgniter</h2>
<p>Como foi visto, usar o <strong>template engine do CodeIgniter</strong> para fazer o parser de pseudo-variáveis nas views é bastante simples e intuitivo. Além de reduzir o tamanho do código e poupar tempo de escrita, o código fica tão fácil de entender que até os designers conseguirão realizar pequenas manutenções em views!  ;-)</p>
<p>É uma template engine básica, sem maiores recursos de outras mais poderosas que podemos encontrar por aí, mas, até para CI existem recursos de terceiros que aprimoram isso. Provavelmente estes serão mostrados em artigos futuros, <a href="http://codeigniterbrasil.com/feed">não percam</a>!</p>
<p>É verdade que há um consumo de recursos ligeiramente mais elevado do que se não estivéssemos usando um echo(), mas isso não é considerável para projetos pequenos e médios, então a <strong>Template Parser Class</strong> pode ser usada sem preocupações!</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/codeigniter-template-parser-class/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Carregando bibliotecas (libraries) no CodeIgniter</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/carregando-bibliotecas-libraries-no-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/carregando-bibliotecas-libraries-no-codeigniter/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 11:08:04 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[libraries]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=121</guid>
		<description><![CDATA[No artigo apresentando as classes do CodeIgniter demos uma passada geral em algumas das funcionalidades do framework. Como pôde ser visto, o CodeIgniter já vem com uma série de classes, funcões e funcionalidades para facilitar, e muito, a vida do programador! Mas, para usarmos e nos valermos deste poder, é preciso, antes, que saibamos como [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2011/08/carregar-biblioteca-codeigniter.jpg" alt="Como carregar bibliotecas no CodeIgniter: imagem ilustrativa" title="" width="500" height="200" class="aligncenter size-full wp-image-138 ilustra-artigo" /></p>
<p>No artigo apresentando as classes do <a href="http://codeigniterbrasil.com/passos-iniciais/classes-do-codeigniter/">CodeIgniter</a> demos uma passada geral em algumas das funcionalidades do <em>framework</em>. Como pôde ser visto, o <strong>CodeIgniter</strong> já vem com uma série de classes, funcões e funcionalidades para facilitar, e muito, a vida do programador!</p>
<p>Mas, para usarmos e nos valermos deste poder, é preciso, antes, que saibamos como &#8220;chamar&#8221; este poder. E este artigo mostrará justamente isso: <strong>como carregar e usar bibliotecas do CodeIgniter</strong>!</p>
<h2>Loader</h2>
<p>Existe, no <em>core</em> do CodeIgniter, uma classe que é iniciada sempre e automaticamente, responsável por prover o loader dos recursos do CI: é a <strong>Loader</strong> (&#8220;carregador&#8221;). Através desta classe é possível carregar recursos do CI, tais como <a href="http://codeigniterbrasil.com/passos-iniciais/views-no-codeigniter/">views</a>, <a href="http://codeigniterbrasil.com/passos-iniciais/diferenca-entre-library-helper-plugin-codeigniter/">helpers e libraries</a>, <a href="http://codeigniterbrasil.com/passos-iniciais/models-no-codeigniter/">models</a> e outros.</p>
<p>Basicamente, a loader possui uma sintaxe bastante comum entre os diferentes recursos que podem ser chamadas, diferindo, somente, em algum parâmetros. Veremos, a seguir, como carregar um dos recursos mais comuns do CodeIgniter> libraries.</p>
<h2>Como carregar uma library no CodeIgniter</h2>
<p>Para se carregar uma library (ou, se preferir, &#8220;biblioteca&#8221;) no CodeIgniter, use 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('p121code72'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12172"><td class="code" id="p121code72"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'classe'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'alias'</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Ou seja: o primeiro parâmetro é o nome do recurso que se deseja carregar; o segundo, as configurações desta classe e; o terceiro, seu <em>alias</em> (apelido).</p>
<h4>Nome da library</h4>
<p>Por exemplo, para carregar as funcionalidades de e-mail do CodeIgniter, usa-se o seguinte (em qualquer controller):</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('p121code73'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12173"><td class="code" id="p121code73"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Pronto, as funcionalidades de e-mail já estão prontas para serem usadas! Uma vez carregada a classe, você precisará acessar os métodos desta e, para isso, usa-se o modelo:</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('p121code74'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12174"><td class="code" id="p121code74"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">funcao</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Por exemplo, a classe library possui a função to() que serve para especificar para quem o e-mail será enviado. Depois de carregada a classe, usa-se</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('p121code75'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12175"><td class="code" id="p121code75"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">to</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'fulano.de.tal@exemplo.com.br'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Não se preocupe com funções específicas no momento. Futuramente, explicaremos o uso de todas as funcionalidades do CI aqui no <a href="http://codeigniterbrasil.com/">CodeIgniter Brasil</a>.  ;-)</p>
<h4>Configurações</h4>
<p>O segundo parâmetro (opcional), como vimos, é a configuração que se quer quando o recurso for inicializado. 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('p121code76'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12176"><td class="code" id="p121code76"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$config</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a> <span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'mailtype'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'html'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'charset'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'utf-8,
    '</span>priority<span style="color: #0000ff;">' =&gt; '</span><span style="color: #cc66cc;">1</span><span style="color: #0000ff;">'
);
&nbsp;
$this-&gt;load-&gt;library('</span>email<span style="color: #0000ff;">', $config);</span></pre></td></tr></table></div>

<p>Ou seja, através de um array de configurações, passamos as opções que sejam da necessidade naquele momento de iniciar o recurso (novamente, não se preocupe, pois a classe de e-mail será vista em momento futuro).</p>
<h4>Apelido</h4>
<p>O terceiro parâmetro (opcional) é o apelido que podemos atribuir àquela classe para seu uso durante a programação. Por exemplo, é possível fazer 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('p121code77'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12177"><td class="code" id="p121code77"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">library</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'email'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'em'</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;">em</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">to</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'fulano.de.tal@exemplo.com.br'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Obviamente este apelido de exemplo não tem nenhuma utilidade prática e serviu somente para exemplificar o uso do recurso. Em projetos &#8220;de verdade&#8221;, provavelmente não será preciso atribuir apelidos aos recursos básicos do CI.</p>
<h2>Auto carregar libraries no CodeIgniter</h2>
<p>É bastante comum um projeto usar diversos recursos nativos do CodeIgniter. Se esse for o caso, imagine a inconveniência de carregar a biblioteca em cada controller&#8230; Felizmente, existe a possibilidade de autoload de libraries (de demais recursos) do CodeIgniter.</p>
<p>Basta acessar o arquivo <strong>application/config/autoload.php</strong> e procurar o array de recursos que se quer. No caso das libraries, que estamos tratando, basta encontrar a diretiva &#8220;libraries&#8221; (na versão atual, linha 55) e preencher o array com os nomes das bibliotecas que se queira. 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('p121code78'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12178"><td class="code" id="p121code78"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$autoload</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'libraries'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'database'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'session'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Com isso, estas bibliotecas serão automaticamente carregadas em cada chamada ao CI, dispensando e economizando o uso de um loader específico para cada recurso.</p>
<h2>Palavras finais</h2>
<p>Como pôde ser visto, carregar e usar recursos de uma <strong>library no CodeIgniter</strong> é bastante simples e, depois de certo tempo usando o <em>framework</em>, bastante intuitivo.</p>
<p>A atenção fica para 2 pontos: ao usar apelidos, não cometer o erro juvenil de dar nomes iguais para recursos diferentes e; analisar bem o recurso de autoload explicado, já que carregar recursos do CI para controllers que não farão uso deste é desperdiçar recursos e comprometer a performance do projeto.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/carregando-bibliotecas-libraries-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Estrutura de diretórios: organização de pastas do CodeIgniter 2</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/estrutura-de-diretorios-organizacao-de-pastas-do-codeigniter-2/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/estrutura-de-diretorios-organizacao-de-pastas-do-codeigniter-2/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 12:59:08 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[diretórios]]></category>
		<category><![CDATA[helpers]]></category>
		<category><![CDATA[libraries]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=106</guid>
		<description><![CDATA[Não dá pra trabalhar com o CodeIgniter sem conhecer sua estrutura de diretórios. É conhecendo como é a organização das pastas no CodeIgniter e sabendo sua função dentro do &#8220;todo&#8221; do framework que é possível mexer no CI com eficiência e consciência &#8211; também é importantíssimo conhecer o Fluxograma de Dados do CodeIgniter (se ainda [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_56" class="wp-caption aligncenter" style="width: 277px"><img class="size-full wp-image-56" title="Estrutura de diretórios do CodeIgniter 2" src="http://codeigniterbrasil.com/wp-content/uploads/2011/03/estrutura-de-diretorios-codeigniter-2.gif" alt="Estrutura de diretórios do CodeIgniter 2" width="267" height="372" /><p class="wp-caption-text">Estrutura de diretórios do CodeIgniter 2</p></div>
<p>Não dá pra trabalhar com o <strong>CodeIgniter</strong> sem conhecer sua <strong>estrutura de diretórios</strong>. É conhecendo como é a <strong>organização das pastas</strong> no CodeIgniter e sabendo sua função dentro do &#8220;todo&#8221; do <em>framework</em> que é possível mexer no CI com <strong>eficiência</strong> e <strong>consciência</strong> &#8211; também é importantíssimo conhecer o <a title="Fluxograma de Dados do CodeIgniter: como tudo funciona" href="http://codeigniterbrasil.com/passos-iniciais/fluxograma-de-dados-do-codeigniter-como-tudo-funciona/">Fluxograma de Dados do CodeIgniter</a> (se ainda não leu o artigo, leia antes de continuar).</p>
<p>Com um pouco mais de experiência é possível alterar a <strong>estrutura de diretórios do CodeIgniter</strong>, mas, para fins didáticos, será mostrada no tutorial a estrutura padrão de pastas do <strong>CodeIgniter 2</strong>.</p>
<p>Não serão detalhadas as funções/possibilidades completas de cada pasta e seus respectivos arquivos; isso será feito, com o tempo, na medida em que novos artigos são publicados no <em>blog</em>. Portanto, não é preciso ficar frustrado caso encontre termos que ainda desconhece; <a title="Assinar feed do CodeIgniter Brasil." href="http://codeigniterbrasil.com/feed">assine o feed do CodeIgniter Brasil</a> para não perder as atualizações.  ;-)</p>
<h2>Visão geral da estrutura de pastas do CodeIgniter 2</h2>
<p>Como pode ser visto na imagem da estrutura de pastas acima, na raiz da estrutura do CodeIgniter existem 3 diretórios e 2 arquivos.</p>
<h4>Diretórios</h4>
<p>Os 3 diretórios existentes na raiz da estrutura do CodeIgniter são:</p>
<ul>
<li><strong>application.</strong> Pasta onde os arquivos do aplicativo desenvolvido ficam. Praticamente toda a codificação em CI fica nesta pasta, que abriga seus <a title="MVC (Model – View – Controller)" href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">models, views, controllers</a> e outros que ainda serão tratados no <em>blog</em>.</li>
<li><strong>system.</strong> Local destinado aos arquivos que fazem o CodeIgniter o que é; são os arquivos do <em>core</em>. Geralmente, não devem ser mexidos.</li>
<li><strong>user_guide.</strong> Contém o Guia do Usuário (<em>User Guide</em>) do CodeIgniter (cópia da documentação <em>online</em>).</li>
</ul>
<h4>Arquivos</h4>
<p>Juntamente com os diretórios supracitados, na raiz do esquema de diretórios do CodeIgniter existem 2 arquivos:</p>
<ul>
<li><strong>index.php.</strong> Primordial para o funcionamento do CI, contém informações para se alterar o nível de <a href="http://br.php.net/manual/pt_BR/errorfunc.configuration.php#ini.error-reporting">error reporting</a> que se vai trabalhar; opcionalmente, também é possível alterar os nomes padrão da pasta &#8220;system&#8221; e &#8220;application&#8221; (mais a respeito: <a title="Instalação e configuração inicial do CodeIgniter" href="http://codeigniterbrasil.com/passos-iniciais/instalacao-e-configuracao-inicial-do-codeigniter/">Instalação e configuração inicial do CodeIgniter</a>), dentre outras muitas configurações</li>
<li><strong>licente.txt.</strong> É o arquivo com a licença do CI que, como já foi tratado no artigo sobre <a title="CodeIgniter: Requisitos de Servidor e Licença de Uso" href="http://codeigniterbrasil.com/diversos/codeigniter-requisitos-de-servidor-e-licenca-de-uso/">requisitos de servidor e licença de uso</a>, deve constar em todo <em>software</em>/aplicativo feito em CodeIgniter.</li>
</ul>
<h2>application</h2>
<p>Sem dúvidas, a pasta<strong> application</strong> é a mais importante para o desenvolvimento dos aplicativos e é a que mais vai exigir sua atenção/codificação. Já que todo seu trabalho vai ser aqui, é importante conhecer bem a estrutura de subdiretórios da pasta &#8220;application&#8221;:</p>
<ul>
<li><strong>cache.</strong> Pasta usada quando se está usando <a href="http://codeigniter.com/user_guide/general/caching.html">caching no CodeIgniter</a>. É aqui que as páginas cacheadas ficam armazenadas e são servidas.</li>
<li><strong>config.</strong> Contém diversos (e importantes) arquivos relacionados a configurações de seu CI. São arquivos de configuração de <em>database</em>, variáveis sobre URL, quais <em>libraries</em> e <em>helpers</em> serão carregados automaticamente e muitas outras coisas.</li>
<li><strong>controllers.</strong> Armazena os <em>controllers</em> que você cria para o seu <em>software</em>.</li>
<li><strong>core.</strong> Pasta criada no CI 2 para conter algumas bibliotecas consideradas mais &#8220;core&#8221; que outras. Não é usada em todos os projetos.</li>
<li><strong>errors.</strong> Vem com os templates de páginas de erros do CodeIgniter (erros genéricos, 404, conexão ao banco de dados, etc). É conveniente que tudo isso seja alterado para que os erros do aplicativo fiquem personalizados e consonantes com a finalidade deste.</li>
<li><strong>helpers.</strong> Para armazenar todos os <em>helpers</em> que você venha a criar/aprimorar.</li>
<li><strong>hooks.</strong> Para colocar os <em>hooks</em> que você cria. Em artigos futuros será mostrado que <em>hooks</em> são a maneira mais rápida e segura de você extender o <em>core</em> do CodeIgniter (geralmente feito por usuários avançados).</li>
<li><strong>language.</strong> Para aplicativos multi-idioma, esta pasta é bem usada por armazenar as mensagens nas diferentes escritas.</li>
<li><strong>libraries.</strong> Aqui ficam as<em> libraries</em> personalizadas, com funcionalidades para o programa a ser criado. Perceba que há diferença entre as pastas <strong>system/libraries</strong> e <strong>system/application/libraries</strong>.</li>
<li><strong>logs.</strong> Quando se habilita o salvamento de logs em arquivo em <strong>/application/config/config.php</strong>, é nesta pasta que eles serão salvos. </li>
<li><strong>migrations.</strong> Quando se usa acesso externo ao CodeIgniter via linha de comando (CLI), a pasta &#8220;migrations&#8221; é usada para algumas operações.</li>
<li><strong>models.</strong> Armazena os <em>models</em> que você cria para seu aplicativo.</li>
<li><strong>third_party.</strong> É possível distribuir aplicativos inteiros do CodeIgniter de forma fácil, e, para tal, é possível criar estrutura personalizadas nesta pasta, onde constam todos helpers, liberaries, models, etc, destas aplicações.</li>
<li><strong>views.</strong> Armazena os <em>views</em> que você cria para seu programa.</li>
</ul>
<div class="alert">Todos os seus projetos terão imagens, folhas de estilo, javascript e outros arquivos necessários. Evidentemente será preciso pastas para organizar tudo isso. Existe uma técnica que preconiza que a melhor maneira para organizar isso é fazer pastas na raiz da instalação do CodeIgniter &#8211; ou seja, no mesmo nível hierárquico da pasta <strong>application</strong>. Mas, para se fazer isso, é preciso utilizar um <a href="http://en.wikipedia.org/wiki/Htaccess">.htaccess</a> com algumas poucas linhas para que o CodeIgniter reconheça as novas pastas:</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('p106code80'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p10680"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p106code80"><pre class="php" style="font-family:monospace;">RewriteEngine on
RewriteCond $<span style="color: #cc66cc;">1</span> <span style="color: #339933;">!</span>^<span style="color: #009900;">&#40;</span>index\<span style="color: #339933;">.</span>php<span style="color: #339933;">|</span>img<span style="color: #339933;">|</span>css<span style="color: #339933;">|</span>js<span style="color: #009900;">&#41;</span>
RewriteRule ^<span style="color: #009900;">&#40;</span><span style="color: #339933;">.*</span><span style="color: #009900;">&#41;</span>$ index<span style="color: #339933;">.</span>php<span style="color: #339933;">/</span>$<span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#91;</span>L<span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>Basicamente as instruções fazem com que o CI reconheça as pastas &#8220;img&#8221;, &#8220;css&#8221;, &#8220;js&#8221; e, de quebra, ainda retiram &#8220;index.php&#8221; do URL (algo que será explicado em um momento mais oportuno).</p></div>
<h2>O importante é a função de cada pasta</h2>
<p>Principalmente quando se está começando, é bastante comum ficar em dúvida sobre a função de cada diretório e ter receio de criar arquivos no lugar errado. Estudando a estrutura de pastas do CodeIgniter, certamente esse não será um problema que irá travar seu processo de desenvolvimento.</p>
<p>O CodeIgniter foi projetado para manter seguros seus arquivos de <em>core</em> e é por uma razão que existe uma pasta específica para você criar os arquivos de seu <em>software</em>. <strong>Você deve concentrar seus arquivos em &#8220;application&#8221;</strong>, criando arquivos nos diretórios adequados &#8211; conforme foi abordado neste artigo &#8211; e somente criar/alterar arquivos de &#8220;system&#8221; caso você saiba exatamente o que está fazendo (e tenha um bom motivo pra isso).</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/estrutura-de-diretorios-organizacao-de-pastas-do-codeigniter-2/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Classes do CodeIgniter</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/classes-do-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/classes-do-codeigniter/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 13:10:46 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[classes]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=98</guid>
		<description><![CDATA[Como já foi mostrado no artigo sobre o que é um framework e algumas características do framework CodeIgniter, existem, embutidos, vários e vários arquivos prontos com scripts que garantem um bom funcionamento ao CI. E fazem parte dessa estrutura as classes. Grande parte do poder do CodeIgniter se dá devido a suas classes e o [...]]]></description>
			<content:encoded><![CDATA[<p>Como já foi mostrado no artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/">o que é um framework</a> e <a href="http://codeigniterbrasil.com/passos-iniciais/codeigniter-framework-php-agil-robusto-e-de-alta-performance/">algumas características do framework CodeIgniter</a>, existem, embutidos, vários e vários arquivos prontos com scripts que garantem um bom funcionamento ao CI.</p>
<p>E fazem parte dessa estrutura as <strong>classes</strong>. Grande parte do <strong>poder do CodeIgniter</strong> se dá devido a suas classes e o que se pode fazer com elas. Veja que classes são essas e um resumo sobre o que cada uma pode fazer.</p>
<h2>Classes do CodeIgniter: apresentação e resumo</h2>
<ul>
<li><strong>Benchmarking Class</strong>. A classe de benchmarking permite &#8220;marcar&#8221; pontos no código, fazer comparações sobre tempos de execução diferentes e até saber quanto de memória está sendo gasta para rodar a aplicação.</li>
<li><strong>Calendar Class</strong>. Com esta classe é possível criar calendários dinâmicos. Criar o layout dos calendários e inserir dados dinâmicos é tarefa simples com esta classe.</li>
<li><strong>Cart Class</strong>. A classe de carrinho de compras tem todo o básico que envolve processo de e-commerce: adicionar itens ao carrinho, atualizar, deletar, mostrar o preço, etc.</li>
<li><strong>Config Class</strong>. Serve para mostrar as opções de configuração do CodeIgniter, tanto as <em>default</em> (/application/config/config.php), quanto as em arquivos personalizados.</li>
<li><strong>Email Class</strong>. Como sugere o próprio nome, esta é para envio de e-mails. Com extrema facilidade é possível adicionar endereços, CC, CCO, anexar arquivos e muito mais.</li>
<li><strong>Encryption Class</strong>. Se o problema é gerar strings encriptadas, então ele acabou. Com a classe de encriptação, as tarefas de encriptar, descriptar e correlacionados são bem mais simples.</li>
<li><strong>File Uploading Class</strong>. Com uma vasta gama de opções, fazer upload no CodeIgniter é a uma das coisas mais fáceis quando se usa a classe para upload de arquivos.</li>
<li><strong>Form Validation Class</strong>. Uma boa validação também deve ser feita no back-end; para tanto, o CI conta com muitas e diversificadas opções de validação para formulários.</li>
<li><strong>FTP Class</strong>. Classe para fazer as operações FTP tradicionais, como transferências, mover arquivos, renomear, apagar, etc.</li>
<li><strong>HTML Table Class</strong>. Classe que permite gerar tabelas dinâmicas a partir de resultados de arrays e/ou consultas a bancos de dados.</li>
<li><strong>Image Manipulation Class</strong>. Uma das mais incríveis classes do CI, permite fazer alterações em images como redimensionar, rotacionar, criar miniaturas, inserir marcas d&#8217;água, dentre outros.</li>
<li><strong>Input Class</strong>. Tem dupla finalidade: pré-processar dados de inputs (questões de segurança) e funções para manipulação/verificação de dados via input.</li>
<li><strong>Javascript Class</strong>. Classe que, usando funções javascript, provê algumas funcionalidades e efeitos básicos do <a href="http://jquery.com/">jQuery</a>, como hide/show, fadeIn/fadeOut, animation e outros.</li>
<li><strong>Loader Class</strong>. É a classe do CodeIgniter para carregar recursos diversos do framework, como libraries, views, helpers e models.</li>
<li><strong>Language Class</strong>. Classe que tem por objteivo prover suporte a <em>internationalization</em>.</li>
<li><strong>Output Class</strong>. Classe que, juntamente com recursos de <em>cache</em>, tem a finalidade de enviar a web page requerida completa.</li>
<li><strong>Pagination Class</strong>. Classe muitos fácil de se usar que permite fazer paginações em quaisquer conjuntos de resultados (muitas opções inclusas).</li>
<li><strong>Security Class</strong>. Como sugere o próprio nome, a Security Class provê funções para tratar da segurança da aplicação feita em CodeIgniter.</li>
<li><strong>Session Class</strong>. Classe para manipulação de sessões com o CodeIgniter (não são as sessões nativas do PHP).</li>
<li><strong>Trackback Class</strong>. Esta classe permite que se trabalhe com envio e recebimento de informações de <a href="http://en.wikipedia.org/wiki/Trackback">trackback</a>.</li>
<li><strong>Template Parser Class</strong>. Permite utilizar pseudo-variáveis nas <a href="http://codeigniterbrasil.com/passos-iniciais/views-no-codeigniter/">views</a>, de modo a simplificar a separação HTML/PHP.</li>
<li><strong>Typography Class</strong>. Esta classe provê funções para formatação de textos.</li>
<li><strong>Unit Testing Class</strong>. Classe para se mexer com <a href="http://en.wikipedia.org/wiki/Unit_testing">Unit Testing</a> (conta com funções simples, mas possui várias opções).</li>
<li><strong>URI Class</strong>. Essencial para se trabalhar com CI, esta classe serve para se trabalhar com informações contidas em URLs.</li>
<li><strong>User Agent Class</strong>. Permite saber informações sobre o &#8220;agente&#8221; que acessa a aplicação web (browser, dispositivo mobile, robô de busca). Possui diversas opções interessantes.</li>
<li><strong>XML-RPC Class</strong>. Como consta no nome, esta classe serve para tarefas envolvendo <a href="http://www.xmlrpc.com/">XML-RPC</a>.</li>
<li><strong>Zip Encoding Class</strong>. Permite tarefas com arquivos compactados (.zip), tais como criação, adição/deleção de arquivos e até disponibilizar arquivos para download (forçado ou não).</li>
</ul>
<h2>Classes do CodeIgniter: conclusão</h2>
<p>Como se pode ver, existem dezenas de classes no CodeIgniter para prover funções e funcionalidades prontas, que são de fácil manipulação e têm simplicidade de uso (pelo menos, a maioria delas).</p>
<p>Com o advento do <a href="http://codeigniterbrasil.com/noticias/codeigniter-2/">CodeIgniter 2</a>, algumas novas classes foram inseridas e, certamente, com as futuras versões, muitas outras ainda serão e as atuais serão modificadas, sempre no intuito de melhorar/facilitar ainda mais seu uso e interações.</p>
<p>É o <strong>CodeIgniter</strong>, mais uma vez, mostrando que é o <strong>melhor framework PHP</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/classes-do-codeigniter/feed/</wfw:commentRss>
		<slash:comments>16</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('p78code88'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7888"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p78code88"><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('p78code89'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7889"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p78code89"><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('p78code90'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7890"><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="p78code90"><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('p78code91'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7891"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p78code91"><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('p78code92'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7892"><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="p78code92"><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('p78code93'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7893"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p78code93"><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('p78code94'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7894"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p78code94"><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>27</slash:comments>
		</item>
		<item>
		<title>Configuração de banco de dados (database) no CodeIgniter</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/configuracao-de-banco-de-dados-database-no-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/configuracao-de-banco-de-dados-database-no-codeigniter/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 13:25:28 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[banco de dados]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=76</guid>
		<description><![CDATA[No artigo sobre instalação e configuração inicial do CodeIgniter, consta que um dos passos é configurar o arquivo próprio para especificar as informações de BD. Apesar de o arquivo ser todo comentado e estruturado de maneira simples, é possível elucidar ainda mais com um artigo explicando como é a configuração de banco de dados (database) [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2010/06/configuracao-codeigniter-banco-de-dados-database.jpg" alt="Configuração de banco de dados (database) no CodeIgniter" title="" width="400" height="200" class="aligncenter size-full wp-image-77 ilustra-artigo" /></p>
<p>No artigo sobre <a href="/passos-iniciais/instalacao-e-configuracao-inicial-do-codeigniter/">instalação e configuração inicial do CodeIgniter</a>, consta que um dos passos é configurar o arquivo próprio para especificar as informações de BD. Apesar de o arquivo ser todo comentado e estruturado de maneira simples, é possível elucidar ainda mais com um artigo explicando como é a <strong>configuração de banco de dados (database) no CodeIgniter</strong>.</p>
<h2>database.php</h2>
<p>As configurações de banco de dados no CodeIgniter é feita através do arquivo <strong>application/config/database.php</strong>. As configurações são armazenadas em um array multidimensional que segue o seguinte padrão:</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('p76code97'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7697"><td class="code" id="p76code97"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'hostname'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;localhost&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'username'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;root&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'database'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;database_name&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dbdriver'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;mysql&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dbprefix'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pconnect'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'db_debug'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cache_on'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cachedir'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'char_set'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;utf8&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dbcollat'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;utf8_general_ci&quot;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Existe um motivo principal para essas informações serem armazenadas em um array multidimensional: a facilidade do CodeIgniter chega a tal ponto que trabalhar com múltiplos bancos de dados é, literalmente, tão simples quanto montar um array, ou seja, se for preciso trabalhar com vários BDs (um para produção, outro para testes, mais um para homologação, etc), basta criar mais um array com as respectivas informações!</p>
<p>Se, por exemplo, além das configurações &#8220;default&#8221;, fosse preciso trabalhar com um banco de testes, algo do tipo poderia ser feito:</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('p76code98'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7698"><td class="code" id="p76code98"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'hostname'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;localhost&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'username'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;root&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;123456&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'database'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;database_name&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dbdriver'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;mysql&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dbprefix'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pconnect'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'db_debug'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cache_on'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cachedir'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'char_set'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;utf8&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teste'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dbcollat'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;utf8_general_ci&quot;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Então, a variável $active_group permite escolher os grupos de conexão que estarão ativos &#8211; por padrão, somente o &#8220;default&#8221; está ativo.</p>
<h4>Explicação dos valores</h4>
<p>Como é possível ver, existem diversos valores no array, cada um prestando a servir determinada funcionalidade nas configurações de bancos de dados:</p>
<ul>
<li><strong>hostname.</strong> O hostname para a conexão (costuma ser &#8220;localhost&#8221;).</li>
<li><strong>username.</strong> O nome de usuário usado para a conexão ao BD.</li>
<li><strong>password.</strong> A senha necessária para se conectar ao banco.</li>
<li><strong>database.</strong> O nome do banco de dados que se deseja conectar.</li>
<li><strong>dbdriver.</strong> O tipo de banco de dados (mysql, postgres, odbc, etc).</li>
<li><strong>dbprefix.</strong> Um parâmetro (opcional) que especifica prefixo para as tabelas. Especialmente útil quando se usa Active Records (que será explicado futuramente), permitindo múltiplas instalações do CI usarem um mesmo database.</li>
<li><strong>pconnect.</strong> TRUE ou FALSE, especifica se vai ser usado <a href="http://php.net/manual/en/features.persistent-connections.php">persistent connection</a> no projeto.</li>
<li><strong>db_debug.</strong> TRUE ou FALSE, serve para mostrar ou não os erros de queries que possam vir a ocorrer.</li>
<li><strong>cache_on.</strong> TRUE ou FALSE, marca se o database query caching (abordado em artigos futuros) será usado.</li>
<li><strong>cachedir.</strong> Quando se usa o database query caching, é o caminho para o diretório de cache.</li>
<li><strong>char_set.</strong> O character set usado para as comunicações com o banco.</li>
<li><strong>dbcollat.</strong> O collation usado para se comunicar com o BD.</li>
<li><strong>port.</strong> Opção usada somente com Postgres driver. Para usar a configuração, é necessário acrescentar mais uma linha ao array de configuração do database (ex. $db['default']['port'] = 5432;).
</ul>
<h2>Palavras finais sobre configuração de bancos de dados</h2>
<p>Dependendo da plataforma de banco de dados você está usando (MySQL, Postgres, etc), nem todos os valores do array de configuração serão necessários. Por exemplo, se estiver usando <a href="http://www.sqlite.org/">SQLite</a> você não precisará fornecer um nome de usuário ou senha, e o nome do banco de dados será o caminho para o arquivo de banco de dados. Por padrão (e os exemplos apresentados) foram conforme o que se usa para bancos MySQL.</p>
<p>Reforçando ainda mais o fato de que o <strong>CodeIgniter é o melhor framework PHP</strong>, configurar um ou mais bancos de dados é tão simples quanto escrever algumas breves linhas de códigos. Somando este conhecimento ao <a href="/passos-iniciais/models-no-codeigniter/">básico sobre models</a> e como fazer <a href="/passos-iniciais/models-views-controllers-trabalhando-juntos-codeigniter/">models, views e controllers trabalharem juntos no CodeIgniter</a>, já é possível esboçar os primeiros &#8220;projetos de verdade&#8221;!</p>
<p>Vamos lá?  ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/configuracao-de-banco-de-dados-database-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Models, Views e Controllers trabalhando juntos no CodeIgniter</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/models-views-controllers-trabalhando-juntos-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/models-views-controllers-trabalhando-juntos-codeigniter/#comments</comments>
		<pubDate>Mon, 24 May 2010 13:30:52 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=72</guid>
		<description><![CDATA[Já vimos no CodeIgniter Brasil artigos sobre Models, Views e Controllers, separadamente. Para projetos &#8220;da vida real&#8221;, no entanto, todos estes trabalham conjuntamente e é preciso &#8220;juntar as peças&#8221; para entender como se dá este funcionamento. Neste artigo, apesar de ainda não ser um projeto &#8220;oficial&#8221;, veremos como fazer Models, Views e Controllers trabalharem juntos [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2010/05/codeigniter-models-views-controllers-trabalhando-juntos.jpg" alt="Models, Views e Controllers trabalhando juntos no CodeIgniter" title="" width="400" height="200" class="aligncenter size-full wp-image-73 ilustra-artigo" /></p>
<p>Já vimos no <strong>CodeIgniter Brasil</strong> artigos sobre <a href="/passos-iniciais/models-no-codeigniter/">Models</a>, <a href="/passos-iniciais/views-no-codeigniter/">Views</a> e <a href="/passos-iniciais/controllers-no-codeigniter/">Controllers</a>, separadamente. Para projetos &#8220;da vida real&#8221;, no entanto, todos estes trabalham conjuntamente e é preciso &#8220;juntar as peças&#8221; para entender como se dá este funcionamento. Neste artigo, apesar de ainda não ser um projeto &#8220;oficial&#8221;, veremos como fazer <strong>Models, Views e Controllers trabalharem juntos no CodeIgniter!</strong></p>
<h2>O Model</h2>
<p>Vamos supor que existe um banco de dados de um sistema de blog feito em CI. Vamos supor, ainda que uma das funções desse model, &#8220;Blog_model&#8221;, serve para pegar &#8220;N&#8221; registros do BD para se exibir onde se queira. Seria algo como:</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('p72code102'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p72102"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p72code102"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> get_posts<span style="color: #009900;">&#40;</span><span style="color: #000088;">$n</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$query</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;">query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT title, content, slug FROM posts LIMIT '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$n</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">result</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Obviamente este seria somente um fragmento de códigos. Se estiver com dúvidas, vide o artigo sobre <a href="/passos-iniciais/models-no-codeigniter/">Models no CodeIgniter</a>.</p>
<h2>O Controller</h2>
<p>Nosso controller, &#8220;Blog&#8221;, dentre outras coisas, possui uma função para se valer do respectivo model:</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('p72code103'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p72103"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p72code103"><pre class="php" style="font-family:monospace;"><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: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">model</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Blog_model'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    	
    <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Blog de Testes do CodeIgniter'</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'posts'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Blog_model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_posts</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'blog_index'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Como vimos no artigo sobre <a href="/passos-iniciais/controllers-no-codeigniter/">Controllers no CodeIgniter</a>, é possível passar dados a views por um <strong>array ou objeto</strong> no segundo parâmetro da função de carregar o view.</p>
<h2>O View</h2>
<p>No view, tratamos os valores do array passado como se fossem variáveis &#8220;comuns&#8221;. No caso de $posts, já que um conjunto de dados virá do BD, realizar um foreach, conforme explicado no artigo sobre <a href="/passos-iniciais/views-no-codeigniter/">Views no CodeIgniter</a>.</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('p72code104'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p72104"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p72code104"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>h1<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$title</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>h1<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$posts</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$p</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    <span style="color: #339933;">&lt;</span>h1<span style="color: #339933;">&gt;&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;/blog/&lt;?php echo <span style="color: #006699; font-weight: bold;">$p-&gt;slug</span> ?&gt;&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$p</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;&lt;/</span>h1<span style="color: #339933;">&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$p</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">content</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<h2>Conclusão</h2>
<p>A conclusão é que é <strong>muito fácil</strong> trabalhar com CodeIgniter (e olha que nem começamos a apresentar as classes e libraries nativos)! Viram como separando o contato com o banco de dados (<em>model</em>), a lógica (<em>controller</em>) e a apresentação (<em>view</em>) é muito mais simples e organizado de se programar?</p>
<p>A separação que o MVC proporciona é incrível e confere uma também incrível facilidade de se manutenir, em separado cada uma das &#8220;partes&#8221; que constituem o site, software, sistema online ou o que quer que se faça usando CodeIgniter!</p>
<p>É por isso que não cansamos de repetir que o <strong>CodeIgniter é o melhor framework PHP</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/models-views-controllers-trabalhando-juntos-codeigniter/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Views no CodeIgniter</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/views-no-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/views-no-codeigniter/#comments</comments>
		<pubDate>Mon, 10 May 2010 12:45:21 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[diretórios]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=70</guid>
		<description><![CDATA[Relembrando nossa saga de explicações básicas, vimos como é o funcionamento do padrão MVC, os controllers (e como funciona o esquema de URLs no Codeigniter em função dos controllers) e models. Chegou, então, o momento de estudarmos um pouco sobre  views no CodeIgniter! Views no CodeIgniter Como foi mostrado no referido artigo sobre Model &#8211; View &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2010/05/views-codeigniter.jpg" alt="Views no CodeIgniter" title="" width="400" height="200" class="aligncenter size-full wp-image-71 ilustra-artigo" /></p>
<p>Relembrando nossa saga de explicações básicas, vimos como é o funcionamento do padrão <a href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">MVC</a>, os <a href="http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/">controllers</a> (e como funciona o esquema de <a href="http://codeigniterbrasil.com/passos-iniciais/urls-no-codeigniter/">URLs no Codeigniter</a> em função dos controllers) e <a href="http://codeigniterbrasil.com/passos-iniciais/models-no-codeigniter/">models</a>. Chegou, então, o momento de estudarmos um pouco sobre  <strong>views no CodeIgniter</strong>!</p>
<h2>Views no CodeIgniter</h2>
<p>Como foi mostrado no referido artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">Model &#8211; View &#8211; Controller</a>,</p>
<blockquote><p>View é a apresentação, é o que aparece, é o que é visualizado por quem usa o sistema. É no View que as informações, sejam elas quais forem e de de qual lugar tenha vindo, são exibida.</p></blockquote>
<p>No <a href="http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/">artigo sobre controllers</a>, foi dado o exemplo de uma função matemática que, conforme o URL passado, soma 2 números e exibe o resultado em tela através da função echo(). Mas o exemplo foi somente para ilustrar como é o funcionamento geral dos controllers. Na prática, tudo o que se vai mostrar a quem utiliza o site/software deve ser feito através de views!</p>
<p>Afinal de contas, o padrão MVC foi criado para, justamente, manter em &#8220;compartimentos separados&#8221; a lógica do aplicativo, o contato com os dados usados e a exibição de o que quer que seja a quem o utiliza. Portanto, views foram idealizados para exibirem todas as informações/processamento que ocorra entre models-controllers. Reforçando: <strong>tudo deve ser exibido através de views</strong>!</p>
<p>Para ficar claro, podemos dizer que as principais funções de um view, através de invocações de métodos e ventos, são:</p>
<ul>
<li>&#8220;Renderizar&#8221; (exibir) informações vindas dos models/controllers;</li>
<li>Requisitar atualizações aos models/controllers;</li>
<li>Enviar ações de usuários (através de inputs) a models/controllers;</li>
</ul>
<p>Cada vez mais é possível observar a eficiência e praticidade do padrão MVC e perceber que cada um preciso e trabalha em conjunto ao outro. Models, Views e Controllers, cada um tem uma razão de existir e desempenha um papel diferentes, todos em conjunto para viabilizar um desenvolvimento eficiente e organizado.</p>
<h2>Funcionamento de Views no CodeIgniter</h2>
<p>Seguindo a &#8220;linha&#8221; dos outros artigos, este tópico deveria ser &#8220;Estrutura de um View no CodeIgniter&#8221;, mas os views são formados simplesmente por XHTML e CSS. Views são a parte que é vista pelos visitantes/usuários, e, na web, isso é desenvolvido e apresentado usando as respectivas linguagem de marcação e folhas de estilo. Então, views podem ser uma página completa ou um fragmento de uma página, como um cabeçalho, um rodapé, uma barra lateral e assim por diante.</p>
<p>Vamos, então, passar a alguns pontos referentes ao funcionamento de views no CodeIgniter.</p>
<h4>Armazenamento de Views</h4>
<p>Os views devem ser armazenados em <strong>application/views</strong>. Simplesmente dê um nome a seu view e armazene neste diretório &#8211; muitos views são diretamente ligados a um controller; sendo este o caso, ou não, é importante dar nomes aos views que remetam facilmente a qual função ou conjunto de funções ele está refere. Por exemplo: application/views/about.php</p>
<p>Também é possível estruturar e refinar mais a organização de views. O CodeIgniter permite que se criem subníveis de diretórios dentro do diretório padrão de views. Então, por exemplo, é possível armazenar arquivos de views em uma estrutura do tipo: <strong>application/views/includes/head.php</strong> ou <strong>application/views/blog/widgets/advertising.php</strong>.</p>
<h4>Carregando um(a) view</h4>
<p>Para carregar um(a) view em um controller:</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('p70code112'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p70112"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p70code112"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'about'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// sem extensão, se for &quot;.php&quot;</span></pre></td></tr></table></div>

<p>Para o caso de organização em subdiretórios, basta especificar onde o view se encontra:</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('p70code113'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p70113"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p70code113"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'includes/head.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h4>Carregando múltiplos views</h4>
<p>Para carregar múltiplos views, basta chamar um por linha e o CI faz a &#8220;montagem&#8221; em uma só exibição:</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('p70code114'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p70114"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p70code114"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'includes/head'</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;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'body'</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;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'includes/footer'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h4>Passando informações para views</h4>
<p>É possível entender o poder do CodeIgniter e sua facilidade de uso ao se passar uma informação dinâmica para ser exibida em um view! Basta carregarmos essa informação em um array ou objeto e passar essa informação no momento de carregamento do view no controller. 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('p70code115'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p70115"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p70code115"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'title'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Sobre'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'content'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Texto da página sobre'</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'about'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<div class="alert">
Ao usar objetos, as variáveis de classe são transformadas em elementos de array.
</div>
<p>Nisso, as informações do array $data serão passadas ao view. Para exibir essas informações na view, simplesmente é preciso tratar como se cada um dos itens do array fosse uma variável à parte, da seguinte maneira:</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('p70code116'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p70116"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p70code116"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>h1<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$title</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>h1<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>p<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$content</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>p<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<h4>Fazendo loopings nos views</h4>
<p>Para fazer loopings em views, também é simples. Por exemplo, vamos supor que tenhamos carregado a seguinte informação em um controller:</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('p70code117'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p70117"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p70code117"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'todo_list'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Lavar os pratos'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Limpar a casa'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Ligar para a pizzaria'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Lista de afazeres&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'afazeres'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Então, no respectivo view, teríamos:</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('p70code118'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p70118"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p70code118"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>h1<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$title</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>h1<span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #339933;">&lt;</span>ul<span style="color: #339933;">&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$todo_list</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
        <span style="color: #339933;">&lt;</span>li<span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?</span>php <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$item</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>li<span style="color: #339933;">&gt;</span>
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
<span style="color: #339933;">&lt;/</span>ul<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Existe, ainda, uma maneira de passar o &#8220;data&#8221; para os views como string puro. Mas, como isso não é tão comum de ser feito, fica para um próximo artigo, mais específico.</p>
<h4>Conclusão sobre Views no CodeIgniter</h4>
<p>Obviamente isso não é tudo o que se tem para saber sobre views no CodeIgniter. Mas esse &#8220;básico&#8221; sobre views, juntamente com o conteúdo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/models-no-codeigniter/">models</a> e <a href="http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/">controllers</a>, já passa uma noção bem legal sobre o poder do CodeIgniter.</p>
<p>Para quem não conseguiu juntar as peças sobre MVC no CodeIgniter, não se preocupe: no próximo artigo vamos colocar models, views e controllers para trabalhar juntos e você vai ver um dos motivos de porque o CodeIgniter é o melhor framework PHP!  ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/views-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Models no CodeIgniter</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/models-no-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/models-no-codeigniter/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 15:36:06 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=67</guid>
		<description><![CDATA[Já vimos que Controllers no CodeIgniter são responsáveis por controlar o fluxo dos programas, que contêm as regras de negócio. Já no artigo sobre MVC, também vimos que Models no CodeIgniter são responsáveis pelas quais o CRUD acontece, ou seja, sempre que dados forem criados, selecionados, atualizados ou deletados, seja num banco de dados, arquivo [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2010/03/codeigniter-models.jpg" alt="Models no Codeigniter" title="" width="400" height="200" class="aligncenter size-full wp-image-68 ilustra-artigo" /></p>
<p>Já vimos que <a href="http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/">Controllers no CodeIgniter</a> são responsáveis por controlar o fluxo dos programas, que contêm as regras de negócio. Já no artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">MVC</a>, também vimos que <strong>Models no CodeIgniter</strong> são responsáveis pelas quais o <a href="http://pt.wikipedia.org/wiki/CRUD">CRUD</a> acontece, ou seja, sempre que dados forem criados, selecionados, atualizados ou deletados, seja num banco de dados, arquivo XML ou onde quer que estes dados estejam armazenados, então é com o <strong>Model</strong>que temos que trabalhar.</p>
<h2>Models do CodeIgniter</h2>
<p>É possível, sim, desenvolver sites com CodeIgniter trabalhando somente com <a href="http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/">Controllers</a> e Views; entretanto, este seria um uso &#8220;castrado&#8221; do <em>framework</em>, já que muito de seu poder reside na capacidade de abstração e tratamento de informações vindas de <strong>bancos de dados</strong>. Explicava a devida importância dos Models no CodeIgniter, vamos aprender um pouco mais a respeito.</p>
<p>Ao limitarmos nosso desenvolvimento a somente projetos &#8220;estáticos&#8221;, sem o poderoso recurso de armazenagem de dados, na verdade não conseguiremos desenvolver grandes feitos quando o assunto é <em>internet</em>. Realmente existem nichos de atuação para captação de recursos que dispensam uso de BDs, mas o foco de atuação deste <em>blog</em> não é este.</p>
<p>Então, regra geral, sempre que pensarmos em CodeIgniter, devemos pensar em <strong>uso de bancos de dados</strong> para armazenagem das informações, seja na feitura de um blog, site, e-commerce ou qualquer outro sistema <em>online</em>.</p>
<p>Foi visto no <a href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">artigo sobre MVC</a> que os Models possuem as seguintes características principais:</p>
<ul>
<li>Encapsula o estado da aplicação;</li>
<li>Realiza e responde a consultas no banco de dados.</li>
</ul>
<h2>Estrutura de um Model no CodeIgniter</h2>
<p>Models no CodeIgniter ficam armazenados em <strong>application/models</strong>, aceitando, também, estruturação em subdiretórios, caso seja preciso.</p>
<p>Assim como todo <a href="http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/"><em>framework</em></a>, o <strong>CodeIgniter</strong> possui suas regras de sintaxe, ou seja, a maneira pela qual os códigos devem ser escritos. A estrutura básica de um model no CodeIgniter (para fins didáticos, “Blog”) é a 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('p67code126'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p67126"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p67code126"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Blog <span style="color: #000000; font-weight: bold;">extends</span> CI_Model <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>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>E, a partir dessa estrutura-modelo, deduz-se as seguintes regras de sintaxe:</p>
<ul>
<li>Nomes de classes de models <strong>devem ter</strong> a primeira letra em maiúsculo;</li>
<li>Nomes de classes de models, com exceção da primeira letra, <strong>devem ser</strong> em minúsculo;</li>
<li>Os models devem extender a classe base &#8220;Model&#8221; através de uma função com mesmo nome da classe;</li>
<li>O arquivo da classe deve ter o mesmo nome da classe em minúsculo (ex., <em>application/models/blog.php</em>).</li>
</ul>
<h2>Carregando um Model</h2>
<div class="alert">Para prosseguir a leitura você precisa das informações contidas no artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/">Controllers no CodeIgniter</a>. Se ainda não leu, acesse o artigo, leia e depois volte.</div>
<p>Comumente, <em>models</em> são carregados a partir de funções nos <em>controllers</em> do <em>software</em>. Genericamente, um model é carregado através da seguinte função:</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('p67code127'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p67127"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p67code127"><pre class="php" style="font-family:monospace;"> <span style="color: #666666; font-style: italic;">// se o arquivo do model estiver em subdiretório,</span>
 <span style="color: #666666; font-style: italic;">// basta indicar o caminho no parâmetro</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">model</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Model'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Depois de carregado o model, suas funções são acessadas a partir da seguinte sintaxe:</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('p67code128'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p67128"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p67code128"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Opcionalmente, é possível especificar um &#8220;apelido&#8221; para um <strong>model</strong>, apelido este que, se especificado será usado para a chamada das funções:</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('p67code129'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p67129"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p67code129"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">model</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Model'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'apelido'</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;">apelido</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h2>Carregar models automaticamente (auto-loading Models)</h2>
<p>É bastante comum um model ser tão útil ao ponto de precisar ser usado em praticamente toda uma aplicação. Para esses e outros casos, o CodeIgniter permite que um ou mais models sejam carregados automaticamente, juntamente com a inicialização do sistema.</p>
<p>Para carregar models automaticamente, abra o arquivo <strong>application/config/autoload.php</strong>, procure a seção &#8220;Auto-load Models&#8221; e especifique no array qual(is) model(s) você deseja que sejam carregados automaticamente. 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('p67code130'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p67130"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p67code130"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$autoload</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'model'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'blog'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'forum'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'chat'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h2>Conectando ao Banco de Dados</h2>
<p>Quando um model é carregado, <strong>não há conexão automática ao banco de dados</strong>. Isso é algo que deve ficar bem claro, pois gera enorme dúvida e, se não observado, pode parecer que está acontecendo um erro na lógica do programa &#8211; consequentemente, tem o potencial de fazer você desperdiçar horas de esforço atrás de um erro inexistente&#8230;</p>
<p>Existem diversos métodos de conexão ao banco de dados; para o momento, saiba que, para se conectar ao banco de dados de sua aplicação, você deve passar um parâmetro à função de carregamento do model. 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('p67code131'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p67131"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p67code131"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">model</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Model'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// parâmetro vazio é o &quot;apelido&quot;</span></pre></td></tr></table></div>

<p>Esse terceiro parâmetro indica que a conexão ao banco de dados deve ser feita utilizando as informações de BD contidas no arquivo <strong>application/config/database.php</strong>. Isso é o mais comum e prático de ser feito. Entretanto, há casos ou pode ser de sua preferência, especificar, no próprio controller, quais as informações necessárias para a conexão.</p>
<p>Nesse caso, ao invés de &#8220;TRUE&#8221;, o último parâmetro conterá o array (com nome de sua preferência) com esses dados:</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('p67code132'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p67132"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p67code132"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Os parâmetros mais &quot;incomuns&quot; serão explicados em artigos futuros</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'hostname'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'localhost'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'username'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'username'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'password'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'database'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'database'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dbdriver'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'mysql'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dbprefix'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'pconnect'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'db_debug'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">model</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Model'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>No próximo artigo serão explicados os diversos meios de o CodeIgniter se conectar a um (ou mais de um) bancos de dados. <a href="http://codeigniterbrasil.com/feed">Não percam</a>!  ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/models-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Diferença entre helper, library e plugin no CodeIgniter</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/diferenca-entre-library-helper-plugin-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/diferenca-entre-library-helper-plugin-codeigniter/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 12:30:07 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[helpers]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=59</guid>
		<description><![CDATA[Já tivemos a oportunidade de ver a estrutura de diretórios do CodeIgniter, mas o objetivo foi apenas explicar a funcionalidade de cada pasta. Dando prosseguimento aos artigos introdutórios sobre CodeIgniter, vamos conhecer mais um pouco sobre alguns dos tipos de classes que podem ser usados no CI, quais sejam, helpers, libraries e plugins. Um pouco [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://codeigniterbrasil.com/wp-content/uploads/2010/02/helper-library-plugin-diferenca-codeigniter.jpg"><img class="aligncenter size-full wp-image-66 ilustra-artigo" src="http://codeigniterbrasil.com/wp-content/uploads/2010/02/helper-library-plugin-diferenca-codeigniter.jpg" alt="" width="400" height="208" /></a></p>
<p>Já tivemos a oportunidade de ver a <a href="http://codeigniterbrasil.com/passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/">estrutura de diretórios do CodeIgniter</a>, mas o objetivo foi apenas explicar a funcionalidade de cada pasta. Dando prosseguimento aos artigos introdutórios sobre CodeIgniter, vamos conhecer mais um pouco sobre alguns dos tipos de classes que podem ser usados no CI, quais sejam, <strong>helpers, </strong><strong></strong><strong>libraries</strong> e <strong>plugins</strong>.</p>
<h2>Um pouco de história</h2>
<p>Existem diversos subdiretórios na pasta <em>application</em> e, conforme pode ser visto no livro <a href="http://www.amazon.com/CodeIgniter-Rapid-PHP-Application-Development/dp/1847191746">CodeIgniter for Rapid PHP Application Development</a> (na data de publicação deste artigo, ainda sem tradução para a Língua Portuguesa), nas versões do CodeIgniter anteriores à 1.5, a estrutura de diretórios era diferente. <strong>Rick Ellis</strong>, o carecão-mor, resolveu fazer alguns incrementos no <em>framework</em>, mas, por motivos de retrocompatibilidade, teve que manter algumas coisas como estavam.</p>
<p>Então, tecnicamente falando, não há maiores diferenças entre se valer de um <strong>helper, library</strong> ou <strong>plugin </strong>para implementar determinada funcionalidade no CodeIgniter. O que há são diferenças conceituais que podem, à primeira vista, parecer inúteis, mas, seguindo sua parte conceitual e atentando-se às convenções que a maioria dos usuários de CI fazem, são importantes de serem respeitadas.</p>
<p>Vamos ver as diferenças básicas entre uma <em>helper</em>, <em>library </em>e <em>plugin </em>(o que é algo que suscita bastante dúvida no princípio dos estudos de CI) para saber o momento certo de criar e usar e em qual pasta devemos nos preocupar em alocar os arquivos de desenvolvimento. Em artigos futuros, cada um vai ser abordado com mais detalhes, exemplos e práticas de uso.</p>
<h2>Helper</h2>
<p>Como sugere o próprio nome, <em>helpers </em>são para <strong>ajudar</strong> com as tarefas (não que <em>libraries </em>e <em>plugins </em>não sejam, mas quiseram dar esse nome, então está dado). Cada <em>helper </em>é um conjunto de funções relacionadas a uma determinada &#8220;categoria de tarefas&#8221;  &#8211; por exemplo, um <em>helper </em>nativo no CodeIgniter é o <strong>URL Helper</strong>, então, esse <em>helper </em>provê funções específicas para se trabalhar com URLs.</p>
<p>Helpers não são orientados a objetos (OO), são simplesmente programação procedural simples. Cada função de um <em>helper </em>executa <strong>uma</strong> tarefa específica, sem <strong>depender </strong>e sem <strong>causar dependência</strong> a outras funções do mesmo <em>helper</em>.</p>
<p>Como pôde ser visto em <a href="http://codeigniterbrasil.com/passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/">outra ocasião</a>, é aconselhado que os arquivos de <em>helpers </em>estejam armazenados na pasta <em>/application/helpers</em> (não falando dos<em> </em>nativos, que já ficam em <em>/helpers</em>).</p>
<h2>Library</h2>
<p>Conceitualmente, uma <em>library </em>serve para conter seu próprio código para extender as funcionalidades do CodeIgniter (ou criar funcionalidades específicas para <em>sites/softwares</em>). Usualmente, quando um programador vai fazer sua própria classe, com funcionalidades específicas para o projeto, é uma <em>library </em>que é feita.</p>
<p>Como consta no artigo sobre a <a href="../passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/">estrutura de diretórios do CodeIgniter</a>, por padrão, os arquivos de bilbiotecas criadas ficam em <em>/application/libraries</em> e os nativos em <em>/libraries</em>.</p>
<h2>Plugin</h2>
<p><em>Plugins </em>funcionam quase que da mesma forma que <em>helpers</em>. A principal diferença é que um <em>plugin </em>fornece, geralmente, uma <strong>única</strong> função, enquanto um <em>helper</em>, geralmente, apresenta <strong>várias</strong> funções. Outra diferença é que <em>helpers </em>também são considerados parte do &#8220;sistema principal&#8221;, ao passo que <em>plugins </em>se destinam a serem criados e <strong>compartilhados </strong>pela comunidade CodeIgniter.</p>
<p>Não se assuste caso sua instalação do CodeIgniter não tenha o diretório <em>/application/plugins</em>, isso é normal. Caso você queira se valer de um dos <a href="http://www.google.com.br/search?q=codeigniter+plugins"><em>plugins</em> da comunidade</a> ou criar o seu próprio (para posterior compartilhamento), basta que você crie a subpasta &#8220;plugins&#8221; dentro de &#8220;application&#8221;.</p>
<div class="alert">
A partir da versão 2.0 do CodeIgniter, os plugins não mas existirão. Então, ficaremos somente a diferença entre Helpers e Libraries.
</div>
<h2>Diferença prática entre helpers, libraries e plugins</h2>
<p>Como já comentado, não há maiores diferenciações práticas entre um <strong>helper</strong>, uma <strong>library </strong>ou um <strong>plugin</strong>, dada a tamanha flexibilidade e capacidade de adaptação a gostos pessoais que o CodeIgniter apresenta. Com o tempo, vai se pegando &#8220;o jeito&#8221; do <em>framework</em>. e é possível saber/diferenciar onde cada classe, arquivo ou função deve ser criado, extendido ou ampliado.</p>
<p>Em artigos futuros serão abordados <em>helpers</em>, <em>libraries </em>e <em>plugins </em>com mais detalhes (<a href="http://www.codeigniterbrasil.com/feed/">assine o feed do CodeIgniter Brasil</a> para não perder), mas, certamente, é programando e testando bastante que você vai conhecer as melhores práticas e &#8220;manhas&#8221; do CodeIgniter.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/diferenca-entre-library-helper-plugin-codeigniter/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Controllers no CodeIgniter</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 13:10:43 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=63</guid>
		<description><![CDATA[Como pudemos conferir no artigo sobre MVC, Controllers são responsáveis por controlar o fluxo dos programas, são os que contém as regras de negócio, é onde a lógica do aplicativo está. Essa foi a parte teórica sobre controllers. Agora vamos à parte prática, onde será mostrada a estrutura, função e funcionamento de um controller. Controllers [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://codeigniterbrasil.com/wp-content/uploads/2010/01/controllers-codeigniter.jpg"><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" /></a></p>
<p>Como pudemos conferir no artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">MVC</a>, <strong>Controllers</strong> são responsáveis por controlar o fluxo dos programas, são os que contém as regras de negócio, é onde a <strong>lógica</strong> do aplicativo está. Essa foi a parte teórica sobre <em>controllers</em>. Agora vamos à parte prática, onde será mostrada a estrutura, função e funcionamento de um <em>controller</em>.</p>
<h2>Controllers no CodeIgniter</h2>
<p><strong>Controllers</strong> no CodeIgniter são simplesmente arquivos com uma classe que é nomeada de forma ser associada a uma URL. Complicado? Lendo o artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/urls-no-codeigniter/">URLs no CodeIgniter</a> você vai ver que não!</p>
<p>Se temos, por exemplo, uma URI como <em>http://www.site.com.br/noticias/</em>, isso significa que a clase <em>Noticias</em>, contida no arquivo <em>noticias.php</em>, entrará em ação. Quando o <strong>nome</strong> de um <em>controller </em>bate com o <strong>primeiro segmento</strong> de uma URL, então esse <em>controller </em>é carregado.</p>
<p>Lembrando da <a href="http://codeigniterbrasil.com/passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/">estrutura de diretórios do CodeIgniter</a>, veremos que os arquivos dos <em>controllers </em>devem ser colocados em <strong>application/controllers</strong> a fim de garantir uma boa organização das pastas do projeto. Há pessoas que optam por armazenar seus <em>controllers </em>em outros locais e há, também, a possibilidade de modularização no CodeIgniter através do uso de algumas bilbiotecas &#8211; mas esses são assuntos para artigos futuros.</p>
<p>Reapitulando o que consta no artigo sobre <a href="../passos-iniciais/mvc-model-view-controller/">MVC</a>, temos as seguintes características básicas de um <em>controller</em>:</p>
<ul>
<li>Define o comportamento da aplicação;</li>
<li>Mapeia ações para atualizar models;</li>
<li>Seleciona views para exibição;</li>
<li>Deve haver um <em>controller </em>para cada &#8220;funcionalidade&#8221;.</li>
</ul>
<h2>Estrutura de um Controller no CodeIgniter</h2>
<p>Assim como todo <em><a href="http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/">framework</a></em>, o CodeIgniter possui suas regras de sintaxe, ou seja, a maneira pela qual os códigos devem ser escritos. A estrutura básica de um <em>controller </em>no CodeIgniter (para fins didáticos, &#8220;Noticias&#8221;) é a 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('p63code140'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p63140"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code" id="p63code140"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Noticias <span style="color: #000000; font-weight: bold;">extends</span> CI_Controller <span style="color: #009900;">&#123;</span>
&nbsp;
    <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;">public</span> <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: #b1b100;">echo</span> <span style="color: #0000ff;">'Olá, mundo!'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// demais funções</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Perceba a sutileza: o método construtor é o que inicia a classe; o index() é o que é chamado por <em>default</em>, caso nenhum outro o seja. </p>
<h4>O nome da classe deve iniciar com letra maiúscula</h4>
<p>Perceba como está a estrutura-base do exemplo. Isso é <strong>certo</strong>:</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('p63code141'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p63141"><td class="code" id="p63code141"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Noticias <span style="color: #000000; font-weight: bold;">extends</span> CI_Controller <span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Isso é <strong>errado</strong>:</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('p63code142'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p63142"><td class="code" id="p63code142"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> noticias <span style="color: #000000; font-weight: bold;">extends</span> CI_Controller <span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4>Deve haver um construtor</h4>
<p>Basta criar uma função com o mesmo nome da classe e estender a classe <em>Controller</em>, como mostrado no exemplo. Se tivéssemos uma classe <em>Matematica</em>, ficaria:</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('p63code143'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p63143"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p63code143"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Matematica <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: #009900;">&#91;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Sempre &#8220;parent::__construct();&#8221; deve estar presente, mas não necessariamente deve ser a única instrução. Se quiser executar algum código no construtor da classe, isso também é permitido.</p>
<h4>O arquivo deve ter o mesmo nome da classe</h4>
<p>Cada classe (<em>controller</em>) deve contar <strong>um e somente um</strong> arquivo para si. Não coloque mais de uma classe em um arquivo de <em>controller</em>, porque isso não vai funcionar. Em nosso <em>controller </em>de exemplo &#8220;Noticias&#8221;, o arquivo que o conteria seria o <em>noticipas.php</em>. O caminho para o arquivo seria<em> application/controllers/noticias.php</em>.</p>
<p>É possível, também, ter subpastas dentro da pasta &#8220;controllers&#8221;, a fim de melhor organizar um projeto. Nesse caso, o primeiro segmento da URL será a pasta e o <strong>segundo segmento</strong> será o <em>controller</em>. Então, se tivéssemos o arquivo <em>application/controllers/produtos/eletronicos.php</em>, o acesso a uma de suas funções &#8211; por exemplo, <em>listar()</em> &#8211; se daria através do endereço &#8220;http://www.site.com.br/produtos/eletronicos/listar/&#8221;.</p>
<h4>A função index() é a primeira a ser executada</h4>
<p>Em nosso exemplo do controller <em>Noticias</em>, vejam que existe uma função <em>index()</em>. Essa é a função que será executada quando <em>http://www.site.com.br/noticias/</em> for acessado. Todas as intruções que estiverem na função <em>index()</em> serão executados.</p>
<h2>Funções em um Controller no CodeIgniter</h2>
<p>Recapitulando o que já foi visto no post sobre <a href="http://codeigniterbrasil.com/passos-iniciais/urls-no-codeigniter/">URLs no CodeIgniter</a>, os parâmetros das funções em um <em>controller</em> também podem ser passadas via URL. Por padrão, o <em>controller</em>, em si, é  o primeiro segmento da URL; o próximo é um função do <em>controller</em>; e os subsequentes, parâmetros dessa função.</p>
<p>Repetindo o exemplo do artigo sobre URLs, vejamos o seguinte <em>controller</em>:</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('p63code144'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p63144"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p63code144"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Matematica <span style="color: #000000; font-weight: bold;">extends</span> CI_Controller <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#91;</span><span style="color: #339933;">...</span><span style="color: #009900;">&#93;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> soma<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x</span><span style="color: #339933;">,</span> <span style="color: #000088;">$y</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$x</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$y</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Um belo “10″ será mostrado na tela para quem acessar <strong>http://www.site.com.br/matematica/soma/5/5</strong>.</p>
<h4>Funções privadas em controllers</h4>
<p>Em determinadas situações, você pode querer criar funções que não são acessíveis via URL &#8211; o método &#8220;tradicional&#8221; de acesso a funções no CI. Para fazer isso, você deve criar <strong>funções privadas</strong> (cujo nome é precedido por <em>underscore</em>) da seguinte forma:</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('p63code145'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p63145"><td class="code" id="p63code145"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _funcaoqualquer<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;">// códigos</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Tentando acessar <em>http://www.site.com.br/noticias/_funcaoqualquer/</em>, <strong>não vai funcionar</strong> (afinal, trata-se de uma <strong>função privada</strong>).</p>
<h2>Definindo um Controller padrão</h2>
<p>É possível definir um <em>controller </em>padrão para seu <em>software</em>, quer dizer, um que será executado quando, na URL, <strong>nenhum outro</strong> for indicado, ou seja, quando a aplicação for acessada, através de seu <strong>endereço principal</strong>. É como definir a &#8220;página inicial&#8221; de um <em>software</em> ou <em>site</em>.</p>
<p>Para especificar qual será esse <em>controller default</em>, acesse o arquivo <strong>application/config/routes.php</strong> e altere a diretiva $route['default_controller'] com o nome do controller desejado. 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('p63code146'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p63146"><td class="code" id="p63code146"><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;">'Noticias'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Ao acessar o fictício <em>http://www.site.com.br/</em>, as instruções da função <em>index()</em> do controller <em>Noticias</em> serão executadas automaticamente.</p>
<h2>E isso é tudo sobre controllers no CodeIgniter?</h2>
<p>Não, ainda há mais coisas a respeito dos <em>controllers</em> no CodeIgniter. Por exemplo, já que você estende a classe nativa Controller em seus <em>controllers</em>, você não pode nomear suas funções com algum dos <a href="http://codeigniter.com/user_guide/general/reserved_names.html">nomes reservados das funções nativas de controller do CodeIgniter</a>.</p>
<p>E ainda há mais sobre <em>controllers</em>, recursos e técnicas que podem ser feitos para ampliar ainda mais seu poder. Mas, pode ter certeza, essa já é uma boa base sobre <strong>controllers</strong> no CodeIgniter.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>URLs no CodeIgniter</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/urls-no-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/urls-no-codeigniter/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 18:17:01 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[controller]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=60</guid>
		<description><![CDATA[No artigo sobre MVC foi visto que, no CodeIgniter, os controllers são responsáveis por controlar todo o fluxo do software; a lógica da coisa; as regras de negócio do sistema. Por padrão, as URLs no CodeIgniter são feitas para serem URLs amigáveis (Friendly URLs),quer dizer, são apresentadas em uma estrutura propícia para as páginas do [...]]]></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>No artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">MVC</a> foi visto que, no CodeIgniter, os <em>controllers</em> são responsáveis por controlar todo o fluxo do <em>software</em>; a lógica da coisa; as <a rel="nofollow" href="http://pt.wikipedia.org/wiki/Regras_de_neg%C3%B3cio">regras de negócio</a> do sistema. Por padrão, as URLs no CodeIgniter são feitas para serem <strong>URLs amigáveis</strong> (<em>Friendly URLs</em>),quer dizer, são apresentadas em uma estrutura propícia para as páginas do <em>site</em>/sistema serem melhor indexadas por mecanismos de busca, tais como o <strong>Google</strong>. Em outras palavras, as URLs no CodeIgniter são <strong>baseadas em segmentos</strong>.</p>
<h2>Estrutura de URL no CodeIgniter</h2>
<p>Vamos tomar por exemplo o seguinte endereço, gerado a partir de um sistema fictício, feito em CodeIgniter:</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('p60code156'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p60156"><td class="code" id="p60code156"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.site.com.br/noticias/artigos/meu_artigo</span></pre></td></tr></table></div>

<p>Como podemos ver, trata-se de um URI normal, que pode ser encontrado em milhares de sites por aí. Então, dentro do CodeIgniter, isso é interpretado da seguinte maneira:</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('p60code157'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p60157"><td class="code" id="p60code157"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.site.com.br/classe/funcao/id</span></pre></td></tr></table></div>

<p>E, dentro dessa estrutura de URL, o significado de cada segmento:</p>
<ol>
<li><strong>classe.</strong> O primeiro segmento, &#8220;noticias&#8221;, representa o controller (classe) &#8220;noticias&#8221;.</li>
<li><strong>funcao.</strong> O segundo segmento, &#8220;artigos&#8221;, é uma função (funcao) que existe no controller &#8220;noticias&#8221;.</li>
<li><strong>id.</strong> O terceiro, &#8220;meu_artigo&#8221;, é o parâmetro (id) da função &#8220;artigos&#8221; do controller &#8220;noticias&#8221;.</li>
</ol>
<p>Quer dizer, existe um controller &#8220;noticias&#8221; que possui uma função &#8220;artigos&#8221; (função esta que recebe um parâmetro, &#8220;id&#8221;, para funcionar):</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('p60code158'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p60158"><td class="code" id="p60code158"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Noticias <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> artigos<span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// código da função</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Não se preocupe com essa estrutura, ela será melhor detalhada no artigo sobre Controllers.</p>
<p>Vamos supor que precisássemos de uma função com 2 parâmetros. O CodeIgniter entende, também:</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('p60code159'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p60159"><td class="code" id="p60code159"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Matematica <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> soma<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x</span><span style="color: #339933;">,</span> <span style="color: #000088;">$y</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$x</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$y</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Um belo &#8220;10&#8243; será mostrado na tela para quem acessar o URI:</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('p60code160'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p60160"><td class="code" id="p60code160"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.site.com.br/matematica/soma/5/5</span></pre></td></tr></table></div>

<h2>Removendo o segmento &#8220;index.php&#8221;</h2>
<p>Em uma <a href="http://codeigniterbrasil.com/passos-iniciais/instalacao-e-configuracao-inicial-do-codeigniter/">instalação do CodeIgniter</a> padrão, o segmento &#8220;index.php&#8221; será sempre mostrado (isso devido a &#8220;questões internas&#8221;, digamos assim). Mas, caso se queira, é possível retirar do URL. Para tal, temos que nos valer de algumas poucas instruções em um arquivo <a href="http://www.google.com.br/search?q=.htaccess">.htaccess</a>:</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('p60code161'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p60161"><td class="code" id="p60code161"><pre class="php" style="font-family:monospace;">RewriteEngine on
RewriteCond $<span style="color: #cc66cc;">1</span> <span style="color: #339933;">!</span>^<span style="color: #009900;">&#40;</span>index\<span style="color: #339933;">.</span>php<span style="color: #339933;">|</span>images<span style="color: #339933;">|</span>robots\<span style="color: #339933;">.</span>txt<span style="color: #009900;">&#41;</span>
RewriteRule ^<span style="color: #009900;">&#40;</span><span style="color: #339933;">.*</span><span style="color: #009900;">&#41;</span>$ <span style="color: #339933;">/</span>index<span style="color: #339933;">.</span>php<span style="color: #339933;">/</span>$<span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#91;</span>L<span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>O código mostrado faz com que qualquer solicitação HTTP que não sejam para &#8220;index.php&#8221;, imagens e &#8220;robots.txt&#8221; é tratada como uma solicitação para o arquivo <em>index.php</em> (mesmo &#8220;index.php&#8221; não aparecendo na URI).</p>
<p>Em função de configurações de servidor, algumas vezes o .htaccess mostrado pode não funcionar. Caso isso aconteça com você, dê uma olhada nesse tópico do fórum oficial sobre <a href="http://codeigniter.com/forums/viewthread/63746">problemas de htaccess no CodeIgniter</a>.</p>
<h2>Adicionando sufixo ao URL</h2>
<p>É possível brincar um pouco mais com as <strong>URIs no CodeIgniter</strong>. Um dos recursos interessantes é acrescentar um sufixo no URI, &#8220;dando a impressão&#8221; de que se está acessando um arquivo.</p>
<p>Veja no arquivo de configuração do CodeIgniter (/system/application/config/config.php) a seção &#8220;URL suffix&#8221;. É lá que você vai alterar a variável $config['url_suffix'] e inserir o que você quer que seja seu sufixo. Por exemplo, você pode ter URIs como:</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('p60code162'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p60162"><td class="code" id="p60code162"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.site.com.br/noticias/artigos/meu_artigo.html</span></pre></td></tr></table></div>

<h2>Trabalhando com Query Strings</h2>
<p>Como foi visto, por padrão, <strong>o CodeIgniter apresenta uma estrutura de URLs amigáveis</strong>. Mas o <em>framework</em> possui tanta flexibilidade e opções de configuração e uso que é possível trabalhar com <a href="http://en.wikipedia.org/wiki/Query_string">query strings</a>. Isso, mesmo! Se você quer reviver a &#8220;tradição&#8221; na <em>internet</em> e fazer com que seu sistema pareça ter sido feito há 10 anos atrás, é possível apresentar <em>query strings</em>!</p>
<p>Para isso, você deve ir ao arquivo de configuração citado (<em>config.php</em>) e, na seção &#8220;Enable Query Strings&#8221;, alterar a diretiva <em>$config['enable_query_strings']</em> para &#8220;TRUE&#8221;, ficando dessa maneira:</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('p60code163'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p60163"><td class="code" id="p60code163"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'enable_query_strings'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'controller_trigger'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'c'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'function_trigger'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'m'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Percebam as 2 outras diretivas. É possível configurar os &#8220;<em>triggers</em>&#8221; que representam, respectivamente, o <em>controller</em> e a função que se deseja usar. Dando um exemplo de como ficaria um URI usando as <em>query strings</em> (e os <em>triggers default</em> do CodeIgniter), teríamos algo como:</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('p60code164'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p60164"><td class="code" id="p60code164"><pre class="php" style="font-family:monospace;">index<span style="color: #339933;">.</span>php?c<span style="color: #339933;">=</span>estatisticas<span style="color: #339933;">&amp;</span>m<span style="color: #339933;">=</span>mostrar</pre></td></tr></table></div>

<p>Quer dizer, será executado o código da função &#8220;mostrar&#8221; do controller &#8220;estatisticas&#8221;. Nostálgico&#8230;</p>
<div class="alert">Ao optar pelo uso de <em>query strings</em>, você está abrindo mão de diversas vantagens nativas do CodeIgniter, não podendo utilizar alguns helpers importantes de URL.</div>
<h2>Conclusão sobre URLs no CodeIgniter</h2>
<p>É gritante a facilidade com a qual se trabalha com <strong>URLs no CodeIgniter</strong>! Através de uma estrutura baseada em segmentos, os endereços gerados são fáceis para uma melhor indexação do <em>site</em>/sistema por mecanismos de busca, ao mesmo tempo em que oferece uma capacidade incrível para se trabalhar com as funções (nativas e criadas) do <em>framework</em>.</p>
<p>A flexibilidade é tamanha que é até possível mexer com <em>query strings</em> &#8211; mesmo que, para isso, tenhamos que abrir mão de alguns recursos nativos muito úteis.</p>
<p>Com certeza o CodeIgniter, provando mais uma vez que é o <strong>melhor <em>framework </em>PHP</strong>, mostrou que um dos pilares de seu poder de funcionamento é sua estrutura de URLs!</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/urls-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Estrutura de diretórios: organização de pastas do CodeIgniter 1.7.2</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 19:00:51 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[diretórios]]></category>
		<category><![CDATA[helpers]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=52</guid>
		<description><![CDATA[Não dá pra trabalhar com o CodeIgniter sem conhecer sua estrutura de diretórios. É conhecendo como é a organização das pastas no CodeIgniter e sabendo sua função dentro do &#8220;todo&#8221; do framework que é possível mexer no CI com eficiência e consciência &#8211; também é importantíssimo conhecer o Fluxograma de Dados do CodeIgniter (se ainda [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_56" class="wp-caption aligncenter" style="width: 277px"><img class="size-full wp-image-56" title="Estrutura de diretórios do CodeIgniter" src="http://codeigniterbrasil.com/wp-content/uploads/2009/11/estrutura-de-diretorios-codeigniter-1.7.2.gif" alt="Estrutura de diretórios do CodeIgniter" width="267" height="372" /><p class="wp-caption-text">Estrutura de diretórios do CodeIgniter</p></div>
<p>Não dá pra trabalhar com o <strong>CodeIgniter</strong> sem conhecer sua <strong>estrutura de diretórios</strong>. É conhecendo como é a <strong>organização das pastas</strong> no CodeIgniter e sabendo sua função dentro do &#8220;todo&#8221; do <em>framework</em> que é possível mexer no CI com <strong>eficiência</strong> e <strong>consciência</strong> &#8211; também é importantíssimo conhecer o <a title="Fluxograma de Dados do CodeIgniter: como tudo funciona" href="http://codeigniterbrasil.com/passos-iniciais/fluxograma-de-dados-do-codeigniter-como-tudo-funciona/">Fluxograma de Dados do CodeIgniter</a> (se ainda não leu o artigo, leia antes de continuar).</p>
<p>Com um pouco mais de experiência é possível alterar a <strong>estrutura de diretórios do CodeIgniter</strong>, mas, para fins didáticos, será mostrada no tutorial a estrutura padrão de pastas do CI &#8211; dentro do momento histórico da atual versão do <em>framework</em>, <strong>CodeIgniter 1.7.2</strong>.</p>
<div class="alert">
Este artigo está obsoleto. Para a informação mais recente, acesse o artigo<a href="http://codeigniterbrasil.com/passos-iniciais/estrutura-de-diretorios-organizacao-de-pastas-do-codeigniter-2/"> Estrutura de diretórios: organização de pastas do CodeIgniter 2</a>.
</div>
<p>Não serão detalhadas as funções/possibilidades completas de cada pasta e seus respectivos arquivos; isso será feito, com o tempo, na medida em que novos artigos são publicados no <em>blog</em>. Portanto, não é preciso ficar frustrado caso encontre termos que ainda desconhece; <a title="Assinar feed do CodeIgniter Brasil." href="http://codeigniterbrasil.com/feed">assine o feed do CodeIgniter Brasil</a> para não perder as atualizações.  ;-)</p>
<h2>Visão geral da estrutura de pastas do CodeIgniter</h2>
<p>Como pode ser visto na imagem da estrutura de pastas acima, na raiz da estrutura do CodeIgniter existem 2 diretórios e 2 arquivos.</p>
<h4>Diretórios</h4>
<p>Os 2 diretórios existentes na raiz da estrutura do CodeIgniter são:</p>
<ul>
<li><strong>system.</strong> Local onde os códigos das aplicações/<em>softwares</em> desenvolvidos ficam.</li>
<li><strong>user_guide.</strong> Contém o Guia do Usuário (<em>User Guide</em>) do CodeIgniter (cópia da documentação <em>online</em>).</li>
</ul>
<h4>Arquivos</h4>
<p>Juntamente com os diretórios supracitados, na raiz do esquema de diretórios do CodeIgniter existem 2 arquivos:</p>
<ul>
<li><strong>index.php.</strong> Primordial para o funcionamento do CI, contém informações para se alterar o nível de <a href="http://br.php.net/manual/pt_BR/errorfunc.configuration.php#ini.error-reporting">error reporting</a> que se vai trabalhar; opcionalmente, também é possível alterar os nomes padrão da pasta &#8220;system&#8221; e &#8220;application&#8221; (mais a respeito: <a title="Instalação e configuração inicial do CodeIgniter" href="http://codeigniterbrasil.com/passos-iniciais/instalacao-e-configuracao-inicial-do-codeigniter/">Instalação e configuração inicial do CodeIgniter</a>).</li>
<li><strong>licente.txt.</strong> É o arquivo com a licença do CI que, como já foi tratado no artigo sobre <a title="CodeIgniter: Requisitos de Servidor e Licença de Uso" href="http://codeigniterbrasil.com/diversos/codeigniter-requisitos-de-servidor-e-licenca-de-uso/">requisitos de servidor e licença de uso</a>, deve constar em todo <em>software</em>/aplicativo feito em CodeIgniter.</li>
</ul>
<h2>system</h2>
<p>Na pasta <strong>system</strong> toda a &#8220;ação&#8221; do CI acontece. Para organizar a estrutura presente, há subpastas para segmentar e organizar os arquivos e fluxo de trabalho.</p>
<ul>
<li><strong>application.</strong> Pasta onde os arquivos do aplicativo desenvolvido ficam. Praticamente toda a codificação em CI fica nesta pasta, que abriga seus <a title="MVC (Model – View – Controller)" href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">models, views, controllers</a> e outros que ainda serão tratados no <em>blog</em>.</li>
<li><strong>cache.</strong> No CodeIgniter existem maneiras de trabalhar com <em>cache</em> para servir aplicativos mais rápidos e robustos para quem os utilizam. É nesta pasta que arquivos condizentes ao <em>cache</em> feito são armazenados.</li>
<li><strong>codeigniter.</strong> Os arquivos de <em>core</em> ficam aqui. É nesta pasta que está o &#8220;coração&#8221; do CodeIgniter. Raramente é preciso mexer em algo nesta pasta, já que todo o desenvolvimento do <em>software</em> se dá na pasta &#8220;application&#8221;.</li>
<li><strong>database.</strong> Contém os <em>core files</em> (<em>drivers</em> e outras coisas) para trabalhar com bancos de dados. Assim como a pasta &#8220;codeigniter&#8221;, raramente será preciso mexer nela.</li>
<li><strong>fonts.</strong> Basicamente, esta pasta é para armazenar as fontes que podem ser usadas pela biblioteca de manipulação de imagens (que também será vista em outro momento aqui no <a href="http://codeigniterbrasil.com">CodeIgniter Brasil</a>).</li>
<li><strong>helpers.</strong> Pasta que contém os <em>helpers</em> nativos do Code Igniter (para mexer com <em>arrays</em>, <em>cookies</em>, diretórios, e-mails, formulários e muitos outros).</li>
<li><strong>language.</strong> Contém arquivos de idioma (que são usados principalmente para mensagens das <em>libraries</em> e <em>helpers</em>).</li>
<li><strong>libraries.</strong> Pasta de armazenagem das <em>libraries</em> (bibliotecas) padrão do CI para códigos envolvendo e-mails, calendários, <em>upload</em> de arquivos e mais.</li>
<li><strong>logs.</strong> Como sugere o nome, esta pasta armazena todos os<em> logs</em> gerados pelo CodeIgniter.</li>
<li><strong>plugins.</strong> Contém os <em>plugins default</em> do CodeIgniter. Veremos com mais detalhes futuramente, mas a diferença básica entre <em>helpers</em> e <em>plugins</em> é que os <em>plugins</em> possuem somente 1 função (e geralmente são feitos com intenção de serem compartilhados com a comunidade CI).</li>
<li><strong>scaffolding.</strong> Contém os arquivos necessários para se trabalhar com <em>scaffolding</em> no CodeIgniter. Se ainda não sabe o que é isso, não se preocupe, ainda vamos abordar o <em>scaffolding</em> (e, temos certeza, você vai se surpreender).</li>
</ul>
<h2>system/application</h2>
<p>Sem dúvidas, a pasta<strong> system/application</strong> é a mais importante para o desenvolvimento dos aplicativos e é a que mais vai exigir sua atenção/codificação. Já que a maior parte do seu trabalho vai ser aqui, é importante conhecer bem a estrutura de subdiretórios da pasta &#8220;application&#8221;:</p>
<ul>
<li><strong>config.</strong> Contém diversos (e importantes) arquivos relacionados a configurações de seu CI. São arquivos de configuração de <em>database</em>, variáveis sobre URL, quais <em>libraries</em> e <em>helpers</em> serão carregados automaticamente e muitas outras coisas.</li>
<li><strong>controllers.</strong> Armazena os <em>controllers</em> que você cria para o seu <em>software</em>.</li>
<li><strong>errors.</strong> Vem com os templates de páginas de erros do CodeIgniter (erros genéricos, 404, conexão ao banco de dados, etc). É conveniente que tudo isso seja alterado para que os erros do aplicativo fiquem personalizados e consonantes com a finalidade deste.</li>
<li><strong>helpers.</strong> Para armazenar todos os <em>helpers</em> que você venha a criar/aprimorar.</li>
<li><strong>hooks.</strong> Para colocar os <em>hooks</em> que você cria. Em artigos futuros será mostrado que <em>hooks</em> são a maneira mais rápida e segura de você extender o <em>core</em> do CodeIgniter (geralmente feito por usuários avançados).</li>
<li><strong>language.</strong> Para aplicativos multi-idioma, esta pasta é bem usada por armazenar as mensagens nas diferentes escritas.</li>
<li><strong>libraries.</strong> Aqui ficam as<em> libraries</em> personalizadas, com funcionalidades para o programa a ser criado. Perceba que há diferença entre as pastas <strong>system/libraries</strong> e <strong>system/application/libraries</strong>.</li>
<li><strong>models.</strong> Armazena os <em>models</em> que você cria para seu aplicativo.</li>
<li><strong>views.</strong> Armazena os <em>views</em> que você cria para seu programa.</li>
</ul>
<div class="alert">Todos os seus projetos terão imagens, folhas de estilo, javascript e outros arquivos necessários. Evidentemente será preciso pastas para organizar tudo isso. Existe uma técnica que preconiza que a melhor maneira para organizar isso é fazer pastas na raiz da instalação do CodeIgniter &#8211; ou seja, no mesmo nível hierárquico da pasta <strong>system</strong>. Mas, para se fazer isso, é preciso utilizar um <a href="http://en.wikipedia.org/wiki/Htaccess">.htaccess</a> com algumas poucas linhas para que o CodeIgniter reconheça as novas pastas:</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('p52code166'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p52166"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p52code166"><pre class="php" style="font-family:monospace;">RewriteEngine on
RewriteCond $<span style="color: #cc66cc;">1</span> <span style="color: #339933;">!</span>^<span style="color: #009900;">&#40;</span>index\<span style="color: #339933;">.</span>php<span style="color: #339933;">|</span>img<span style="color: #339933;">|</span>css<span style="color: #339933;">|</span>js<span style="color: #009900;">&#41;</span>
RewriteRule ^<span style="color: #009900;">&#40;</span><span style="color: #339933;">.*</span><span style="color: #009900;">&#41;</span>$ index<span style="color: #339933;">.</span>php<span style="color: #339933;">/</span>$<span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#91;</span>L<span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>Basicamente as instruções fazem com que o CI reconheça as pastas &#8220;img&#8221;, &#8220;css&#8221;, &#8220;js&#8221; e, de quebra, ainda retiram &#8220;index.php&#8221; do URL (algo que será explicado em um momento mais oportuno).</p></div>
<h2>O importante é a função de cada pasta</h2>
<p>Principalmente quando se está começando, é bastante comum ficar em dúvida sobre a função de cada diretório e ter receio de criar arquivos no lugar errado. Estudando a estrutura de pastas do CodeIgniter, certamente esse não será um problema que irá travar seu processo de desenvolvimento.</p>
<p>O CodeIgniter foi projetado para manter seguros seus arquivos de <em>core</em> e é por uma razão que existe uma pasta específica para você criar os arquivos de seu <em>software</em>. <strong>Você deve concentrar seus arquivos em system/application</strong>, criando arquivos nos diretórios adequados &#8211; conforme foi abordado neste artigo &#8211; e somente criar/alterar arquivos de outras pastas caso você saiba exatamente o que está fazendo (e tenha um bom motivo pra isso).</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Instalação e configuração inicial do CodeIgniter</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/instalacao-e-configuracao-inicial-do-codeigniter/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/instalacao-e-configuracao-inicial-do-codeigniter/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 13:30:54 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[diretórios]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=53</guid>
		<description><![CDATA[Depois de uma boa carga teórica (mas não pensem que terminou), vamos começar com um pouco de prática e aprender como instalar o CodeIgniter. A instalação do CI, como já comentado no artigo CodeIgniter: Requisitos de Servidor e Licença de Uso, é bem simples. Baixando o CodeIgniter Como já deve ser do conhecimento de quem [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de uma boa carga teórica (mas não pensem que terminou), vamos começar com um pouco de prática e aprender <strong>como instalar o CodeIgniter</strong>. A instalação do <strong>CI</strong>, como já comentado no artigo <a href="http://codeigniterbrasil.com/diversos/codeigniter-requisitos-de-servidor-e-licenca-de-uso/">CodeIgniter: Requisitos de Servidor e Licença de Uso</a>, é bem simples.</p>
<h2>Baixando o CodeIgniter</h2>
<p>Como já deve ser do conhecimento de quem está acompanhando o <em>blog</em> (se você ainda não está, <a href="http://www.codeigniterbrasil.com/feed/">assine o feed do CodeIgniter Brasil</a>), o CodeIgniter, como bom <strong>framework PHP</strong> que é, não necessita ser instalado da forma &#8220;tradicional&#8221;, como se instala um programa <em>desktop</em>, por exemplo. Sua instalação consiste, basicamente, em extrair os arquivos que compõem o <em>framework </em>em algum servidor <em>web </em>(pode ser local, mesmo), configurar um banco de dados e começar a brincadeira.</p>
<p>No <a href="http://codeigniter.com/"><em>site</em> oficial do CodeIgniter</a> podemos encontrar o <em>link </em>para fazer o <a href="http://codeigniter.com/download.php"><em>download</em> da última versão do CodeIgniter</a>. Não precisa se preocupar com o <em>link </em>porque sempre que uma nova versão estável é disponibilizada, ela automaticamente fica acessível através do endereço &#8220;http://codeigniter.com/download.php&#8221;. Bem prático!</p>
<p>Ah, e não se esqueça de já reservar um banco de dados especialmente para você trabalhar com o CodeIgniter! Já, já, você vai ver que, só para começar, é preciso configurar as informações de acesso ao BD.</p>
<h2>Instalação  do CodeIgniter</h2>
<p>Em alguns momentos para a <strong>instalação básica do CodeIgniter</strong> será preciso alterar algumas variáveis em arquivos específicos. Apesar do tamanho dos arquivos e relativa complexidade, não é preciso se preocupar. Além de os <em>core files</em> do CodeIgniter serem muito bem comentados, ainda abordaremos no <a href="http://codeigniterbrasil.com/">CodeIgniter Brasil</a> muito sobre os arquivos de configuração. Portanto, relaxe!  ;-)</p>
<p>Para <strong>instalar o CodeIgniter</strong>, basta seguir os seguintes passos:</p>
<ul>
<li>Descompacte a estrutura de diretórios presente no arquivo zipado que você baixou;</li>
<li>Faça <em>upload</em> de toda a estrutura para o servidor que vai trabalhar (se for trabalhar com <em>localhost</em>, basta mover, claro);</li>
<li>Abra o arquivo <strong>application/config/config.php</strong> com seu editor de códigos e especifique qual vai ser sua URL base (alterando o valor de <strong>$config['base_url']</strong> com o que vai ser sua &#8220;base&#8221; de trabalho com o CI);</li>
<li>Para a configuração do banco de dados, abra <strong>application/config/database.php</strong> e altere as variáveis com suas informações de conexão &#8211; é bem simples e intuitivo; se você fez uma conexão em PHP puro alguma vez na sua vida, nenhuma novidade.</li>
</ul>
<p>E é isso! A essa altura <strong>seu CodeIgniter já está instalado</strong>, basicamente configurado e pronto para o uso!</p>
<h2>Atualizando o CodeIgniter</h2>
<p>Para saber qual a versão mais atual do CodeIgniter, basta checar o <a href="http://codeigniter.com/">site oficial do CodeIgniter</a>. Se você <strong>já mexe com CodeIgniter </strong>usando uma versão antiga e quer atualizar, não se preocupe: é possível manter a integridade de seu aplicativo e atualizar de forma rápida e simples o core do <em>framework</em>.</p>
<p>Há uma página com o histórico, especificações e  intruções de atualização das várias versões do CI. Geralmente a atualização se limita a substituir algumas pastas e realizar alterações leves em alguns poucos arquivos. Então, já sabe: <strong>sempre que uma nova versão do CodeIgniter for liberada</strong>, não se esqueça de atualizar suas aplicações seguindo as instruções de &#8220;<a href="http://codeigniter.com/user_guide/installation/upgrading.html">Upgrading From a Previous Version</a>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/instalacao-e-configuracao-inicial-do-codeigniter/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Fluxograma de Dados do CodeIgniter: como tudo funciona</title>
		<link>http://codeigniterbrasil.com/passos-iniciais/fluxograma-de-dados-do-codeigniter-como-tudo-funciona/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/fluxograma-de-dados-do-codeigniter-como-tudo-funciona/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 18:54:27 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=48</guid>
		<description><![CDATA[Agora chegamos a um ponto que estamos quase &#8220;metendo a mão na massa&#8221;. Continuando com as postagens &#8220;pense primeiro, escreva depois&#8221;, apresentamos o Fluxograma (Flow Chart) de Dados do CodeIgniter. É muito, muito importante, mesmo, entender como é o fluxo de dados dentro de um software para se poder aplicar os conhecimentos em cima. Entender [...]]]></description>
			<content:encoded><![CDATA[<p>Agora chegamos a um ponto que estamos quase &#8220;metendo a mão na massa&#8221;. Continuando com as postagens &#8220;pense primeiro, escreva depois&#8221;, apresentamos o <strong>Fluxograma (Flow Chart) de Dados do CodeIgniter</strong>.</p>
<p>É muito, muito importante, mesmo, entender como é o <strong>fluxo de dados</strong> dentro de um <em>software</em> para se poder aplicar os conhecimentos em cima. Entender por onde os dados &#8220;passam&#8221; no <strong>CodeIgniter</strong> é essencial! Sem isso o máximo que conseguiríamos e realizar algumas funções e códigos mecanicamente, sem entender o mínimo do que realmente está se passando no <em>background</em>.</p>
<p>Bem, esse é o fluxograma:</p>
<div id="attachment_49" class="wp-caption aligncenter" style="width: 310px"><a title="CodeIgniter - Fluxograma de Dados" rel="lightbox" href="http://codeigniterbrasil.com/wp-content/uploads/2009/05/codeigniter-fluxograma-dados.gif"><img class="size-medium wp-image-49" src="http://codeigniterbrasil.com/wp-content/uploads/2009/05/codeigniter-fluxograma-dados-300x88.gif" alt="CodeIgniter - Fluxograma de Dados" width="300" height="88" /></a><p class="wp-caption-text">Fluxograma de Dados do CodeIgniter (clique para ampliar)</p></div>
<p>Olhando o fluxograma do CodeIgniter, num primeiro momento pode parecer um pouco estranho ou confuso. Mas, mesmo para os que ainda não estão habituados a frameworks e terminologias como &#8220;Libraries&#8221; e &#8220;Helpers&#8221; (e que ainda não tenhamos explicado sobre estes), basta &#8220;seguir as setinhas&#8221; para entender como a coisa toda funciona!  :-)</p>
<h2>&#8220;Seguindo as setinhas&#8221;</h2>
<p>Então, vamos ao acompanhamento de um fluxo básico, numa aplicação &#8220;normal&#8221; no CodeIgniter:</p>
<ol>
<li>O <strong>index.php</strong> serve como &#8220;controlador principal&#8221;, inicializando os recursos necessários para executar o CodeIgniter;</li>
<li>O &#8220;roteador&#8221; (<strong>Routing</strong>) examina o pedido HTTP para determinar o que deve ser feito;</li>
<li>Se existe algo em <em>cache</em>, isso é enviado diretamente ao <em>browser</em>, &#8220;contornando&#8221; o sistema normal execução;</li>
<li>Antes de o <strong>Controller</strong> da aplicação ser carregado, a requisição HTTP e qualquer dado submetido pelo usuário são filtrados por motivo de segurança;</li>
<li>O <strong>Controller</strong> carrega o <strong>Model</strong>, <strong>Libraries</strong>, <strong>Plugins</strong>, <strong>Helpers</strong> e quaisquer outros recursos necessários para a requisição;</li>
<li>O(s) <strong>View</strong>(s) é(são) finalizado(s) e enviado(s) para ser(em) renderizado(s) pelo navegador &#8211; se o <em>cache</em> estiver ativado, o <strong>View</strong> é  &#8220;cacheado&#8221; primeiro, de forma que possa ser apresentado em pedidos subsequentes.</li>
</ol>
<p>Como já citado, não é preciso se preocupar tanto (neste momento) com determinadas nomenclaturas desconhecidas &#8211; e lembre-se das explicações sobre <a title="Mais sobre o padrão MVC." href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">MVC (Model, View, Controller)</a>. Basta saber que é assim o funcionando &#8220;normal&#8221; do <strong>CodeIgniter</strong> para, em momentos futuros, saber com mais facilidade/tranquilidade onde &#8220;intervir&#8221; para conseguir o(s) resultado(s) que se prentende.</p>
<p>Bem tranquilo&#8230; Por enquanto!  ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/fluxograma-de-dados-do-codeigniter-como-tudo-funciona/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>10 razões de porque CodeIgniter arrasa</title>
		<link>http://codeigniterbrasil.com/diversos/10-razoes-de-porque-codeigniter-arrasa/</link>
		<comments>http://codeigniterbrasil.com/diversos/10-razoes-de-porque-codeigniter-arrasa/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 11:00:51 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Diversos]]></category>
		<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[documentação]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=37</guid>
		<description><![CDATA[De vez em quando é possível encontrar em algum artigo de blog ou discussão em fóruns a pergunta sobre qual é o melhor framework para PHP. Todos os frameworks têm seus pontos positivos e negativos, mas a verdadeira resposta para essa pergunta, é que depende do programador. Cada programador tem um estilo diferente e diferentes [...]]]></description>
			<content:encoded><![CDATA[<p>De vez em quando é possível encontrar em algum artigo de blog ou discussão em fóruns a pergunta sobre qual é o <strong>melhor framework para PHP</strong>. Todos os frameworks têm seus pontos positivos e negativos, mas a verdadeira resposta para essa pergunta, é que <strong>depende do programador</strong>. Cada programador tem um estilo diferente e diferentes prioridades quando se trata de adotar uma <em>tool kit</em> para usar na construção de seus aplicativos.</p>
<p>Nossa escolha é <a title="Visitar o site oficial do Code Igniter." href="http://codeigniter.com/">CodeIgniter</a> (CI) e abaixo estão as minhas 10 razões de porque CodeIgniter arrasa!</p>
<div class="alert">Este artigo é tradução do original &#8220;<a href="http://www.christophermonnat.com/2008/06/10-reasons-why-codeigniter-rocks/">10 Reasons Why CodeIgniter Rocks</a>&#8220;, do <a href="http://www.christophermonnat.com/">Chris Monnat</a>, e sofreu pequenas modificações.</div>
<h2>10. Arquitetura MVC</h2>
<p>A arquitetura <a title="Ler artigo sobre Model, View, Controller." href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">Model, View, Controller</a> não tem nada de novo. É como se todos os <a href="http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/">frameworks</a> hoje em dia fossem feitos em MVC e, os que não são, podem ser adaptados facilmente. Tenho tido experiência construindo grandes aplicações de forma procedural e toda vez elas terminam com uma salada-mista de códigos ingerenciáveis. A forma MVC oferece uma boa separação de códigos, e mantém a escrita limpa. Alguns frameworks forçam você a trabalhar de uma forma específica, mas o CI deixa você livre dentro do modelo MVC para programar como achar melhor. Se isso significa ignorar modelos, então, que assim seja.</p>
<h2>9. Quase nenhum pré-requisito para o servidor</h2>
<p>Diferente de outros <a href="http://www.phpframeworks.com/">frameworks PHP</a>, o CI trabalha com as versões 4 e 5 do PHP. Isso faz a vida de alguém como eu, que tem que ser capaz de trabalhar entre as duas versões, muito mais fácil. Claro, há muito tempo tenho usado técnicas do PHP 5 nas minhas aplicações, mas o framework por si só funciona em ambas versões.</p>
<h2>8. Fácil de entender e extender</h2>
<p>O CI foi o primeiro framework que usei que realmente fez sentido para mim. Tentei o <a href="http://www.cakephp.org/" target="_blank">Cake PHP</a>, o <a href="http://framework.zend.com/" target="_blank">Zend Framework</a>, <a href="http://www.symfony-project.org/" target="_blank">Symfony</a>, entre outros, e o CI foi o melhor para sair desenvolvendo rapidamente. É simples também quando se trata de escrever novas bibliotecas, mudar o comportamento de bibliotecas existentes, e simplesmente mudar todo comportamento do framework com um pequeno esforço.</p>
<h2>7. Todas as ferramentas que você precisa em um pequeno pacote</h2>
<p>Calendário, e-mail, codificação ZIP, validação, upload, sessões, teste de unidade&#8230; São somente algumas das bibliotecas pré-prontas que vêm com o CI. Isso inclui uma rápida importação dos &#8220;helpers&#8221; padrão para coisas como formulários, manipulação de arquivos, arrays, strings, cookies, diretórios e muito mais. Se tudo isso ainda não foi suficiente, você pode criar suas próprias bibliotecas e &#8220;helpers&#8221; ou usar código desenvolvido pela comunidade CI e postado no <a href="http://codeigniter.com/wiki/" target="_blank">Wiki</a>.</p>
<h2>6. Instalação não necessária</h2>
<p>Acredite ou não, uma das coisas mais difíceis que experienciei testando novos frameworks é a instalação dos mesmos. Eu não sou fã das linhas de comando UNIX, então procuro ferramentas que posso instalar e usar apenas subindo arquivos para um diretório. O CI é perfeito para isso. Não é preciso pacotes PEAR ou mudanças no servidor para ter o framework rodando. Apenas suba os arquivos para o seu servidor e pronto.</p>
<h2>5. Ferramentas de segurança pré-prontas</h2>
<p>O CI permite que você implemente quanta segurança for necessária para a sua aplicação. Ele faz algumas coisas por padrão como desconfigurar todas variáveis globais independente da diretiva <a href="http://www.php.net/manual/pt_BR/ini.core.php#ini.register-globals">register_globals</a> do PHP, e desabilita o <a href="http://www.php.net/set_magic_quotes_runtime">magic_quotes_runtime</a> durante a inicialização do sistema, assim você não precisará remover as barras quando for capturar dados do seu banco de dados. Outras coisas podem ser habilitadas, como encriptação de cookies, integração de dados de sessão com o banco de dados e automação de tratamento de consultas SQL.</p>
<h2>4. Abstração de banco de dados e mais</h2>
<p>Todo framework decente de hoje em dia tem uma camada de abstração de banco de dados e o CI não é diferente. Você pode facilmente criar declarações de insert, update e delete sem precisar escrever SQL. Manipule conexões para múltiplos bancos dentro de uma só aplicação e conecte-se em qualquer tipo de banco: MySQL(4.1+), MySQLi, MS SQL, Postgre, Oracle, SQLite ou ODBC. O CI também deixa você manipular o banco de dados adicionando/removendo colunas de tabelas, criando novas tabelas e removendo as antigas usando a nova biblioteca &#8220;database forge&#8221;.</p>
<h2>3. Comunidade grande e ativa</h2>
<p>A ultima vez que chequei, havia mais de 57.000 (na data de publicação deste artigo, mais de 70000) membros registrados no fóruns CI. É uma ótima comunidade para trabalhar quando se tem um problema ou uma questão. O site do CI tem um <a title="Visitar os fóruns oficiais do CodeIgniter." href="http://codeigniter.com/forums/">fórum</a> e um <a title="Visitar wiki oficial do CodeIgniter." href="http://codeigniter.com/wiki/">Wiki</a> quando você procura por respostas. Não há listas de grupo confusas ou canais de chat apenas para pegar uma resposta rápida.</p>
<h2>2. Documentação excelente</h2>
<p>De longe, a maior vantagem do CI é sua documentação. Eu admito que tentei outros frameworks enquanto eles ainda estavam na versão BETA e sob desenvolvimento. Mas a documentação do CI é 10 vezes melhor do que a documentação deles, e realmente acredito que é porque o CI é apoiado por uma empresa e não somente pela comunidade. <a href="http://www.ellislabs.com/" target="_blank">EllisLab</a>, a empresa que criou o CI, tem orgulho de tê-lo criado e eles têm grandes planos para ele, de modo que eles não têm problema em gastar o tempo necessário para criar uma documentação de qualidade para a comunidade de usuários.</p>
<h2>1. Logo mais irá se unificar com o ExpressionEngine</h2>
<p>A primeira razão do porque o CI arrasa é que o <a title="Acesar site oficial do ExpressionEngine." href="http://expressionengine.com/">ExpessionEngine</a>, sistema de gerenciamento de conteúdo da <a title="Site oficial da EllisLab." href="http://www.ellislabs.com/">EllisLab</a>, está sendo reconstruído para utilizar o <a title="Artigo sobre frameworks." href="http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/">framework</a>. Isso significa que as bibliotecas, &#8220;helpers&#8221;, etc. que você desenvolver para o CI, poderão ser reutilizados para o EE e vice-versa. Também significa que, o que quer que o EE precise operar, o CI tem. Classes melhoradas, autenticação de usuários pré-pronta, capacidade para facilmente programar aplicações modulares e muito mais. Tudo isso é apenas especulação, a nova versão do EE ainda não foi lançada, mas podemos sonhar (NT: quem tem uns dólares <em>extra</em> pode sonhar mais, porque o <strong>ExpressionEngine</strong> é pago).</p>
]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/diversos/10-razoes-de-porque-codeigniter-arrasa/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

