<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2portuguesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>CodeIgniter Brasil</title>
	
	<link>http://codeigniterbrasil.com</link>
	<description>tutoriais, dicas, macetes, códigos e informações sobre o melhor framework PHP: CodeIgniter</description>
	<lastBuildDate>Thu, 03 May 2012 01:07:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/cibrasil" /><feedburner:info uri="cibrasil" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/cibrasil" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fcibrasil" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Como fazer um sistema de “news” com CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/_b6LD_GZ4S4/</link>
		<comments>http://codeigniterbrasil.com/tutoriais/como-fazer-sistema-news-codeigniter/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 13:00:03 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[documentação]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=155</guid>
		<description><![CDATA[No artigo sobre como criar páginas estáticas no CodeIgniter houve uma dúvida: mas e se quiséssemos interagir com o banco de dados pra isso? Para sanar esta dúvida, portanto, vamos a um tutorial de como fazer um sistema de &#8220;news&#8221; usando o CodeIgniter! Schema do sistema de news Use o seguinte database schema para criar [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2010/03/codeigniter-models.jpg" alt="Como fazer um sistema de &quot;news&quot; no CodeIgniter: imagem ilustrativa" title="" width="400" height="200" class="aligncenter size-full wp-image-68 ilustra-artigo" /></p>
<p>No artigo sobre <a href="http://codeigniterbrasil.com/tira-duvidas/como-criar-paginas-estaticas-codeigniter/">como criar páginas estáticas no CodeIgniter</a> houve uma dúvida: mas e se quiséssemos interagir com o banco de dados pra isso? Para sanar esta dúvida, portanto, vamos a um tutorial de <strong>como fazer um sistema de &#8220;news&#8221; usando o CodeIgniter</strong>!</p>
<h2>Schema do sistema de news</h2>
<p>Use o seguinte database schema para criar a tabela do exemplo deste artigo:</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('p155code8'); return false;">View Code</a> MYSQL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1558"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p155code8"><pre class="mysql" style="font-family:monospace;"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=CREATE"><span style="color: #990099; font-weight: bold;">CREATE</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=TABLE"><span style="color: #990099; font-weight: bold;">TABLE</span></a> news <span style="color: #FF00FF;">&#40;</span>
    id <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=INT"><span style="color: #999900; font-weight: bold;">int</span></a><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">11</span><span style="color: #FF00FF;">&#41;</span> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html"><span style="color: #CC0099; font-weight: bold;">NOT</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=AUTO_INCREMENT"><span style="color: #FF9900; font-weight: bold;">AUTO_INCREMENT</span></a><span style="color: #000033;">,</span>
    title <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=VARCHAR"><span style="color: #999900; font-weight: bold;">varchar</span></a><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">128</span><span style="color: #FF00FF;">&#41;</span> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html"><span style="color: #CC0099; font-weight: bold;">NOT</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a><span style="color: #000033;">,</span>
    slug <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=VARCHAR"><span style="color: #999900; font-weight: bold;">varchar</span></a><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">128</span><span style="color: #FF00FF;">&#41;</span> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html"><span style="color: #CC0099; font-weight: bold;">NOT</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a><span style="color: #000033;">,</span>
    <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=TEXT"><span style="color: #999900; font-weight: bold;">text</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=TEXT"><span style="color: #999900; font-weight: bold;">text</span></a> <a href="http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html"><span style="color: #CC0099; font-weight: bold;">NOT</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=NULL"><span style="color: #9900FF; font-weight: bold;">NULL</span></a><span style="color: #000033;">,</span>
    <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=PRIMARY%20KEY"><span style="color: #990099; font-weight: bold;">PRIMARY KEY</span></a> <span style="color: #FF00FF;">&#40;</span>id<span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">,</span>
    <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=KEY"><span style="color: #990099; font-weight: bold;">KEY</span></a> slug <span style="color: #FF00FF;">&#40;</span>slug<span style="color: #FF00FF;">&#41;</span>
<span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">;</span></pre></td></tr></table></div>

<p>A partir de agora, também é muito importante você ficar familiarizado com os métodos do <del>Active Record (que, brevemente, terá seu nome trocado para Query Builder)</del> <strong>Query Builder</strong> (<a href="http://travis-ci.org/#!/EllisLab/CodeIgniter/builds/1184773">antigo Active Record</a>). Portanto, <a href="http://codeigniter.com/user_guide/database/active_record.html">acesse a página do manual oficial que trata do Active Record</a> e familiarize-se com os métodos de seleção, inserção, atualização e deleção de dados.</p>
<p>Por exemplo, vamos criar um método no model que permite pegar todas as <em>news</em> cadastradas ou pegar somente uma ao passar seu slug.</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('p155code9'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1559"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p155code9"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> get_news<span style="color: #009900;">&#40;</span><span style="color: #000088;">$slug</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</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;">$slug</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">FALSE</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;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'news'</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_array</span><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: #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;">get_where</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'news'</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;">'slug'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$slug</span><span style="color: #009900;">&#41;</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;">row_array</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>

<h2>Configurando o model</h2>
<p>Vamos configurar o <a href="http://codeigniterbrasil.com/passos-iniciais/models-no-codeigniter/" title="Models no CodeIgniter">model</a> para nosso sistema de news. Ele será armazenado em <code>application/models/news_model.php</code> e será 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('p155code10'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p15510"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p155code10"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> News_model <span style="color: #000000; font-weight: bold;">extends</span> CI_Model <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> __construct<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;">database</span><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;">&#125;</span></pre></td></tr></table></div>

<p>Este código é semelhante ao código do controller usado no <a href="http://codeigniterbrasil.com/tira-duvidas/como-criar-paginas-estaticas-codeigniter/">artigo sobre páginas estáticas</a>. Ele cria um novo model que extende o <strong>CI_Model</strong> e carrega a <a href="http://codeigniterbrasil.com/passos-iniciais/carregando-bibliotecas-libraries-no-codeigniter/" title="Carregando bibliotecas (libraries) no CodeIgniter">library</a> de banco de dados. Isso fará com que a classe de banco de dados esteja disponível através do objeto <code>$this->db</code>.</p>
<h2>Mostrando as news</h2>
<p>Agora que as consultas podem ser feitas, vamos partir para a exibição das news, fazendo a <a href="http://codeigniterbrasil.com/passos-iniciais/models-views-controllers-trabalhando-juntos-codeigniter/" title="Models, Views e Controllers trabalhando juntos no CodeIgniter">integração MVC</a>. Crie o <a href="http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/" title="Controllers no CodeIgniter">controller</a> <code>application/controllers/news.php</code>, que terá o seguinte código:</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('p155code11'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p15511"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre></td><td class="code" id="p155code11"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> News <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> __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: #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;">'news_model'</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: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'news'</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;">news_model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_news</span><span style="color: #009900;">&#40;</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;">'News archive'</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;">'templates/header'</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: #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;">'news/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: #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;">'templates/footer'</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> view<span style="color: #009900;">&#40;</span><span style="color: #000088;">$slug</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'news'</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;">news_model</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_news</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$slug</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'news_item'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            show_404<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: #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: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'news_item'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</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;">'templates/header'</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: #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;">'news/view'</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: #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;">'templates/footer'</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>E, agora, o arquivo de <a href="http://codeigniterbrasil.com/passos-iniciais/views-no-codeigniter/" title="Views no CodeIgniter">view</a> que mostra todos os artigos, <code>application/views/news/index.php</code>, que terá o seguinte código:</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('p155code12'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p15512"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p155code12"><pre class="php" style="font-family:monospace;"><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;">$news</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$news_item</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
    <span style="color: #339933;">&lt;</span>h2<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;">$news_item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>h2<span style="color: #339933;">&gt;</span>
&nbsp;
    <span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;main&quot;</span><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;">$news_item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'text'</span><span style="color: #009900;">&#93;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    <span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
&nbsp;
    <span style="color: #339933;">&lt;</span>p<span style="color: #339933;">&gt;&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;news/&lt;?php echo <span style="color: #006699; font-weight: bold;">$news_item</span>['slug'] ?&gt;&quot;</span><span style="color: #339933;">&gt;</span>Ver artigo<span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;&lt;/</span>p<span style="color: #339933;">&gt;</span>
&nbsp;
<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>Por fim, o view que mostra a página de cada artigo, <code>application/views/news/view.php</code>:</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('p155code13'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p15513"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p155code13"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;h2&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$news_item</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;">'&lt;/h2&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$news_item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'text'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h2>Roteamento</h2>
<p>Uma revisada no artigo sobre <a href="http://codeigniterbrasil.com/configuracoes/configuracao-rotas-routes-codeigniter/" title="Configuração de rotas (routes) no CodeIgniter">routes no CodeIgniter</a> vai permitir uma configuração de rotas para facilitar o acesso aos artigos e aprimorar nosso sistema:</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('p155code14'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p15514"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p155code14"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$route</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'news/(:any)'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'news/view/$1'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$route</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'news'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'news'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$route</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'(:any)'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'pages/view/$1'</span><span style="color: #339933;">;</span>
<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;">'pages/view'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>E, com isso, está pronto nosso sistema de news no CodeIgniter! Popule o banco com alguns registros e acesse <strong>http://localhost/news</strong> (depois de já <a href="http://codeigniterbrasil.com/dicas/dicas-basicas-configuracao-codeigniter/">ter removido o segmento &#8220;index.php&#8221;</a>) para o ver em funcionamento.</p>
<h2>Conclusão</h2>
<p>Alguns estiveram impacientes por tutoriais mais práticos, como este, mas, até agora, os artigos da seção Passos Iniciais eram de suma importância.</p>
<p>Se você <a href="hhtp://codeigniterbrasil.com/feed">vem acompanhando o CodeIgniter Brasil</a>, ao ver este tutorial completo, certamente não deve ter sentido dificuldade em acompanhar os conceitos e técnicas apresentados.</p>
<p>Valeu ou não a pena?  ;-)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=_b6LD_GZ4S4:E-107Q08cGA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=_b6LD_GZ4S4:E-107Q08cGA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=_b6LD_GZ4S4:E-107Q08cGA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=_b6LD_GZ4S4:E-107Q08cGA:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/_b6LD_GZ4S4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/tutoriais/como-fazer-sistema-news-codeigniter/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/tutoriais/como-fazer-sistema-news-codeigniter/</feedburner:origLink></item>
		<item>
		<title>Segurança no CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/Ldn_yVMKugA/</link>
		<comments>http://codeigniterbrasil.com/dicas/seguranca-no-codeigniter/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 13:00:40 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[documentação]]></category>
		<category><![CDATA[libraries]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=115</guid>
		<description><![CDATA[Quando se está preparando o ambiente de desenvolvimento para CodeIgniter, é importante levar em consideração uma questão primordial: segurança. Durante o desenvolvimento de um site ou sistema, existem muitas ações/verificações possíveis de se fazer a fim de aumentar a segurança da aplicação. Felizmente, o CI já vem, por padrão, com uma série de opções e [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2012/03/codeigniter-seguranca-security.gif" alt="" title="seguranca-codeigniter-security" width="500" height="200" class="aligncenter size-full wp-image-153 ilustra-artigo" /></p>
<p>Quando se está preparando o ambiente de desenvolvimento para <strong>CodeIgniter</strong>, é importante levar em consideração uma questão primordial: <strong>segurança</strong>. Durante o desenvolvimento de um site ou sistema, existem muitas ações/verificações possíveis de se fazer a fim de aumentar a segurança da aplicação. Felizmente, o CI já vem, por padrão, com uma série de opções e configurações que ajudam bastante, neste sentido, através de sua classe de segurança, a <strong>Security Class</strong>.</p>
<h2>Configurações de segurança padrão</h2>
<h3>Segurança de URI</h3>
<p>O CodeIgniter é bastante restritivo em relação aos caracteres permitidos em URIs. Isso é para minimizar a possibilidade de que dados maliciosos possam ser passados ​​para a aplicação. Por padrão, URIs podem conter apenas os seguintes caracteres:</p>
<ul>
<li>Texto alfanumérico</li>
<li>Til: ~</li>
<li>Porcento: %</li>
<li>Ponto: .</li>
<li>Dois pontos: :</li>
<li>Underscore: _</li>
<li>Traço/Menos: -</li>
</ul>
<p>Apesar de ser desaconselhado, é possível especificar mais caracteres &#8211; ou suprimir algum(ns) desse(s) &#8211; no arquivo de configuração, <strong>/application/config/config.php</strong>.</p>
<h3>Register_globals e magic_quotes_runtime</h3>
<p>Durante a inicialização do sistema, todas as variáveis ​​globais não estão setadas, exceto as encontradas em $_GET, $_POST e $_COOKIE. A rotina de desativação é a mesma usada na diretiva &#8220;register_globals = off&#8221;.</p>
<p>A diretiva &#8220;magic_quotes_runtime&#8221; está desligada durante a inicialização do framework para que não seja preciso remover barras quando em consultas em bancos de dados.</p>
<p>Isso o CodeIgniter já faz por padrão, então, não precisa se preocupar com nada, somente fique sabendo. :-)</p>
<h3>error_reporting</h3>
<p>Em ambientes de produção, normalmente é desejável desativar o reporte de erros do PHP, definindo o sinalizador &#8220;error_reporting&#8221; para &#8220;0&#8243;. Isso desativa erros nativos do PHP que está sendo processado, que pode, potencialmente, conter informações confidenciais. Mas, em ambientes de desenvolvimento e testes, é importante que esses erros apareçam.</p>
<p>Mais sobre os diferentes ambientes e como gerenciar configurações e variáveis facilmente, leia o artigo que explica <a href="http://codeigniterbrasil.com/configuracoes/trabalhando-com-diversos-ambientes-no-codeigniter/">como trabalhar com diversos ambientes no CodeIgniter</a>.</p>
<h2>Melhores práticas de segurança para CodeIgniter</h2>
<p>Como &#8220;regras gerais&#8221;, existem algumas práticas que podem ser levadas em consideração no momento de desenvolver aplicações com CodeIgniter. Na verdade, são regras de segurança até mesmo para quando não se está usando o CI!</p>
<p>Antes de aceitar qualquer dado em sua aplicação, sejam dados POST vindos de formulários, COOKIES, dados de URIs, dados XML-RPC ou, até, informações de SERVER, é possível tomar 3 precauções em nome da segurança:</p>
<ol>
<li>Filtrar dados.</li>
<li>Validar os dados para assegurar sua conformidade com o tipo correto, comprimento, tamanho, etc (algumas vezes, isso pode substituir o item anterior)</li>
<li>Tratar dados antes de submetê-los ao banco de dados</li>
</ol>
<p>Para ajudar nessa trinca de segurança, o próprio CodeIgniter já vem com alguns recursos para ajudar.</p>
<h3>Filtro XSS</h3>
<p><a href="http://pt.wikipedia.org/wiki/Cross-site_scripting">Cross-site scripting</a> (ou XSS) é um tipo de ataque perigoso, mas, felizmente, o CodeIgniter já apresenta meios de proteger a aplicação através de uma de sua <a href="http://codeigniter.com/user_guide/libraries/security.html">Security Class</a>.</p>
<h3>Validação de dados</h3>
<p>CodeIgniter tem uma <a href="http://codeigniter.com/user_guide/libraries/form_validation.html">Classe de validação de formulário</a> que serve para validar, filtrar e preparar dados.</p>
<h3>Escapar dados antes de terem contato com o Banco de Dados</h3>
<p>Nunca insira informação em seu banco de dados sem escape! Existe uma <a href="http://codeigniter.com/user_guide/database/queries.html">seção específica para isso no manual oficial do CI</a>.</p>
<h2>Conclusão sobre Segurança no CodeIgniter</h2>
<p>Não somente quando se usa CI, mas em todo projeto web, levar a segurança em consideração é um dos passos mais importantes para garantir que seu site ou aplicação tenha qualidade.</p>
<p>Este artigo mostrou somente em linhas gerais como o CodeIgniter, em seu status de melhor framework PHP, já tem, por default, diversos recursos e abordagens para tratar essa questão de segurança.</p>
<p>Serão lançados, aqui no blog, artigos específicos sobre cada um dos pontos citados. <a href="http://codeigniterbrasil.com/feed">Assine o feed</a> para não perder a leitura e garantir que a segurança de seus aplicativos em CodeIgniter esteja em dia!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=Ldn_yVMKugA:juNTa9KBh7g:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=Ldn_yVMKugA:juNTa9KBh7g:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=Ldn_yVMKugA:juNTa9KBh7g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=Ldn_yVMKugA:juNTa9KBh7g:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/Ldn_yVMKugA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/dicas/seguranca-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/dicas/seguranca-no-codeigniter/</feedburner:origLink></item>
		<item>
		<title>Como criar “páginas estáticas” com CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/voVzOb1zQ0c/</link>
		<comments>http://codeigniterbrasil.com/tira-duvidas/como-criar-paginas-estaticas-codeigniter/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 13:10:18 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Tira Dúvidas]]></category>
		<category><![CDATA[ajuda]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=149</guid>
		<description><![CDATA[Recentemente chegou uma dúvida interessante: como criar &#8220;páginas estáticas&#8221; com o CodeIgniter? Por &#8220;páginas estáticas&#8221; quem perguntou quis dizer aquele tipo de página mais &#8220;institucional&#8221;, em que o conteúdo não se altera muito, tal como uma página Sobre, Termos de Uso, Política de Privacidade, etc. Essa dúvida é tão comum para quem está começando no [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2012/03/como-criar-paginas-estaticas-codeigniter.jpg" alt="" title="CodeIgniter: como criar páginas estáticas" width="500" height="200" class="aligncenter size-full wp-image-150 ilustra-artigo" /></p>
<p>Recentemente chegou uma dúvida interessante: <strong>como criar &#8220;páginas estáticas&#8221; com o CodeIgniter?</strong> Por &#8220;páginas estáticas&#8221; quem perguntou quis dizer aquele tipo de página mais &#8220;institucional&#8221;, em que o conteúdo não se altera muito, tal como uma página Sobre, Termos de Uso, Política de Privacidade, etc.</p>
<p>Essa dúvida é tão comum para quem está começando no mundo CI que o <a href="http://codeigniter.com/user_guide/">manual oficial</a> tem até um tutorial explicando! Mas, para não dizer que por aqui não tem colher de chá, vamos explicar detalhadamente como é o processo de fazer páginas estáticas usando CodeIgniter.</p>
<h2>O raciocínio</h2>
<p>A lógica por trás da criação de páginas estáticas com CI é bastante simples: para gerenciar essas páginas, um <a href="http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/" title="Controllers no CodeIgniter">controller</a> simples, que não vai fazer muita coisa além de servir corretamente os respectivos views.</p>
<p>Além disso, algumas configurações de <a href="http://codeigniterbrasil.com/configuracoes/configuracao-rotas-routes-codeigniter/" title="Configuração de rotas (routes) no CodeIgniter">rotas</a> para direcionar a requisição à página correta.</p>
<p>Então, basicamente o que é preciso saber/mexer:</p>
<p><strong>
<ul>
<li>Controller</li>
<li>Configuração de rotas</li>
</ul>
<p></strong></p>
<p>Felizmente, tudo já explicado, aqui, no <a href="/">CodeIgniter Brasil</a>!  ;-)</p>
<h2>O controller</h2>
<p>Seguindo nosso complexo plano de ação, vamos criar um controller. É bastante lógico que ele se chame &#8220;paginas&#8221;, &#8220;pages&#8221; ou qualquer coisa neste sentido. Vamos no &#8220;pages&#8221; para manter a característica estadunidense do CI. :-P</p>
<p>Portanto, crie o arquivo <strong>application/controllers/pages.php</strong> com o seguinte conteúdo:</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('p149code22'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p14922"><td class="code" id="p149code22"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Pages <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> view<span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Ou seja, o controller &#8220;pages&#8221; terá uma função view() para gerenciar as requisições a páginas estáticas; função esta que exibirá, por padrão, a página estática &#8220;home&#8221;. Como sabemos das facilidades dos controllers e sua relação com os URLs do site, o acesso às páginas será bem simplificado:</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('p149code23'); return false;">View Code</a> HTML4STRICT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p14923"><td class="code" id="p149code23"><pre class="html4strict" style="font-family:monospace;">http://localhost/pages/sobre
http://localhost/pages/termos-de-uso
http://localhost/pages/politica-de-privacidade</pre></td></tr></table></div>

<p>Isso levando em conta que já se está suprimindo o &#8220;index.php&#8221; do URL, tal como mostrado no <a href="http://codeigniterbrasil.com/passos-iniciais/urls-no-codeigniter/" title="URLs no CodeIgniter">artigo sobre URLs no CodeIgniter</a>.</p>
<p>Mas onde vai estar o conteúdo dessas páginas, já que não estamos tratando com bancos de dados? Há uma maneira bastante simples de se fazer: <strong>um arquivo para cada página!</strong> Com isso, para se alterar o conteúdo de uma página, basta alterar o conteúdo de seu respectivo arquivo.</p>
<p>Deixemos no ar a ideia de colocarmos estes arquivos em <strong>application/views/pages/</strong>.</p>
<h2>Templates para exibição</h2>
<p>Para exibir estes conteúdo, são precisas views. Como vimos no artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/views-no-codeigniter/" title="Views no CodeIgniter">views no CodeIgniter</a>, é possível &#8220;combinar&#8221; diversas views, carregando-as em sequência.</p>
<p>Parece uma boa ideia fazer um topo e um rodapé, neste caso. Dessa forma, quando for preciso alterar alguma coisa, uma só atualização afetará todas as páginas do site. Criemos, então, 2 arquivos.</p>
<p><strong>application/views/templates/header.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('p149code24'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p14924"><td class="code" id="p149code24"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>title<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;">-</span> Meu Site em CodeIgniter<span style="color: #339933;">&lt;/</span>title<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>body<span style="color: #339933;">&gt;</span>
	<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></pre></td></tr></table></div>

<p><strong>application/views/templates/footer.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('p149code25'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p14925"><td class="code" id="p149code25"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>strong<span style="color: #339933;">&gt;&amp;</span>copy<span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <a href="http://www.php.net/date"><span style="color: #990000;">date</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Y'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #339933;">&lt;/</span>strong<span style="color: #339933;">&gt;</span>	
<span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<h2>Adicionando lógica ao controller</h2>
<p>Para o exemplo, vamos criar no diretório de &#8220;pages&#8221; &#8211; <strong>application/views/pages/</strong> &#8211; os arquivos &#8220;sobre.php&#8221; e &#8220;contato.php&#8221;. Então, é hora de fazer a mágica acontecer em nosso 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('p149code26'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p14926"><td class="code" id="p149code26"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> view<span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// Se o arquivo correspondente não existir no diretório, erro</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span> <a href="http://www.php.net/file_exists"><span style="color: #990000;">file_exists</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'application/views/pages/'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$page</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.php'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        show_404<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;">// Título da página é o próprio nome com a primeira letra em maiúsculo</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> <a href="http://www.php.net/ucfirst"><span style="color: #990000;">ucfirst</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$page</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// &quot;Monta&quot; a apresentação usando as views</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;">'templates/header'</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: #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;">'pages/'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$page</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: #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;">'templates/footer'</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>Lembra de como passamos dados para as views, não é? Qualquer coisa, dê uma recapitulada no <a href="http://codeigniterbrasil.com/passos-iniciais/views-no-codeigniter/">artigo sobre views</a>.</p>
<h2>Configurando as rotas</h2>
<p>Por fim, vamos configurar as rotas da forma apropriada a permitir que o acesso a essas páginas estáticas seja feito através de URLs mais simples. Para isso, conforme foi visto no artigo sobre <a href="http://codeigniterbrasil.com/configuracoes/configuracao-rotas-routes-codeigniter/" title="Configuração de rotas (routes) no CodeIgniter">rotas no CodeIgniter</a>, abra o arquivo application/config/routes.php e adicione o seguinte:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p149code27'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p14927"><td class="code" id="p149code27"><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;">'pages/view'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$route</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'(:any)'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'pages/view/$1'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Com essa configuração de rotas, o que fizemos foi instruir o CodeIgniter a:</p>
<ul>
<li>O controller padrão é o pages/view</li>
<li>Quando qualquer requisição for feita, esta será usada como parâmetro da função view() do controller pages</li>
</ul>
<p>E, a partir de agora, basta acessar as páginas de seu site e ser feliz:</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('p149code28'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p14928"><td class="code" id="p149code28"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//localhost/sobre</span>
http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//localhost/contato</span></pre></td></tr></table></div>

<h2>Conclusão</h2>
<p>Como pudemos ver, <strong>criar página estáticas com CodeIgniter</strong> não tem mistério: basta alguns arquivos num diretório, criar um controller para gerenciar tudo e simplificar o acesso usando regras simples de rotas.</p>
<p>E, se você também tem uma dúvida sobre o CodeIgniter, basta enviar um tweet para <a href="http://twitter.com/codeigniterbr">@codeigniterbr</a> que tentaremos fazer um artigo em até 2 anos úteis!  ;-)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=voVzOb1zQ0c:-uYLQowoPf4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=voVzOb1zQ0c:-uYLQowoPf4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=voVzOb1zQ0c:-uYLQowoPf4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=voVzOb1zQ0c:-uYLQowoPf4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/voVzOb1zQ0c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/tira-duvidas/como-criar-paginas-estaticas-codeigniter/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/tira-duvidas/como-criar-paginas-estaticas-codeigniter/</feedburner:origLink></item>
		<item>
		<title>Trabalhando com diversos ambientes no CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/LLvAtmI7lgE/</link>
		<comments>http://codeigniterbrasil.com/configuracoes/trabalhando-com-diversos-ambientes-no-codeigniter/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 13:00:34 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Configurações]]></category>
		<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=147</guid>
		<description><![CDATA[O CodeIgniter é o melhor framework PHP da atualidade e, para corroborar esta informação, veremos que é possível trabalhar com diversos &#8220;ambientes&#8221; no CI. Mas o que, exatamente, isso significa? O que são &#8220;ambientes&#8221; no CodeIgniter? Em desenvolvimento de software &#8211; principalmente quando se trabalha com algum tipo de controle de versões &#8211; é bastante [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-64 ilustra-artigo" src="http://codeigniterbrasil.com/wp-content/uploads/2010/01/controllers-codeigniter.jpg" alt="" width="350" height="200"></p>
<p>O <strong>CodeIgniter</strong> é o <strong>melhor framework PHP</strong> da atualidade e, para corroborar esta informação, veremos que é possível trabalhar com diversos &#8220;ambientes&#8221; no CI. Mas o que, exatamente, isso significa?</p>
<h2>O que são &#8220;ambientes&#8221; no CodeIgniter?</h2>
<p>Em desenvolvimento de software &#8211; principalmente quando se trabalha com algum tipo de controle de versões &#8211; é bastante comum existirem diversos &#8220;<strong>ambientes</strong>&#8220;. Quando se desenvolve software (e sistemas e aplicações web estão aí inclusos), é desejável que determinadas configurações de seu ambiente de desenvolvimento sejam diferentes, dependendo de onde estão atualmente sendo executadas.</p>
<p>Por exemplo, quando se está programando, é desejável que a exibição de erros esteja habilitada. Afinal, este tipo de informação é útil para o(s) programador(es) e, como o site ainda não está &#8220;aberto ao público&#8221;, não há perigo em expor quaisquer configurações e/ou <em>paths</em> referentes ao projeto. Já para quando o site está &#8220;aberto&#8221;, é importante que este tipo de informação <strong>não seja exibida</strong>, já que exibe informações críticas relativas ao <em>software</em> e atrapalha a experiência do visitante/usuário &#8211; imagine erros de MySQL sendo exibidos para um pobre visitante que veio de uma SERP&#8230;</p>
<p>Geralmente existem 3 ambientes:</p>
<ul>
<li><strong>desenvolvimento.</strong> Como sugere o próprio nome, é o ambiente usado pelos desenvolvedores para a produção e aprimoramento do software.</li>
<li><strong>homologação ou teste.</strong> Quando chegar o momento de testar o software (isso varia conforme o projeto, metodologia, equipe, etc), é neste ambiente em que isso é feito. O ambiente, além de estar disponível para &#8220;testadores oficiais&#8221; que fazem parte da equipe, também pode ser acessado por usuários escolhidos ou outras pessoas.</li>
<li><strong>produção.</strong> Acessado pelos visitantes e &#8220;usuários finais&#8221;. É quando já de desenvolveu/aprimorou o projeto (ou alguma parte específica dele), isso já foi passado (e aprovador) no ambiente de testes e, agora, está disponível para todas as pessoas.</li>
</ul>
<p>Essas não são nomenclaturas &#8220;oficiais&#8221; e nem os ambientes precisam se restringir a 3, mas esse é o dia-a-dia da maioria dos projetos de desenvolvimento de software e funciona muito bem, obrigado!  ;-)</p>
<p>E, como não poderia deixar de ser, uma das características do CodeIgniter é permitir que se lide com esses diferentes ambientes e suas respectivas configurações de forma bem fácil e simples!</p>
<h2>Como configurar ambientes no CodeIgniter</h2>
<p>A configuração de ambientes no CodeIgniter se dá, principalmente, no arquivo <strong>index.php</strong>. Nele, logo no início, há a definição da constante <strong>ENVIRONMENT</strong>. É aqui que se define qual ambiente será usado para a execução do CI.</p>
<p>Logo abaixo tem um <strong>switch</strong>. Ele simplesmente checa qual é o tipo de ambiente e, dependendo do resultado, aplica diferentes configurações.</p>
<p>E pode parecer incrível, mas é somente isso! Somente definindo qual ambiente será usado no momento (e que vai ser configurado segundo as configurações/diretrizes definidos no switch), já temos um controle de ambientes no CodeIgniter!</p>
<h2>Exemplo de configuração de ambientes</h2>
<p>Como se trata de um switch simples, é possível definir qualquer coisa que se queira para os diferentes ambientes. Voltemos ao exemplo da exibição de erros segundo o ambiente. Aproveitando, vamos suprimir o salvamento de queries ao BD quando não for necessário. Veja como é simples configurar o switch:</p>

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

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

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

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

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

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

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

<h2>Conclusão</h2>
<p>Como vimos, lidar com diferentes ambientes em desenvolvimento de software usando CodeIgniter é tão difícil quanto alterar 1 linha de código&#8230; Configurando corretamente cada ambiente, é possível garantir maior <strong>segurança</strong>, <strong>desempenho</strong> e <strong>estabilidade</strong> ao projeto, já que é possível estabelecer diretivas específicas para cada um.</p>
<p>E você, tem alguma dica ou configuração que gostaria de recomendar para cada ambiente? Comente!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=LLvAtmI7lgE:HulsQdDvx18:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=LLvAtmI7lgE:HulsQdDvx18:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=LLvAtmI7lgE:HulsQdDvx18:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=LLvAtmI7lgE:HulsQdDvx18:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/LLvAtmI7lgE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/configuracoes/trabalhando-com-diversos-ambientes-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/configuracoes/trabalhando-com-diversos-ambientes-no-codeigniter/</feedburner:origLink></item>
		<item>
		<title>Como compactar HTML no CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/nRM7slJjpZg/</link>
		<comments>http://codeigniterbrasil.com/dicas/como-compactar-html-codeigniter/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 16:01:52 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[classes]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=143</guid>
		<description><![CDATA[Exatamente ontem surgiu num repositório fork do CodeIgniter uma novidade muito interessante: uma feature para compactar HTML! Apesar de não ser oficial, fiz alguns testes e está tudo funcionando muito bem! Portanto, compactar HTML no CodeIgniter agora é possível e, acredite, os resultados são incríveis! Baixando a nova classe de Output A primeira coisa a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2012/01/codeigniter-compactar-html.jpg" alt="CodeIgniter: como compactar HTML (imagem ilustrativa)" title="" width="500" height="200" class="aligncenter size-full wp-image-144 ilustra-artigo" /></p>
<p>Exatamente ontem surgiu num <a href="https://github.com/atiredmachine/CodeIgniter">repositório fork do CodeIgniter</a> uma novidade muito interessante: uma feature para <strong>compactar HTML</strong>! Apesar de não ser oficial, fiz alguns testes e está tudo funcionando muito bem! Portanto, compactar HTML no CodeIgniter agora é possível e, acredite, os resultados são incríveis!</p>
<h2>Baixando a nova classe de Output</h2>
<p>A primeira coisa a se fazer é substituir a classe nativa de Output do CodeIgniter pela que tem as modificações. Então, <a href="https://github.com/atiredmachine/CodeIgniter/blob/5528c0e3335a8d0826b2bcb8aef6283681d3a0c6/system/core/Output.php">copie a Output Class modificada</a> e coloque em <strong>/system/core</strong> (para os mais cautelosos, um backup é sempre bem-vindo).</p>
<h2>Ativando a compactação de HTML</h2>
<p>Assim como pode ser visto na <a href="https://github.com/EllisLab/CodeIgniter/pull/965">pull request da compatação de HTML no CodeIgniter</a>, a partir do momento em que a nova Output Class está presente, é preciso ativar a funcionalidade de compactar através de uma diretiva de configuração.</p>
<p>Por padrão, esta diretiva estaria presente em <strong>application/config/config.php</strong>, mas, como ela não existe, é preciso criá-la. Então, em qualquer ponto do arquivo <strong>config.php</strong> (ou outro arquivo de configuração que você esteja usando), inclua a seguinte diretiva:</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('p143code38'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p14338"><td class="code" id="p143code38"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'minify_output'</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></pre></td></tr></table></div>

<p>E pronto! A partir de agora o <strong>CodeIgniter comprime toda e qualquer saída de HTML</strong> (e CSS inline) que passar pela Output (que, caso você esteja usando corretamente a <a href="http://codeigniterbrasil.com/passos-iniciais/models-views-controllers-trabalhando-juntos-codeigniter/">abordagem MVC no CodeIgniter</a>, significa a exibição nas views).</p>
<h2>Conclusão sobre compactação de HTML no CodeIgniter</h2>
<p>Apesar de (ainda) não ser um recurso oficial do CI e que, não há que se duvidar, ainda ganhará melhorias, realmente vale a pena, pelo menos, testar a compactação (embora já esteja estável o suficiente para ser usado em ambiente de produção).</p>
<p><strong>&lt;update&gt;</strong><br />
Como esperado, <a href="https://github.com/EllisLab/CodeIgniter/pull/965">as alterações na classe de Output já foram para o repositório oficial</a>. O pessoal ainda está discutindo melhorias, portanto, fique ligado!<br />
<strong>&lt;/update&gt;</strong></p>
<p>Claro que há muitos fatores a se considerar, mas estima-se que esta compactação reduza o tamanho da saída HTML em <strong>10~15%</strong> (chegando, em alguns casos, a incríveis 30%), o que é bastante considerável! Com isso, a transferência de recursos no servidor e exibição de conteúdos, consequentemente, também ficam mais rápidos.</p>
<p>E tudo isso pode ficar ainda melhor quando se usa <strong>cache</strong> para os conteúdos! Mas isso já é assunto para outro artigo&#8230;  ;-)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=nRM7slJjpZg:EoLkjopoIBA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=nRM7slJjpZg:EoLkjopoIBA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=nRM7slJjpZg:EoLkjopoIBA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=nRM7slJjpZg:EoLkjopoIBA:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/nRM7slJjpZg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/dicas/como-compactar-html-codeigniter/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/dicas/como-compactar-html-codeigniter/</feedburner:origLink></item>
		<item>
		<title>CodeIgniter Drivers</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/oWVsfZP5G3w/</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('p140code42'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p14042"><td class="code" id="p140code42"><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('p140code43'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p14043"><td class="code" id="p140code43"><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('p140code44'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p14044"><td class="code" id="p140code44"><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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=oWVsfZP5G3w:RTnvoxSBrDE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=oWVsfZP5G3w:RTnvoxSBrDE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=oWVsfZP5G3w:RTnvoxSBrDE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=oWVsfZP5G3w:RTnvoxSBrDE:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/oWVsfZP5G3w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/codeigniter-drivers/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/codeigniter-drivers/</feedburner:origLink></item>
		<item>
		<title>Como criar bibliotecas (libraries) no CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/O_aRDEIjfaw/</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('p136code59'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13659"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p136code59"><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('p136code60'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13660"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p136code60"><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('p136code61'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13661"><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="p136code61"><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('p136code62'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13662"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p136code62"><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('p136code63'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13663"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p136code63"><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('p136code64'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13664"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p136code64"><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('p136code65'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13665"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p136code65"><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('p136code66'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13666"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p136code66"><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('p136code67'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13667"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p136code67"><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('p136code68'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13668"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p136code68"><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('p136code69'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13669"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p136code69"><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('p136code70'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13670"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p136code70"><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('p136code71'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13671"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p136code71"><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('p136code72'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p13672"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p136code72"><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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=O_aRDEIjfaw:uRVK399DWuY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=O_aRDEIjfaw:uRVK399DWuY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=O_aRDEIjfaw:uRVK399DWuY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=O_aRDEIjfaw:uRVK399DWuY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/O_aRDEIjfaw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/como-criar-biblioteca-library-codeigniter/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/como-criar-biblioteca-library-codeigniter/</feedburner:origLink></item>
		<item>
		<title>CodeIgniter 2.1</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/qAkFrAiaHpY/</link>
		<comments>http://codeigniterbrasil.com/noticias/codeigniter-2-1/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 00:27:15 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Notícias]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=134</guid>
		<description><![CDATA[A comunidade estava ansiosa por algumas mudanças e, como não é costume da Equipe CodeIgniter deixar seus fãs usuários na mão, eis que é lançado o CodeIgniter 2.1! Este é um guest post de William Rufino, que pode ser encontrado na internet através de: Site de William Rufino twitter de William Rufino Boa tarde a [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-28 ilustra-artigo" title="Codeigniter." src="http://codeigniterbrasil.com/wp-content/uploads/2008/10/codeigniter.gif" alt="Codeigniter." width="500" height="150"></p>
<p>A comunidade estava ansiosa por algumas mudanças e, como não é costume da Equipe CodeIgniter deixar seus <del>fãs</del> usuários na mão, eis que é lançado o <strong>CodeIgniter 2.1</strong>!</p>
<div class="guest-post">
Este é um guest post de <strong>William Rufino</strong>, que pode ser encontrado na internet através de:
</p>
<ul>
<li><a href="http://www.williamrufino.com.br/">Site de William Rufino</a></li>
<li><a href="http://twitter.com/williamhrs">twitter de William Rufino</a></li>
</ul>
</div>
<p>Boa tarde a todos! Finalmente após 3 meses da mudança do nosso querido <strong>CodeIgniter</strong> para o <a href="http://github.com">Github</a>, foi anunciado hoje, pela EllisLab, o lançamento da <a title="Codeigniter 2.1 lançado pela EllisLab" href="http://codeigniter.com/news/codeigniter_2.1.0_belated_release_announcement">versão 2.1.0 do CodeIgniter</a>. Nesta versão foram adicionadas algumas grandes mudanças ao framework:</p>
<ul>
<li><a href="http://codeigniter.com/user_guide/libraries/migration.html">Migrations</a>. Para versionar também o banco de dados, através do Migrations, você simplesmente da um up() ou down().</li>
<li><strong>PDO Driver</strong>. Foi adicionado PDO como driver para os banco de dados, aumentando assim a gama de bancos suportados pelo CodeIgniter.</li>
<li><strong>Mais PHP5</strong>. Desde que foi &#8220;dropado&#8221; o suporte do CodeIgniter ao PHP4 aos poucos foi sendo mudada a sintaxe do core para o PHP5, e nesta versão mais coisa foi altearada para PHP5.</li>
</ul>
<p>Estas foram as maiores mudanças, e também mais significativas desta versão. Para mais informações vejam no <a href="http://codeigniter.com/user_guide/changelog.html">changelog</a>.</p>
<p>A EllisLab também informou que todas mudanças (correções de bugs) que forem feitas na versão 2.1.x serão mescladas na versão 3.0 e todas novidades serão commitadas para o branch 3.0.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=qAkFrAiaHpY:C_J6CNc3H2s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=qAkFrAiaHpY:C_J6CNc3H2s:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=qAkFrAiaHpY:C_J6CNc3H2s:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=qAkFrAiaHpY:C_J6CNc3H2s:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/qAkFrAiaHpY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/noticias/codeigniter-2-1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/noticias/codeigniter-2-1/</feedburner:origLink></item>
		<item>
		<title>Estendendo o CodeIgniter: como adicionar novas funcionalidades ao framework</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/lQhUzMeX-sk/</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('p118code75'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p11875"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p118code75"><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('p118code76'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p11876"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p118code76"><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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=lQhUzMeX-sk:bqA4Ceo5oM4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=lQhUzMeX-sk:bqA4Ceo5oM4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=lQhUzMeX-sk:bqA4Ceo5oM4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=lQhUzMeX-sk:bqA4Ceo5oM4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/lQhUzMeX-sk" height="1" width="1"/>]]></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>
		<feedburner:origLink>http://codeigniterbrasil.com/dicas/estendendo-o-codeigniter-como-adicionar-novas-funcionalidades-ao-framework/</feedburner:origLink></item>
		<item>
		<title>Nova licença do CodeIgniter: OSL 3.0</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/uf9IX6BoRKY/</link>
		<comments>http://codeigniterbrasil.com/noticias/nova-licenca-codeigniter-osl-3/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 11:36:33 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Notícias]]></category>
		<category><![CDATA[diversidades]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=129</guid>
		<description><![CDATA[É isso, mesmo, meus amigos: conforme tweet oficial, o CodeIgniter está sendo &#8220;relicenciado&#8221; para a Open Software License v. 3.0, também conhecida como OSL 3.0. A mudança não virá com a próxima versão, o CodeIgniter 2.1, e sim com a versão 3 do framework &#8211; CI 3; OSL 3&#8230; Entendeu? ;-) No site da Open [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2011/10/codeigniter-nova-licenca-osl-3.jpg" alt="Nova licença do CodeIgniter: OSL 3.0" width="500" height="150" class="ilustra-artigo aligncenter size-full wp-image-130" /></p>
<p>É isso, mesmo, meus amigos: conforme <a href="http://twitter.com/#!/CodeIgniter/status/127115100904624129">tweet oficial</a>, o <strong>CodeIgniter</strong> está sendo &#8220;relicenciado&#8221; para a <strong>Open Software License v. 3.0</strong>, também conhecida como <strong>OSL 3.0</strong>. A mudança não virá com a próxima versão, o CodeIgniter 2.1, e sim com a versão 3 do framework &#8211; CI 3; OSL 3&#8230; Entendeu?  ;-)</p>
<p>No site da <a href="http://www.opensource.org/">Open Source Initiative</a> é possível acessar a <a href="http://www.opensource.org/licenses/OSL-3.0">página com os termos da OSL 3.0</a> para saber, juridicamente falado, quais os termos, deveres, obrigações e permissões que esta licença institui.</p>
<h2>Na prática, o que muda?</h2>
<p>Apesar de não ter formação jurídica, parece que o uso e desenvolvimento de sites, ferramentas e sistemas online do framework não foi alterado. Quer dizer, aparentemente, tudo o que consta no artigo sobre <a href="http://codeigniterbrasil.com/diversos/codeigniter-requisitos-de-servidor-e-licenca-de-uso/">requisitos de servidor e licença de uso</a> continua valendo (inclusive, na própria <a href="http://codeigniter.com/user_guide/license.html">página da licença no User Guide</a>, nada foi alterado).</p>
<p>Com a mudança para a <strong>OSL 3.0</strong> a <a href="http://ellislab.com/">EllisLab</a>, em termos gerais e em relação ao CodeIgniter, concede uma licença mundial, isenta de <em>royalties</em>, não exclusiva e sublicenciável de:</p>
<p><strong></p>
<ul>
<li>Concessão de Licença de Direitos Autorais</li>
<li>Concessão de Licença de Patentes</li>
<li>Concessão de Licença do código fonte</li>
<li>Exclusões da Concessão de Licença</li>
<li>Concessão de &#8220;Implantação Externa&#8221;</li>
</ul>
<p></strong></p>
<p>Mas, para saber na íntegra o que tudo isso significa, juridicamente falando (com todas suas aplicações, direitos e deveres), deem uma olhada na <a href="http://www.opensource.org/licenses/OSL-3.0">página com os termos da OSL 3.0</a>.</p>
<p>Parece que esta licença veio para dar ainda mais liberdade para o uso do CI (com determinadas garantias e isenções para a EllisLab, evidentemente). Agora, resta esperar para maiores notícias sobre a mudança para vermos, efetivamente, o que mudou, não mudou e o que pode ou não pode ser feito com esta <strong>mudança de licença do CodeIgniter para a OSL 3.0</strong> para saber as reais implicações na prática.</p>
<p>Enquanto isso, mais informações a respeito e discussões sobre a mudança podem ser acompanhadas no <a href="http://codeigniter.uservoice.com/forums/40508-codeigniter-reactor/suggestions/2344554-gpl-compatible-non-copyleft-popular-licesne">UserVoice do CodeIgniter</a> e, no fórum oficial, no tópico &#8220;<a href="http://codeigniter.com/forums/viewthread/202562/">CodeIgniter changes license to OSL 3.0?</a>&#8220;.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=uf9IX6BoRKY:qFt-M2-VKC0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=uf9IX6BoRKY:qFt-M2-VKC0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=uf9IX6BoRKY:qFt-M2-VKC0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=uf9IX6BoRKY:qFt-M2-VKC0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/uf9IX6BoRKY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/noticias/nova-licenca-codeigniter-osl-3/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/noticias/nova-licenca-codeigniter-osl-3/</feedburner:origLink></item>
		<item>
		<title>MY_Controller : estendendo o CI_Controller</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/t17-ZTacGaU/</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('p120code84'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12084"><td class="code" id="p120code84"><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('p120code85'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12085"><td class="code" id="p120code85"><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('p120code86'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12086"><td class="code" id="p120code86"><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('p120code87'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12087"><td class="code" id="p120code87"><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('p120code88'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12088"><td class="code" id="p120code88"><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('p120code89'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12089"><td class="code" id="p120code89"><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('p120code90'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12090"><td class="code" id="p120code90"><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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=t17-ZTacGaU:2kAKCsqB6aA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=t17-ZTacGaU:2kAKCsqB6aA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=t17-ZTacGaU:2kAKCsqB6aA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=t17-ZTacGaU:2kAKCsqB6aA:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/t17-ZTacGaU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/my_controller-estendendo-o-ci_controller/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/my_controller-estendendo-o-ci_controller/</feedburner:origLink></item>
		<item>
		<title>CICON 2011 e novidades no mundo CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/f3osK2wTvwM/</link>
		<comments>http://codeigniterbrasil.com/noticias/cicon-2011-e-novidades-no-mundo-codeigniter/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 14:56:18 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Notícias]]></category>
		<category><![CDATA[comunidade]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=126</guid>
		<description><![CDATA[Como os mais chegados no CodeIgniter já estavam sabendo, aconteceu recentemente a CodeIgntier Conference ou, como ficou mais conhecida, CICON. Infelizmente não deu para eu ir este ano e ajudar com o quórum de 100 codeigniters que lá estiveram&#8230; Quem sabe no próximo ano! ;-) E, no CICON 2011, algumas coisas importantes a respeito do [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="CICON 2011" src="http://farm7.static.flickr.com/6064/6067761331_afa0ab6d4e.jpg" class="aligncenter ilustra-artigo" width="500" height="331" /></p>
<p>Como os mais chegados no CodeIgniter já estavam sabendo, aconteceu recentemente a <strong>CodeIgntier Conference</strong> ou, como ficou mais conhecida, <strong>CICON</strong>. Infelizmente não deu para eu ir este ano e ajudar com o quórum de 100 codeigniters que lá estiveram&#8230; Quem sabe no próximo ano!  ;-)</p>
<p>E, no <a href="http://cicon2011.com/">CICON 2011</a>, algumas coisas importantes a respeito do melhor framework PHP foram decididas (<a href="http://philsturgeon.co.uk/blog/2011/08/cicon2011-and-the-future-of-codeigniter">comunicado oficial</a>), dentre as quais:</p>
<ul>
<li><strong>&#8220;Core&#8221; e &#8220;Reactor&#8221;? Não mais&#8230;</strong> É isso, mesmo, não há mais os diferentes <a href="http://codeigniterbrasil.com/noticias/codeigniter-reactor-codeigniter-core-e-mais-novidades-do-mundo-ci/">grupos &#8220;Core&#8221; e &#8220;Rector&#8221;</a> para manter o framework. Devido a algumas reclamações da comunidade, agora voltamos ao bom e velho <strong>CodeIgniter</strong>, somente.</li>
<li><strong>Mudança para o Github.</strong> Agora o repositório oficial está hospedado no <a href="https://github.com/">Github</a>. Segundo os próprios <em>engineers</em>, essa será uma mudança que atenderá melhor às necessidades do projeto e anseios da comunidade.</li>
<li><strong>CodeIgniter 2.0.3.</strong> Saiu uma nova versão do CI! Veja no <a href="ho que mudougniter.com/user_guide/changelog.html">changelog</a> o que mudou e, se vai fazer alguma diferença em algum projeto seu, <a href="http://codeigniter.com/user_guide/installation/upgrading.html">atualize</a>!</li>
</ul>
<p>Segundo um dos principais <em>engineers</em>, <a href="http://philsturgeon.co.uk/">Phil Sturgeon</a>, o encontro foi bastante positivo, o pessoal gostou de se encontrar e bater um papo a respeito do CI e, inclusive, a base de contribuidores aumentou! Ele, e todos nós envolvidos com o projeto, esperamos que o CI continue crescendo!</p>
<p>Agora, vamos a algumas <a href="http://www.flickr.com/photos/kylefarris/sets/72157627489315606/">fotos do CICON 2011</a>!</p>
<p>Quem sabe no próximo alguns <em>brazilians codeigniters</em> também aparece!  ;-)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=f3osK2wTvwM:aMMSY2-j-D4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=f3osK2wTvwM:aMMSY2-j-D4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=f3osK2wTvwM:aMMSY2-j-D4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=f3osK2wTvwM:aMMSY2-j-D4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/f3osK2wTvwM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/noticias/cicon-2011-e-novidades-no-mundo-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/noticias/cicon-2011-e-novidades-no-mundo-codeigniter/</feedburner:origLink></item>
		<item>
		<title>CodeIgniter Template Parser Class</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/m3jPhfCwyy0/</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('p123code97'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12397"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p123code97"><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('p123code98'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12398"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p123code98"><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('p123code99'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p12399"><td class="code" id="p123code99"><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('p123code100'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p123100"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code" id="p123code100"><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('p123code101'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p123101"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p123code101"><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('p123code102'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p123102"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p123code102"><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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=m3jPhfCwyy0:KIPqoX77Flk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=m3jPhfCwyy0:KIPqoX77Flk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=m3jPhfCwyy0:KIPqoX77Flk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=m3jPhfCwyy0:KIPqoX77Flk:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/m3jPhfCwyy0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/codeigniter-template-parser-class/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/codeigniter-template-parser-class/</feedburner:origLink></item>
		<item>
		<title>Carregando bibliotecas (libraries) no CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/VeWO0DlkZPs/</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('p121code110'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p121110"><td class="code" id="p121code110"><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('p121code111'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p121111"><td class="code" id="p121code111"><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('p121code112'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p121112"><td class="code" id="p121code112"><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('p121code113'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p121113"><td class="code" id="p121code113"><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('p121code114'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p121114"><td class="code" id="p121code114"><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('p121code115'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p121115"><td class="code" id="p121code115"><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('p121code116'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p121116"><td class="code" id="p121code116"><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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=VeWO0DlkZPs:hUCLK2peJi4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=VeWO0DlkZPs:hUCLK2peJi4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=VeWO0DlkZPs:hUCLK2peJi4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=VeWO0DlkZPs:hUCLK2peJi4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/VeWO0DlkZPs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/carregando-bibliotecas-libraries-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/carregando-bibliotecas-libraries-no-codeigniter/</feedburner:origLink></item>
		<item>
		<title>Autocomplete do CodeIgniter 2 no Eclipse</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/x_Ql0rDWwrs/</link>
		<comments>http://codeigniterbrasil.com/integracao/autocomplete-codeigniter-eclipse/#comments</comments>
		<pubDate>Mon, 16 May 2011 13:58:38 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Integração]]></category>
		<category><![CDATA[código-fonte]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=108</guid>
		<description><![CDATA[Depois de alguns artigos aqui no CodeIgniter Brasil, algumas pessoas enviaram questões referentes à facilidade em se programar com CodeIgniter. É certo que cada um escolhe seu ambiente de desenvolvimento segundo seus próprios critérios, mas existem alguns que são realmente fantásticos para se trabalhar com PHP. É o caso do Eclipse PDT (PHP Development Tools), [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codeigniterbrasil.com/wp-content/uploads/2011/05/autocomplete-codeigniter-eclipse-tela-final.gif" alt="Autocomplete do CodeIgniter 2 no Eclipse: exemplo" title="" width="500" height="200" class="size-full wp-image-112 aligncenter ilustra-artigo" /></p>
<p>Depois de alguns artigos aqui no <a href="http://codeigniterbrasil.com/">CodeIgniter Brasil</a>, algumas pessoas enviaram questões referentes à facilidade em se programar com CodeIgniter. É certo que cada um escolhe seu ambiente de desenvolvimento segundo seus próprios critérios, mas existem alguns que são realmente fantásticos para se trabalhar com PHP. É o caso do <a href="http://www.eclipse.org/pdt/">Eclipse PDT</a> (PHP Development Tools), &#8220;ramificação&#8221; do <a href="http://www.eclipse.org/">Eclipse</a>, um dos IDEs mais conhecidos e eficientes para programação.</p>
<p>Então, para o caso de você já usar o IDE, este tutorial vai ensinar <strong>como fazer autocomplete do CodeIgniter no Eclipse</strong>. Caso ainda não o conheça, dê uma pesquisada, baixe e teste o IDE que certamente você vai gostar. Não digo que esta deve ser a ferramenta definitiva para todas as necessidades, mas, certamente, é uma opção interessante a se considerar. Então, para entender as explicações, é preciso que você tenha tido, pelo menos, um mínimo de contato com o Eclipse PDT.</p>
<h2>A lógica do autocomplete CodeIgniter + Eclipse</h2>
<p>Por padrão, o Eclipse já faz <strong>autocomplete de classes e funções</strong> que você desenvolve em diferentes arquivos. Quando se trata de um projeto &#8220;comum&#8221;, é fácil para ele reconhecer e realizar o autocompletar. No entanto, para o CodeIgniter, em função da disposição peculiar de seus arquivos constituintes, devemos &#8220;ensinar&#8221; a ferramenta a reconhecer estas classes e funções.</p>
<p>O que é preciso para que o <strong>Eclipse faça o autocompletar do CodeIgniter</strong> é que ele, de alguma forma, tenha acesso e reconheça todas as classes e funções presentes no core do CI. A partir disso, ele será capaz de realizar o autocomplete dentro de qualquer controller e/ou model que você crie em seu projeto.</p>
<p>Basicamente, o que precisamos é:</p>
<ul>
<li>Criar 2 projetos no Eclipse: 1 com o CodeIgniter &#8220;puro&#8221;; outro com o CodeIgniter para o projeto, propriamente dito;</li>
<li>Incluir, no CI &#8220;puro&#8221;, um pequeno trecho de código em 2 arquivos do code;</li>
<li>No &#8220;Include Path&#8221; do projeto, propriamente dito, referenciar o projeto do CI &#8220;puro&#8221;;</li>
</ul>
<h2>Criando projetos no Eclipse</h2>
<p><a href="http://codeigniter.com/download.php">Baixe a versão mais recente do CodeIgniter</a>. O download fornece um arquivo zipado. Na pasta de sua preferência, descompacte a estrutura 2 vezes: uma delas será nossa &#8220;base&#8221;, o outro, o projeto oficial. Chame, por exemplo, respectivamente, &#8220;CI_BASE&#8221; e &#8220;PROJETO&#8221;.</p>
<p>No Eclipse, crie 2 projetos, cada um apontando para uma pasta que foi gerada a partir da extração do CodeIgniter.</p>
<div id="attachment_109" class="wp-caption aligncenter" style="width: 510px"><img src="http://codeigniterbrasil.com/wp-content/uploads/2011/05/autocomplete-codeigniter-eclipse-passo1.gif" alt="Autocomplete do CodeIgniter 2 no Eclipse" title="" width="500" height="200" class="size-full wp-image-109" /><p class="wp-caption-text">Tela mostrando os 2 projetos criados no Eclipse</p></div>
<h2>Código-extra no &#8220;CI_BASE&#8221;</h2>
<p>No projeto CI_BASE, você vai precisar alterar 2 arquivos de core:</p>
<p><strong></p>
<ul>
<li>/system/core/controller.php</li>
<li>/system/core/model.php</li>
</ul>
<p></strong></p>
<p>Acrescente, em ambos, exatamente após o início do escopo da classe, 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('p108code118'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p108118"><td class="code" id="p108code118"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * @var CI_Config
 */</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$config</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @var CI_DB_active_record
 */</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$db</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @var CI_Email
 */</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$email</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @var CI_Form_validation
 */</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$form_validation</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @var CI_Input
 */</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$input</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @var CI_Loader
 */</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$load</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @var CI_Router
 */</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$router</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @var CI_Session
 */</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$session</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @var CI_Table
 */</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$table</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @var CI_Unit_test
 */</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$unit</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @var CI_URI
 */</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$uri</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @var CI_Pagination
 */</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$pagination</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Atente-se em inserir o código nos lugares corretos.</p>
<div id="attachment_111" class="wp-caption aligncenter" style="width: 510px"><img src="http://codeigniterbrasil.com/wp-content/uploads/2011/05/autocomplete-codeigniter-eclipse-passo3.gif" alt="Autocomplete do CodeIgniter 2 no Eclipse" title="" width="500" height="200" class="size-full wp-image-111" /><p class="wp-caption-text">Insira o código onde está a linha em destaque. O mesmo para /system/core/model.php.</p></div>
<h2>Referenciando CI_BASE em PROJETO</h2>
<p>Por fim, é preciso referenciar o projeto CI_BASE em PROJETO, a fim de que o autocomplete aparece neste. Para tanto, faça o seguinte:</p>
<ul>
<li>Clique o botão direito no projeto PROJETO e vá em <strong>Properties > PHP Include Path > aba Projects > botão Add&#8230;</strong></li>
<li>Selecione o check de <strong>CI_BASE > botão OK</strong></li>
<li>Confirme a ação clicando no botão <strong>OK</strong></li>
</ul>
<div id="attachment_110" class="wp-caption aligncenter" style="width: 510px"><img src="http://codeigniterbrasil.com/wp-content/uploads/2011/05/autocomplete-codeigniter-eclipse-passo2.gif" alt="Autocomplete do CodeIgniter 2 no Eclipse" title="" width="500" height="200" class="size-full wp-image-110" /><p class="wp-caption-text">Include Path do projeto CI_BASE</p></div>
<p>A partir de agora, o autocomplete do CodeIgniter estará disponível em qualquer controller e model que você crie para seu projeto! Faça o teste e comprove: crie algum controller e tente usar, por exemplo, a função de carregar um view (já explicada no artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/views-no-codeigniter/">Views no CodeIgniter</a>).<br />
<div id="attachment_112" class="wp-caption aligncenter" style="width: 510px"><img src="http://codeigniterbrasil.com/wp-content/uploads/2011/05/autocomplete-codeigniter-eclipse-tela-final.gif" alt="Autocomplete do CodeIgniter 2 no Eclipse" title="" width="500" height="200" class="size-full wp-image-112" /><p class="wp-caption-text">Exemplo de autocomplete do CodeIgniter no Eclipse</p></div></p>
<h2>Conclusão</h2>
<p>Na verdade, PROJETO continua sendo somente uma &#8220;instalação&#8221; do CodeIgniter. CI_BASE foi adicionado à lista de projetos somente para dar o suporte necessário ao autocomplete. Portanto, esta é uma técnica específica de prover o<strong> autocomplete do CodeIgniter no Eclipse</strong>, servindo para conferir maior comodidade, rapidez e eficiência para quem programa com CI neste incrível IDE.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=x_Ql0rDWwrs:cuM0LvqGXCE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=x_Ql0rDWwrs:cuM0LvqGXCE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=x_Ql0rDWwrs:cuM0LvqGXCE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=x_Ql0rDWwrs:cuM0LvqGXCE:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/x_Ql0rDWwrs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/integracao/autocomplete-codeigniter-eclipse/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/integracao/autocomplete-codeigniter-eclipse/</feedburner:origLink></item>
		<item>
		<title>Estrutura de diretórios: organização de pastas do CodeIgniter 2</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/qs0i3g_ITaA/</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('p106code120'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p106120"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p106code120"><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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=qs0i3g_ITaA:nsk5BJCOxFc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=qs0i3g_ITaA:nsk5BJCOxFc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=qs0i3g_ITaA:nsk5BJCOxFc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=qs0i3g_ITaA:nsk5BJCOxFc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/qs0i3g_ITaA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/estrutura-de-diretorios-organizacao-de-pastas-do-codeigniter-2/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/estrutura-de-diretorios-organizacao-de-pastas-do-codeigniter-2/</feedburner:origLink></item>
		<item>
		<title>Classes do CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/65LEd65-O6E/</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>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=65LEd65-O6E:MWH7dMgof6g:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=65LEd65-O6E:MWH7dMgof6g:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=65LEd65-O6E:MWH7dMgof6g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=65LEd65-O6E:MWH7dMgof6g:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/65LEd65-O6E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/classes-do-codeigniter/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/classes-do-codeigniter/</feedburner:origLink></item>
		<item>
		<title>CodeIgniter 2</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/UMzkH2FQWks/</link>
		<comments>http://codeigniterbrasil.com/noticias/codeigniter-2/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 12:35:38 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Notícias]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=94</guid>
		<description><![CDATA[E, depois de muita espera, mudanças na estrutura de desenvolvimento, choro e ranger de dentes, eis que é lançado o CodeIgniter 2! É isso, mesmo, a equipe CodeIgniter Reactor oficialmente liberou o CodeIgniter 2 anteontem, dia 28 de janeiro de 2011! Quem vem acompanhando as notícias do mundo CodeIgniter, não tem nada o que se [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-28 ilustra-artigo" title="Codeigniter." src="http://codeigniterbrasil.com/wp-content/uploads/2008/10/codeigniter.gif" alt="Codeigniter." width="500" height="150"></p>
<p>E, depois de muita espera, mudanças na estrutura de desenvolvimento, choro e ranger de dentes, eis que é lançado o <strong>CodeIgniter 2</strong>! É isso, mesmo, a equipe <a href="http://codeigniterbrasil.com/noticias/codeigniter-reactor-codeigniter-core-e-mais-novidades-do-mundo-ci/">CodeIgniter Reactor</a> oficialmente liberou o CodeIgniter 2 anteontem, dia 28 de janeiro de 2011!</p>
<p>Quem vem acompanhando as notícias do mundo CodeIgniter, não tem nada o que se surpreender com as novas <em>features</em>, que foram exaustivamente discutidas e &#8220;pré apresentadas&#8221; à comunidade. Mas, para quem ainda desconhece, algumas das principais mudanças/benefícios foram:</p>
<ul>
<li>Não há mais suporte a PHP4. Agora é a partir do PHP 5.1;</li>
<li>Diretório &#8220;application&#8221; movido para a raiz;</li>
<li>Diretórios &#8220;system/cache&#8221; e &#8220;system/logs&#8221; movidos para o diretório &#8220;application&#8221;</li>
<li>Adicionado o prefixo &#8220;CI_&#8221; para todas as classes do <em>core</em>.</li>
<li>O <a href="http://codeigniter.com/user_guide/helpers/form_helper.html">Form Helper</a> agora conta com proteção <a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">CSRF</a>;</li>
<li><a href="http://codeigniter.com/user_guide/general/drivers.html">Drivers</a>;</li>
<li>Remoção do Scaffolding;</li>
<li>Não existem mais plugins, em detrimento dos <a href="http://codeigniterbrasil.com/passos-iniciais/diferenca-entre-library-helper-plugin-codeigniter/">helpers</a>;</li>
<li>Mais de 50 bugs corrigidos;</li>
<li>E muito mais!</li>
</ul>
<p>Para ver a lista completa, veja o <a href="http://codeigniter.com/user_guide/changelog.html">changelog do CodeIgniter</a>.</p>
<p>Uma outra coisa que está para sair em breve é um <strong>sistema de comentários</strong> em cada página do User Guide, tal como existe hoje no <a href="http://br.php.net/">site oficial do PHP</a>. Dessa maneira, a documentação se tornará ainda mais rica com as contribuições, dicas e macetes dos membros da comunidade.</p>
<p>O jeito, agora, é <a href="http://codeigniter.com/download.php">baixar o CodeIgniter</a>, fazer muitos testes e partir para o abraço com mais esta evolução do melhor framework PHP!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=UMzkH2FQWks:5C82zINwNFY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=UMzkH2FQWks:5C82zINwNFY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=UMzkH2FQWks:5C82zINwNFY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=UMzkH2FQWks:5C82zINwNFY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/UMzkH2FQWks" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/noticias/codeigniter-2/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/noticias/codeigniter-2/</feedburner:origLink></item>
		<item>
		<title>$_GET no CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/duJiNgDw43Q/</link>
		<comments>http://codeigniterbrasil.com/configuracoes/_get-no-codeigniter/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 12:00:04 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Configurações]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[controller]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=93</guid>
		<description><![CDATA[Por padrão, o CodeIgniter não suporta parâmetros $_GET; quando algo assim é identificado no URL, é automaticamente destruído pelo CI. Entretanto, pode haver situações em que é preciso pegar/passar variáveis com GET, seja por usar algum webservice, serviço de pagamento ou o que quer que seja. Como o CodeIgniter é o melhor framework PHP, com [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-61 ilustra-artigo" src="http://codeigniterbrasil.com/wp-content/uploads/2010/01/url-uri-codeigniter.jpg" alt="" width="350" height="200"></p>
<p>Por padrão, o <strong>CodeIgniter</strong> não suporta parâmetros $_GET; quando algo assim é identificado no URL, é automaticamente destruído pelo CI. Entretanto, pode haver situações em que é preciso pegar/passar variáveis com GET, seja por usar algum webservice, serviço de pagamento ou o que quer que seja.</p>
<p>Como o <strong>CodeIgniter é o melhor framework PHP</strong>, com ele também é possível liberar o acesso a parâmetros $_GET com muita facilidade. E mais: somente em <a href="http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/">controllers</a> específicos!</p>
<div class="alert">
Este artigo é altamente inspirado no post &#8220;<a href="http://www.dannyherran.com/2010/12/_get-parameters-on-codeigniter/">$_GET parameters on CodeIgniter</a>&#8220;, do <a href="http://www.dannyherran.com/">blog de Danny Herran</a>.
</div>
<h2>Configurar o CodeIgniter para aceitar $_GET</h2>
<p>A primeira coisa que deve ser feita é uma pequena alteração no arquivo <strong>/application/config/config.php</strong>. Localize a linha com a configuração &#8220;<strong>uri_protocol</strong>&#8221; e altere seu valor para &#8220;<strong>PATH_INFO</strong>&#8220;:</p>

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

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

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

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

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

<p>Obviamente a variável &#8220;str&#8221; do exemplo vai receber a URL-alvo (uma ajudinha sobre <a href="http://www.google.com.br/search?q=php+get+url">como pegar a URL atual</a>) e, a partir daí, é possível trabalhar com variáveis comuns pra usar os parâmetros passados através de $_GET no CodeIgniter. Um exemplo de URL seria:</p>

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

<p>Bem facinho, certo? Se alguém tiver alguma outra solução/dica sobre <strong>como usar GET no CodeIgniter</strong> e/ou pegar o URL atual, basta comentar!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=duJiNgDw43Q:KG9FO7-Bilk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=duJiNgDw43Q:KG9FO7-Bilk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=duJiNgDw43Q:KG9FO7-Bilk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=duJiNgDw43Q:KG9FO7-Bilk:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/duJiNgDw43Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/configuracoes/_get-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/configuracoes/_get-no-codeigniter/</feedburner:origLink></item>
		<item>
		<title>CodeIgniter Reactor, CodeIgniter Core e mais novidades do mundo CI</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/MPZ_zoGS4VI/</link>
		<comments>http://codeigniterbrasil.com/noticias/codeigniter-reactor-codeigniter-core-e-mais-novidades-do-mundo-ci/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 13:00:13 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Notícias]]></category>
		<category><![CDATA[código-fonte]]></category>
		<category><![CDATA[comunidade]]></category>
		<category><![CDATA[documentação]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=92</guid>
		<description><![CDATA[Há algumas semanas, no CodeIgniter News, uma notícia chamou a atenção da comunidade: &#8220;The Official CodeIgniter Community Branch&#8220;. Neste &#8220;comunicado oficial&#8221; da EllisLab, foi informado que o CodeIgniter iria ser organizado em duas &#8220;ramificações&#8221;, uma &#8220;oficial&#8221; e outra mais da própria comunidade. Alguns membros da comunidade CI ficaram alarmados e preocupados com o futuro do [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img width="500" height="150" alt="Codeigniter." src="http://codeigniterbrasil.com/wp-content/uploads/2008/10/codeigniter.gif" title="Codeigniter." class="size-full wp-image-28 ilustra-artigo"></p>
<p>Há algumas semanas, no <a href="http://codeigniter.com/news/">CodeIgniter News</a>, uma notícia chamou a atenção da comunidade: &#8220;<a href="http://codeigniter.com/news/the_official_codeigniter_community_branch/">The Official CodeIgniter Community Branch</a>&#8220;. Neste &#8220;comunicado oficial&#8221; da EllisLab, foi informado que o CodeIgniter iria ser organizado em duas &#8220;ramificações&#8221;, uma &#8220;oficial&#8221; e outra mais da própria comunidade.</p>
<p>Alguns membros da comunidade CI ficaram alarmados e preocupados com o <strong>futuro do CodeIgniter</strong>, alguns chegando a especular que a notícia foi a sentença de morte do framework e outras opiniões de caráter duvidoso&#8230; Mas, na verdade, a proposta é somente uma (segundo os próprios mantenedores do CI): facilitar o desenvolvimento do CodeIgniter, tornando-o mais eficiente e de acordo aos anseios e necessidades da comunidade.</p>
<h2>CodeIgniter Core e CodeIgniter Reactor</h2>
<p>Então, mais recentemente, foram reveladas outras novidades sobre esta &#8220;ramificação&#8221;: a partir de agora, existe o <strong>CodeIgniter Reactor</strong> e <strong>CodeIgniter Core</strong>! Segundo a própria EllisLab, ambos focadas em oferecer um framework simples e poderoso através de acesso fácil, consumo mínimo de recursos e uma documentação de qualidade.</p>
<p>Embora ambas as &#8220;versões&#8221; continuem sendo de responsabilidade e petencentes à <a href="http://ellislab.com/">EllisLab</a>, existem diferenças.</p>
<p>O <strong>CodeIgniter Reactor</strong> será guiada e mantida por 6 membros da comunidade CodeIgniter (eles foram eleitos através de um misto de voluntariado com análise de conhecimentos necessários), conhecidos, a partir de agora, como <strong>Reactor Engineers</strong>. Eles terão acesso e permissão de editar o CodeIgniter Reactor e contribuir livremente com códigos e documentação, tanto de si mesmos, como da comunidade, em geral. Para evitar discrepâncias ou alterações que podem causar erros e/ou instabilidades no framework PHP, os Engenheiros irão debater inclusões/alterações meticulosamente, com base num &#8220;acordo&#8221; sobre a filosofia do CodeIgniter.</p>
<p><strong>CodeIgniter Core</strong> será exclusivamente mantido pela EllisLab e continuará com sua &#8220;tradição&#8221; de lançar versões sem pressa para poder testar exaustivamente os recursos novos ou editados &#8211; não deixando de lado sua &#8220;hiper crítica&#8221; ao incorporar código novo. A intenção é garantir que o CodeIgniter Core seja super estável e dê tranquilidade e segurança a quem o for utilizar, tendo em vista que existem muitos projetos realmente importantes que usam o CI, tais como aplicações web de nível empresarial, desenvolvimento em grande escala de empresas, projetos de instituições governamentais, etc.</p>
<p>Na prática, o que vai acontecer é que o CodeIgniter Reactor, depois de muita discussão entre os membros da comunidade e os Reactor Engineers, irá &#8220;despachar&#8221; as implementações que julgar necessárias para o CodeIgniter Core; será como um &#8220;pré-filtro&#8221;. Então, a &#8220;equipe de elite&#8221; vai julgar quais implementações serão oficialmente incorporadas e, depois de muitos, muitos testes, estas farão parte do Codeigniter Core.</p>
<h2>CodeIgniter UserVoice</h2>
<p>A fim de manter uma certa ordem no caos de pedidos e solicitações que a comunidade faz, alguém teve a ideia de criar um UserVoice para o CodeIgniter Reactor. Basicamente, o <a href="http://uservoice.com/">UserVoice</a> permite as pessoas votarem em solicitações para saber quais os anseios mais &#8220;emergentes&#8221; da comunidade.</p>
<p>Paticipe, você, também, do <a href="http://codeigniter.uservoice.com/forums/40508-codeigniter-reactor">UserVoice do Codeigniter Reactor</a>!</p>
<h2>CodeKindling</h2>
<p>Existe, também, um projeto não-oficial, mas que tem uma proposta muita interessante, que é o <a href="http://codekindling.net/">CodeKindling</a>. O CodeKindling tem a proposta de ter &#8220;recursos coletivos para a comunidade CodeIgniter&#8221;, ou seja, através do site, é possível submeter libraries, helpers, recursos em geral, ideias, feedback ou o que for, através de uma interface única.</p>
<p>O bom que é que você pode assinar uma espécie de newsletter e ser avisado sempre que novos recursos forem submetidos.</p>
<h2>Conclusões sobre CodeIgniter Core e CodeIgniter Reactor</h2>
<p>Muitas pessoas já manifestaram sua opinião (inclusive <a href="http://philsturgeon.co.uk/">Phil Sturgeon</a>, que é um dos Reactor Engineers (!), em seu artigo &#8220;<a href="http://philsturgeon.co.uk/index.php/news/2010/12/ellislab-react-with-codeigniter-reactor">EllisLab react with CodeIgniter Reactor</a>&#8220;), e a minha é o seguinte: a comunidade gostando ou não, é assim que vai ser!</p>
<p>Não adianta ficar discutindo ou esbravejando com uma decisão &#8220;de cima&#8221;, da cúpula do CodeIgniter. Querendo ou não, aquele(s) que tomou(aram) esta decisão o fizeram depois de muito pensar e refletir, pois é assim que o mundo do <em>business</em> funciona. A EllisLab tem vários projetos comerciais (ela é uma empresa, certo?) diretamente ligados ao CodeIgniter, e isso certamente foi levado em consideração.</p>
<p>É quase certo, também, que os membros do CodeIgniter Reactor estão levando bons dólares &#8220;por fora&#8221;, afinal, eles tiveram que ser recrutados para o cargo, certo? Dependendo do seu ponto de vista, isso pode ser algo bom ou ruim&#8230;</p>
<p>O que podemos esperar é que esta &#8220;bifurcação&#8221; traga bons resultados à comunidade e que possamos continuar participando e sugerindo alterações e inserções no CI. Aparentemente é isso, mesmo, que está acontecendo e será reforçado, e isso é algo bom!</p>
<p>Agora é aguardar os resultados e desdobramentos dessa nova &#8220;fase&#8221; do CodeIgniter, sempre com o pensamento de que recursos cada vez melhores e mais fáceis de usar sejam lançados.</p>
<p>O futuro dirá.</p>
<p>PS: Phil Sturgeon fez um <a href="http://philsturgeon.co.uk/documentation/codeigniter/user_guide/toc.html"><em>mirror</em> da documentação oficial do CodeIgniter 2</a>. Segundo o próprio, a versão já está muito estável, inclusive podendo ser usada para projetos oficiais.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=MPZ_zoGS4VI:H0ONrcyP_7A:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=MPZ_zoGS4VI:H0ONrcyP_7A:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=MPZ_zoGS4VI:H0ONrcyP_7A:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=MPZ_zoGS4VI:H0ONrcyP_7A:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/MPZ_zoGS4VI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/noticias/codeigniter-reactor-codeigniter-core-e-mais-novidades-do-mundo-ci/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/noticias/codeigniter-reactor-codeigniter-core-e-mais-novidades-do-mundo-ci/</feedburner:origLink></item>
	</channel>
</rss>

