<?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>Mon, 22 Feb 2010 12:30:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<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>Diferença entre helper, library e plugin no CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/qbNYtci3PcA/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/diferenca-entre-library-helper-plugin-codeigniter/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 12:30:07 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[helper]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=59</guid>
		<description><![CDATA[
Já tivemos a oportunidade de ver a estrutura de diretórios do CodeIgniter, mas o objetivo foi apenas explicar a funcionalidade de cada pasta. Dando prosseguimento aos artigos introdutórios sobre CodeIgniter, vamos conhecer mais um pouco sobre alguns dos tipos de classes que podem ser usados no CI, quais sejam, helpers, libraries e plugins.
Um pouco de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://codeigniterbrasil.com/wp-content/uploads/2010/02/helper-library-plugin-diferenca-codeigniter.jpg"><img class="aligncenter size-full wp-image-66 ilustra-artigo" src="http://codeigniterbrasil.com/wp-content/uploads/2010/02/helper-library-plugin-diferenca-codeigniter.jpg" alt="" width="400" height="208" /></a></p>
<p>Já tivemos a oportunidade de ver a <a href="http://codeigniterbrasil.com/passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/">estrutura de diretórios do CodeIgniter</a>, mas o objetivo foi apenas explicar a funcionalidade de cada pasta. Dando prosseguimento aos artigos introdutórios sobre CodeIgniter, vamos conhecer mais um pouco sobre alguns dos tipos de classes que podem ser usados no CI, quais sejam, <strong>helpers, </strong><strong></strong><strong>libraries</strong> e <strong>plugins</strong>.</p>
<h3>Um pouco de história</h3>
<p>Existem diversos subdiretórios na pasta <em>application</em> e, conforme pode ser visto no livro <a href="http://www.amazon.com/CodeIgniter-Rapid-PHP-Application-Development/dp/1847191746">CodeIgniter for Rapid PHP Application Development</a> (na data de publicação deste artigo, ainda sem tradução para a Língua Portuguesa), nas versões do CodeIgniter anteriores à 1.5, a estrutura de diretórios era diferente. <strong>Rick Ellis</strong>, o carecão-mor, resolveu fazer alguns incrementos no <em>framework</em>, mas, por motivos de retrocompatibilidade, teve que manter algumas coisas como estavam.</p>
<p>Então, tecnicamente falando, não há maiores diferenças entre se valer de um <strong>helper, library</strong> ou <strong>plugin </strong>para implementar determinada funcionalidade no CodeIgniter. O que há são diferenças conceituais que podem, à primeira vista, parecer inúteis, mas, seguindo sua parte conceitual e atentando-se às convenções que a maioria dos usuários de CI fazem, são importantes de serem respeitadas.</p>
<p>Vamos ver as diferenças básicas entre uma <em>helper</em>, <em>library </em>e <em>plugin </em>(o que é algo que suscita bastante dúvida no princípio dos estudos de CI) para saber o momento certo de criar e usar e em qual pasta devemos nos preocupar em alocar os arquivos de desenvolvimento. Em artigos futuros, cada um vai ser abordado com mais detalhes, exemplos e práticas de uso.</p>
<h3>Helper</h3>
<p>Como sugere o próprio nome, <em>helpers </em>são para <strong>ajudar</strong> com as tarefas (não que <em>libraries </em>e <em>plugins </em>não sejam, mas quiseram dar esse nome, então está dado). Cada <em>helper </em>é um conjunto de funções relacionadas a uma determinada &#8220;categoria de tarefas&#8221;  &#8211; por exemplo, um <em>helper </em>nativo no CodeIgniter é o <strong>URL Helper</strong>, então, esse <em>helper </em>provê funções específicas para se trabalhar com URLs.</p>
<p>Helpers não são orientados a objetos (OO), são simplesmente programação procedural simples. Cada função de um <em>helper </em>executa <strong>uma</strong> tarefa específica, sem <strong>depender </strong>e sem <strong>causar dependência</strong> a outras funções do mesmo <em>helper</em>.</p>
<p>Como pôde ser visto em <a href="http://codeigniterbrasil.com/passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/">outra ocasião</a>, é aconselhado que os arquivos de <em>helpers </em>estejam armazenados na pasta <em>/application/helpers</em> (não falando dos<em> </em>nativos, que já ficam em <em>/helpers</em>).</p>
<h3>Library</h3>
<p>Conceitualmente, uma <em>library </em>serve para conter seu próprio código para extender as funcionalidades do CodeIgniter (ou criar funcionalidades específicas para <em>sites/softwares</em>). Usualmente, quando um programador vai fazer sua própria classe, com funcionalidades específicas para o projeto, é uma <em>library </em>que é feita.</p>
<p>Como consta no artigo sobre a <a href="../passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/">estrutura de diretórios do CodeIgniter</a>, por padrão, os arquivos de bilbiotecas criadas ficam em <em>/application/libraries</em> e os nativos em <em>/libraries</em>.</p>
<h3>Plugin</h3>
<p><em>Plugins </em>funcionam quase que da mesma forma que <em>helpers</em>. A principal diferença é que um <em>plugin </em>fornece, geralmente, uma <strong>única</strong> função, enquanto um <em>helper</em>, geralmente, apresenta <strong>várias</strong> funções. Outra diferença é que <em>helpers </em>também são considerados parte do &#8220;sistema principal&#8221;, ao passo que <em>plugins </em>se destinam a serem criados e <strong>compartilhados </strong>pela comunidade CodeIgniter.</p>
<p>Não se assuste caso sua instalação do CodeIgniter não tenha o diretório <em>/application/plugins</em>, isso é normal. Caso você queira se valer de um dos <a href="http://www.google.com.br/search?q=codeigniter+plugins"><em>plugins</em> da comunidade</a> ou criar o seu próprio (para posterior compartilhamento), basta que você crie a subpasta &#8220;plugins&#8221; dentro de &#8220;application&#8221;.</p>
<h3>Diferença prática entre helpers, libraries e plugins</h3>
<p>Como já comentado, não há maiores diferenciações práticas entre um <strong>helper</strong>, uma <strong>library </strong>ou um <strong>plugin</strong>, dada a tamanha flexibilidade e capacidade de adaptação a gostos pessoais que o CodeIgniter apresenta. Com o tempo, vai se pegando &#8220;o jeito&#8221; do <em>framework</em>. e é possível saber/diferenciar onde cada classe, arquivo ou função deve ser criado, extendido ou ampliado.</p>
<p>Em artigos futuros serão abordados <em>helpers</em>, <em>libraries </em>e <em>plugins </em>com mais detalhes (<a href="http://www.codeigniterbrasil.com/feed/">assine o feed do CodeIgniter Brasil</a> para não perder), mas, certamente, é programando e testando bastante que você vai conhecer as melhores práticas e &#8220;manhas&#8221; do CodeIgniter.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=qbNYtci3PcA:BbpNSGxNS5M:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=qbNYtci3PcA:BbpNSGxNS5M:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=qbNYtci3PcA:BbpNSGxNS5M:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=qbNYtci3PcA:BbpNSGxNS5M:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/qbNYtci3PcA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/diferenca-entre-library-helper-plugin-codeigniter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/diferenca-entre-library-helper-plugin-codeigniter/</feedburner:origLink></item>
		<item>
		<title>Controllers no CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/pAIaSp3R2yM/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 13:10:43 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=63</guid>
		<description><![CDATA[
Como pudemos conferir no artigo sobre MVC, Controllers são responsáveis por controlar o fluxo dos programas, são os que contém as regras de negócio, é onde a lógica do aplicativo está. Essa foi a parte teórica sobre controllers. Agora vamos à parte prática, onde será mostrada a estrutura, função e funcionamento de um controller.
Controllers no [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://codeigniterbrasil.com/wp-content/uploads/2010/01/controllers-codeigniter.jpg"><img class="aligncenter size-full wp-image-64 ilustra-artigo" src="http://codeigniterbrasil.com/wp-content/uploads/2010/01/controllers-codeigniter.jpg" alt="" width="350" height="200" /></a></p>
<p>Como pudemos conferir no artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">MVC</a>, <strong>Controllers</strong> são responsáveis por controlar o fluxo dos programas, são os que contém as regras de negócio, é onde a <strong>lógica</strong> do aplicativo está. Essa foi a parte teórica sobre <em>controllers</em>. Agora vamos à parte prática, onde será mostrada a estrutura, função e funcionamento de um <em>controller</em>.</p>
<h3>Controllers no CodeIgniter</h3>
<p><strong>Controllers</strong> no CodeIgniter são simplesmente arquivos com uma classe que é nomeada de forma ser associada a uma URL. Complicado? Lendo o artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/urls-no-codeigniter/">URLs no CodeIgniter</a> você vai ver que não!</p>
<p>Se temos, por exemplo, uma URI como <em>http://www.site.com.br/noticias/</em>, isso significa que a clase <em>Noticias</em>, contida no arquivo <em>noticias.php</em>, entrará em ação. Quando o <strong>nome</strong> de um <em>controller </em>bate com o <strong>primeiro segmento</strong> de uma URL, então esse <em>controller </em>é carregado.</p>
<p>Lembrando da <a href="http://codeigniterbrasil.com/passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/">estrutura de diretórios do CodeIgniter</a>, veremos que os arquivos dos <em>controllers </em>devem ser colocados em <strong>application/controllers</strong> a fim de garantir uma boa organização das pastas do projeto. Há pessoas que optam por armazenar seus <em>controllers </em>em outros locais e há, também, a possibilidade de modularização no CodeIgniter através do uso de algumas bilbiotecas &#8211; mas esses são assuntos para artigos futuros.</p>
<p>Reapitulando o que consta no artigo sobre <a href="../passos-iniciais/mvc-model-view-controller/">MVC</a>, temos as seguintes características básicas de um <em>controller</em>:</p>
<ul>
<li>Define o comportamento da aplicação;</li>
<li>Mapeia ações para atualizar models;</li>
<li>Seleciona views para exibição;</li>
<li>Deve haver um <em>controller </em>para cada &#8220;funcionalidade&#8221;.</li>
</ul>
<h3>Estrutura de um Controller no CodeIgniter</h3>
<p>Assim como todo <em><a href="http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/">framework</a></em>, o CodeIgniter possui suas regras de sintaxe, ou seja, a maneira pela qual os códigos devem ser escritos. A estrutura básica de um <em>controller </em>no CodeIgniter (para fins didáticos, &#8220;Noticias&#8221;) é a seguinte:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p63code8'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p638"><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="p63code8"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Noticias <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> Noticias<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        parent<span style="color: #339933;">::</span><span style="color: #004000;">Controller</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: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Olá, mundo!'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// demais funções</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4>O nome da classe deve iniciar com letra maiúscula</h4>
<p>Perceba como está a estrutura-base do exemplo. Isso é <strong>certo</strong>:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p63code9'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p639"><td class="code" id="p63code9"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Noticias <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Isso é <strong>errado</strong>:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p63code10'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6310"><td class="code" id="p63code10"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> noticias <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h4>Deve haver um construtor</h4>
<p>Basta criar uma função com o mesmo nome da classe e estender a classe <em>Controller</em>, como mostrado no exemplo. Se tivéssemos uma classe <em>Matematica</em>, ficaria:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p63code11'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6311"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p63code11"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Matematica <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> Matematica<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        parent<span style="color: #339933;">::</span><span style="color: #004000;">Controller</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Sempre &#8220;parent::Controller();&#8221; deve estar presente, mas não necessariamente deve ser a única instrução. Se quiser executar algum código no construtor da classe, isso também é permitido.</p>
<h4>O arquivo deve ter o mesmo nome da classe</h4>
<p>Cada classe (<em>controller</em>) deve contar <strong>um e somente um</strong> arquivo para si. Não coloque mais de uma classe em um arquivo de <em>controller</em>, porque isso não vai funcionar. Em nosso <em>controller </em>de exemplo &#8220;Noticias&#8221;, o arquivo que o conteria seria o <em>noticipas.php</em>. O caminho para o arquivo seria<em> application/controllers/noticias.php</em>.</p>
<p>É possível, também, ter subpastas dentro da pasta &#8220;controllers&#8221;, a fim de melhor organizar um projeto. Nesse caso, o primeiro segmento da URL será a pasta e o <strong>segundo segmento</strong> será o <em>controller</em>. Então, se tivéssemos o arquivo <em>application/controllers/produtos/eletronicos.php</em>, o acesso a uma de suas funções &#8211; por exemplo, <em>listar()</em> &#8211; se daria através do endereço &#8220;http://www.site.com.br/produtos/eletronicos/listar/&#8221;.</p>
<h4>A função index() é a primeira a ser executada</h4>
<p>Em nosso exemplo do controller <em>Noticias</em>, vejam que existe uma função <em>index()</em>. Essa é a função que será executada quando <em>http://www.site.com.br/noticias/</em> for acessado. Todas as intruções que estiverem na função <em>index()</em> serão executados.</p>
<h3>Funções em um Controller no CodeIgniter</h3>
<p>Recapitulando o que já foi visto no post sobre <a href="http://codeigniterbrasil.com/passos-iniciais/urls-no-codeigniter/">URLs no CodeIgniter</a>, os parâmetros das funções em um <em>controller</em> também podem ser passadas via URL. Por padrão, o <em>controller</em>, em si, é  o primeiro segmento da URL; o próximo é um função do <em>controller</em>; e os subsequentes, parâmetros dessa função.</p>
<p>Repetindo o exemplo do artigo sobre URLs, vejamos o seguinte <em>controller</em>:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p63code12'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6312"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p63code12"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Matematica <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> soma<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x</span><span style="color: #339933;">,</span> <span style="color: #000088;">$y</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$x</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$y</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Um belo “10″ será mostrado na tela para quem acessar <em>http://www.site.com.br/matematica/soma/5/5</em>.</p>
<h4>Funções privadas em controllers</h4>
<p>Em determinadas situações, você pode querer criar funções que não são acessíveis via URL &#8211; o método &#8220;tradicional&#8221; de acesso a funções no CI. Para fazer isso, você deve criar <strong>funções privadas</strong> (cujo nome é precedido por <em>underscore</em>) da seguinte forma:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p63code13'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6313"><td class="code" id="p63code13"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> _funcaoqualquer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// códigos</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Tentando acessar <em>http://www.site.com.br/noticias/_funcaoqualquer/</em>, <strong>não vai funcionar</strong> (afinal, trata-se de uma <strong>função privada</strong>).</p>
<h3>Definindo um Controller padrão</h3>
<p>É possível definir um <em>controller </em>padrão para seu <em>software</em>, quer dizer, um que será executado quando, na URL, <strong>nenhum outro</strong> for indicado, ou seja, quando a aplicação for acessada, através de seu <strong>endereço principal</strong>. É como definir a &#8220;página inicial&#8221; de um <em>software</em> ou <em>site</em>.</p>
<p>Para especificar qual será esse <em>controller default</em>, acesse o arquivo application/config/routes.php e altere a diretiva $route['default_controller'] com o nome do controller desejado. Por exemplo:</p>

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

<p>Ao acessar o fictício <em>http://www.site.com.br/</em>, as instruções da função <em>index()</em> do controller <em>Noticias</em> serão executadas automaticamente.</p>
<h3>E isso é tudo sobre controllers no CodeIgniter?</h3>
<p>Não, ainda há mais coisas a respeito dos <em>controllers</em> no CodeIgniter. Por exemplo, já que você estende a classe nativa Controller em seus <em>controllers</em>, você não pode nomear suas funções com algum dos <a href="http://codeigniter.com/user_guide/general/reserved_names.html">nomes reservados das funções nativas de controller do CodeIgniter</a>.</p>
<p>E ainda há mais sobre <em>controllers</em>, recursos e técnicas que podem ser feitos para ampliar ainda mais seu poder. Mas, pode ter certeza, essa já é uma boa fonte de informação sobre <strong>controllers</strong> no CodeIgniter. Não é?  ;-)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=pAIaSp3R2yM:N9AhDcd5AHQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=pAIaSp3R2yM:N9AhDcd5AHQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=pAIaSp3R2yM:N9AhDcd5AHQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=pAIaSp3R2yM:N9AhDcd5AHQ:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/pAIaSp3R2yM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/controllers-no-codeigniter/</feedburner:origLink></item>
		<item>
		<title>URLs no CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/0_Ls5GkRycw/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/urls-no-codeigniter/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 18:17:01 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[Configurações]]></category>
		<category><![CDATA[controller]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=60</guid>
		<description><![CDATA[
No artigo sobre MVC foi visto que, no CodeIgniter, os controllers são responsáveis por controlar todo o fluxo do software; a lógica da coisa; as regras de negócio do sistema. Por padrão, as URLs no CodeIgniter são feitas para serem URLs amigáveis (Friendly URLs),quer dizer, são apresentadas em uma estrutura propícia para as páginas do [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-61 ilustra-artigo" src="http://codeigniterbrasil.com/wp-content/uploads/2010/01/url-uri-codeigniter.jpg" alt="" width="350" height="200" /></p>
<p>No artigo sobre <a href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">MVC</a> foi visto que, no CodeIgniter, os <em>controllers</em> são responsáveis por controlar todo o fluxo do <em>software</em>; a lógica da coisa; as <a rel="nofollow" href="http://pt.wikipedia.org/wiki/Regras_de_neg%C3%B3cio">regras de negócio</a> do sistema. Por padrão, as URLs no CodeIgniter são feitas para serem <strong>URLs amigáveis</strong> (<em>Friendly URLs</em>),quer dizer, são apresentadas em uma estrutura propícia para as páginas do <em>site</em>/sistema serem melhor indexadas por mecanismos de busca, tais como o <strong>Google</strong>. Em outras palavras, as URLs no CodeIgniter são <strong>baseadas em segmentos</strong>.</p>
<h3>Estrutura de URL no CodeIgniter</h3>
<p>Vamos tomar por exemplo o seguinte endereço, gerado a partir de um sistema fictício, feito em CodeIgniter:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p60code24'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6024"><td class="code" id="p60code24"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.site.com.br/noticias/artigos/meu_artigo</span></pre></td></tr></table></div>

<p>Como podemos ver, trata-se de um URI normal, que pode ser encontrado em milhares de sites por aí. Então, dentro do CodeIgniter, isso é interpretado da seguinte maneira:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p60code25'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6025"><td class="code" id="p60code25"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.site.com.br/classe/funcao/id</span></pre></td></tr></table></div>

<p>E, dentro dessa estrutura de URL, o significado de cada segmento:</p>
<ol>
<li><strong>classe.</strong> O primeiro segmento, &#8220;noticias&#8221;, representa o controller (classe) &#8220;noticias&#8221;.</li>
<li><strong>funcao.</strong> O segundo segmento, &#8220;artigos&#8221;, é uma função (funcao) que existe no controller &#8220;noticias&#8221;.</li>
<li><strong>id.</strong> O terceiro, &#8220;meu_artigo&#8221;, é o parâmetro (id) da função &#8220;artigos&#8221; do controller &#8220;noticias&#8221;.</li>
</ol>
<p>Quer dizer, existe um controller &#8220;noticias&#8221; que possui uma função &#8220;artigos&#8221; (função esta que recebe um parâmetro, &#8220;id&#8221;, para funcionar):</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p60code26'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6026"><td class="code" id="p60code26"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Noticias <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> artigos<span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// código da função</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Não se preocupe com essa estrutura, ela será melhor detalhada no artigo sobre Controllers.</p>
<p>Vamos supor que precisássemos de uma função com 2 parâmetros. O CodeIgniter entende, também:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p60code27'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6027"><td class="code" id="p60code27"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Matematica <span style="color: #000000; font-weight: bold;">extends</span> Controller
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> soma<span style="color: #009900;">&#40;</span><span style="color: #000088;">$x</span><span style="color: #339933;">,</span> <span style="color: #000088;">$y</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$x</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$y</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Um belo &#8220;10&#8243; será mostrado na tela para quem acessar o URI:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p60code28'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6028"><td class="code" id="p60code28"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.site.com.br/matematica/soma/5/5</span></pre></td></tr></table></div>

<h3>Removendo o segmento &#8220;index.php&#8221;</h3>
<p>Em uma <a href="http://codeigniterbrasil.com/passos-iniciais/instalacao-e-configuracao-inicial-do-codeigniter/">instalação do CodeIgniter</a> padrão, o segmento &#8220;index.php&#8221; será sempre mostrado (isso devido a &#8220;questões internas&#8221;, digamos assim). Mas, caso se queira, é possível retirar do URL. Para tal, temos que nos valer de algumas poucas instruções em um arquivo <a href="http://www.google.com.br/search?q=.htaccess">.htaccess</a>:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p60code29'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6029"><td class="code" id="p60code29"><pre class="php" style="font-family:monospace;">RewriteEngine on
RewriteCond $<span style="color: #cc66cc;">1</span> <span style="color: #339933;">!</span>^<span style="color: #009900;">&#40;</span>index\<span style="color: #339933;">.</span>php<span style="color: #339933;">|</span>images<span style="color: #339933;">|</span>robots\<span style="color: #339933;">.</span>txt<span style="color: #009900;">&#41;</span>
RewriteRule ^<span style="color: #009900;">&#40;</span><span style="color: #339933;">.*</span><span style="color: #009900;">&#41;</span>$ <span style="color: #339933;">/</span>index<span style="color: #339933;">.</span>php<span style="color: #339933;">/</span>$<span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#91;</span>L<span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>O código mostrado faz com que qualquer solicitação HTTP que não sejam para &#8220;index.php&#8221;, imagens e &#8220;robots.txt&#8221; é tratada como uma solicitação para o arquivo <em>index.php</em> (mesmo &#8220;index.php&#8221; não aparecendo na URI).</p>
<p>Em função de configurações de servidor, algumas vezes o .htaccess mostrado pode não funcionar. Caso isso aconteça com você, dê uma olhada nesse artigo sobre <a href="http://www.codeigniter-jquery.com/codeigniter/codeigniter-htaccess/">problemas de htaccess no CodeIgniter</a>.</p>
<h3>Adicionando sufixo ao URL</h3>
<p>É possível brincar um pouco mais com as <strong>URIs no CodeIgniter</strong>. Um dos recursos interessantes é acrescentar um sufixo no URI, &#8220;dando a impressão&#8221; de que se está acessando um arquivo.</p>
<p>Veja no arquivo de configuração do CodeIgniter (/system/application/config/config.php) a seção &#8220;URL suffix&#8221;. É lá que você vai alterar a variável $config['url_suffix'] e inserir o que você quer que seja seu sufixo. Por exemplo, você pode ter URIs como:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p60code30'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6030"><td class="code" id="p60code30"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.site.com.br/noticias/artigos/meu_artigo.html</span></pre></td></tr></table></div>

<h3>Trabalhando com Query Strings</h3>
<p>Como foi visto, por padrão, <strong>o CodeIgniter apresenta uma estrutura de URLs amigáveis</strong>. Mas o <em>framework</em> possui tanta flexibilidade e opções de configuração e uso que é possível trabalhar com <a href="http://en.wikipedia.org/wiki/Query_string">query strings</a>. Isso, mesmo! Se você quer reviver a &#8220;tradição&#8221; na <em>internet</em> e fazer com que seu sistema pareça ter sido feito há 10 anos atrás, é possível apresentar <em>query strings</em>!</p>
<p>Para isso, você deve ir ao arquivo de configuração citado (<em>config.php</em>) e, na seção &#8220;Enable Query Strings&#8221;, alterar a diretiva <em>$config['enable_query_strings']</em> para &#8220;TRUE&#8221;, ficando dessa maneira:</p>

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

<p>Percebam as 2 outras diretivas. É possível configurar os &#8220;<em>triggers</em>&#8221; que representam, respectivamente, o <em>controller</em> e a função que se deseja usar. Dando um exemplo de como ficaria um URI usando as <em>query strings</em> (e os <em>triggers default</em> do CodeIgniter), teríamos algo como:</p>

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

<p>Quer dizer, será executado o código da função &#8220;mostrar&#8221; do controller &#8220;estatisticas&#8221;. Nostálgico&#8230;</p>
<div class="alert">Ao optar pelo uso de <em>query strings</em>, você está abrindo mão de diversas vantagens nativas do CodeIgniter, não podendo utilizar alguns helpers importantes de URL.</div>
<h3>Conclusão sobre URLs no CodeIgniter</h3>
<p>É gritante a facilidade com a qual se trabalha com <strong>URLs no CodeIgniter</strong>! Através de uma estrutura baseada em segmentos, os endereços gerados são fáceis para uma melhor indexação do <em>site</em>/sistema por mecanismos de busca, ao mesmo tempo em que oferece uma capacidade incrível para se trabalhar com as funções (nativas e criadas) do <em>framework</em>.</p>
<p>A flexibilidade é tamanha que é até possível mexer com <em>query strings</em> &#8211; mesmo que, para isso, tenhamos que abrir mão de alguns recursos nativos muito úteis.</p>
<p>Com certeza o CodeIgniter, provando mais uma vez que é o <strong>melhor <em>framework </em>PHP</strong>, mostrou que um dos pilares de seu poder de funcionamento é sua estrutura de URLs!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=0_Ls5GkRycw:BBNAGscgbkI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=0_Ls5GkRycw:BBNAGscgbkI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=0_Ls5GkRycw:BBNAGscgbkI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=0_Ls5GkRycw:BBNAGscgbkI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/0_Ls5GkRycw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/urls-no-codeigniter/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/urls-no-codeigniter/</feedburner:origLink></item>
		<item>
		<title>Estrutura de diretórios: organização de pastas do CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/mW32nbSuAkA/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 19:00:51 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[diretórios]]></category>
		<category><![CDATA[helpers]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=52</guid>
		<description><![CDATA[Não dá pra trabalhar com o CodeIgniter sem conhecer sua estrutura de diretórios. É conhecendo como é a organização das pastas no CodeIgniter e sabendo sua função dentro do &#8220;todo&#8221; do framework que é possível mexer no CI com eficiência e consciência &#8211; também é importantíssimo conhecer o Fluxograma de Dados do CodeIgniter (se ainda [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_56" class="wp-caption aligncenter" style="width: 277px"><img class="size-full wp-image-56" title="Estrutura de diretórios do CodeIgniter" src="http://codeigniterbrasil.com/wp-content/uploads/2009/11/estrutura-de-diretorios-codeigniter-1.7.2.gif" alt="Estrutura de diretórios do CodeIgniter" width="267" height="372" /><p class="wp-caption-text">Estrutura de diretórios do CodeIgniter</p></div>
<p>Não dá pra trabalhar com o <strong>CodeIgniter</strong> sem conhecer sua <strong>estrutura de diretórios</strong>. É conhecendo como é a <strong>organização das pastas</strong> no CodeIgniter e sabendo sua função dentro do &#8220;todo&#8221; do <em>framework</em> que é possível mexer no CI com <strong>eficiência</strong> e <strong>consciência</strong> &#8211; também é importantíssimo conhecer o <a title="Fluxograma de Dados do CodeIgniter: como tudo funciona" href="http://codeigniterbrasil.com/passos-iniciais/fluxograma-de-dados-do-codeigniter-como-tudo-funciona/">Fluxograma de Dados do CodeIgniter</a> (se ainda não leu o artigo, leia antes de continuar).</p>
<p>Com um pouco mais de experiência é possível alterar a <strong>estrutura de diretórios do CodeIgniter</strong>, mas, para fins didáticos, será mostrada no tutorial a estrutura padrão de pastas do CI &#8211; dentro do momento histórico da atual versão do <em>framework</em>, <strong>CodeIgniter 1.7.2</strong>.</p>
<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>
<h3>Visão geral da estrutura de pastas do CodeIgniter</h3>
<p>Como pode ser visto na imagem da estrutura de pastas acima, na raiz da estrutura do CodeIgniter existem 2 diretórios e 2 arquivos.</p>
<h4>Diretórios</h4>
<p>Os 2 diretórios existentes na raiz da estrutura do CodeIgniter são:</p>
<ul>
<li><strong>system.</strong> Local onde os códigos das aplicações/<em>softwares</em> desenvolvidos ficam.</li>
<li><strong>user_guide.</strong> Contém o Guia do Usuário (<em>User Guide</em>) do CodeIgniter (cópia da documentação <em>online</em>).</li>
</ul>
<h4>Arquivos</h4>
<p>Juntamente com os diretórios supracitados, na raiz do esquema de diretórios do CodeIgniter existem 2 arquivos:</p>
<ul>
<li><strong>index.php.</strong> Primordial para o funcionamento do CI, contém informações para se alterar o nível de <a href="http://br.php.net/manual/pt_BR/errorfunc.configuration.php#ini.error-reporting">error reporting</a> que se vai trabalhar; opcionalmente, também é possível alterar os nomes padrão da pasta &#8220;system&#8221; e &#8220;application&#8221; (mais a respeito: <a title="Instalação e configuração inicial do CodeIgniter" href="http://codeigniterbrasil.com/passos-iniciais/instalacao-e-configuracao-inicial-do-codeigniter/">Instalação e configuração inicial do CodeIgniter</a>).</li>
<li><strong>licente.txt.</strong> É o arquivo com a licença do CI que, como já foi tratado no artigo sobre <a title="CodeIgniter: Requisitos de Servidor e Licença de Uso" href="http://codeigniterbrasil.com/diversos/codeigniter-requisitos-de-servidor-e-licenca-de-uso/">requisitos de servidor e licença de uso</a>, deve constar em todo <em>software</em>/aplicativo feito em CodeIgniter.</li>
</ul>
<h3>system</h3>
<p>Na pasta <strong>system</strong> toda a &#8220;ação&#8221; do CI acontece. Para organizar a estrutura presente, há subpastas para segmentar e organizar os arquivos e fluxo de trabalho.</p>
<ul>
<li><strong>application.</strong> Pasta onde os arquivos do aplicativo desenvolvido ficam. Praticamente toda a codificação em CI fica nesta pasta, que abriga seus <a title="MVC (Model – View – Controller)" href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">models, views, controllers</a> e outros que ainda serão tratados no <em>blog</em>.</li>
<li><strong>cache.</strong> No CodeIgniter existem maneiras de trabalhar com <em>cache</em> para servir aplicativos mais rápidos e robustos para quem os utilizam. É nesta pasta que arquivos condizentes ao <em>cache</em> feito são armazenados.</li>
<li><strong>codeigniter.</strong> Os arquivos de <em>core</em> ficam aqui. É nesta pasta que está o &#8220;coração&#8221; do CodeIgniter. Raramente é preciso mexer em algo nesta pasta, já que todo o desenvolvimento do <em>software</em> se dá na pasta &#8220;application&#8221;.</li>
<li><strong>database.</strong> Contém os <em>core files</em> (<em>drivers</em> e outras coisas) para trabalhar com bancos de dados. Assim como a pasta &#8220;codeigniter&#8221;, raramente será preciso mexer nela.</li>
<li><strong>fonts.</strong> Basicamente, esta pasta é para armazenar as fontes que podem ser usadas pela biblioteca de manipulação de imagens (que também será vista em outro momento aqui no <a href="http://codeigniterbrasil.com">CodeIgniter Brasil</a>).</li>
<li><strong>helpers.</strong> Pasta que contém os <em>helpers</em> nativos do Code Igniter (para mexer com <em>arrays</em>, <em>cookies</em>, diretórios, e-mails, formulários e muitos outros).</li>
<li><strong>language.</strong> Contém arquivos de idioma (que são usados principalmente para mensagens das <em>libraries</em> e <em>helpers</em>).</li>
<li><strong>libraries.</strong> Pasta de armazenagem das <em>libraries</em> (bibliotecas) padrão do CI para códigos envolvendo e-mails, calendários, <em>upload</em> de arquivos e mais.</li>
<li><strong>logs.</strong> Como sugere o nome, esta pasta armazena todos os<em> logs</em> gerados pelo CodeIgniter.</li>
<li><strong>plugins.</strong> Contém os <em>plugins default</em> do CodeIgniter. Veremos com mais detalhes futuramente, mas a diferença básica entre <em>helpers</em> e <em>plugins</em> é que os <em>plugins</em> possuem somente 1 função (e geralmente são feitos com intenção de serem compartilhados com a comunidade CI).</li>
<li><strong>scaffolding.</strong> Contém os arquivos necessários para se trabalhar com <em>scaffolding</em> no CodeIgniter. Se ainda não sabe o que é isso, não se preocupe, ainda vamos abordar o <em>scaffolding</em> (e, temos certeza, você vai se surpreender).</li>
</ul>
<h3>system/application</h3>
<p>Sem dúvidas, a pasta<strong> system/application</strong> é a mais importante para o desenvolvimento dos aplicativos e é a que mais vai exigir sua atenção/codificação. Já que a maior parte do seu trabalho vai ser aqui, é importante conhecer bem a estrutura de subdiretórios da pasta &#8220;application&#8221;:</p>
<ul>
<li><strong>config.</strong> Contém diversos (e importantes) arquivos relacionados a configurações de seu CI. São arquivos de configuração de <em>database</em>, variáveis sobre URL, quais <em>libraries</em> e <em>helpers</em> serão carregados automaticamente e muitas outras coisas.</li>
<li><strong>controllers.</strong> Armazena os <em>controllers</em> que você cria para o seu <em>software</em>.</li>
<li><strong>errors.</strong> Vem com os templates de páginas de erros do CodeIgniter (erros genéricos, 404, conexão ao banco de dados, etc). É conveniente que tudo isso seja alterado para que os erros do aplicativo fiquem personalizados e consonantes com a finalidade deste.</li>
<li><strong>helpers.</strong> Para armazenar todos os <em>helpers</em> que você venha a criar/aprimorar.</li>
<li><strong>hooks.</strong> Para colocar os <em>hooks</em> que você cria. Em artigos futuros será mostrado que <em>hooks</em> são a maneira mais rápida e segura de você extender o <em>core</em> do CodeIgniter (geralmente feito por usuários avançados).</li>
<li><strong>language.</strong> Para aplicativos multi-idioma, esta pasta é bem usada por armazenar as mensagens nas diferentes escritas.</li>
<li><strong>libraries.</strong> Aqui ficam as<em> libraries</em> personalizadas, com funcionalidades para o programa a ser criado. Perceba que há diferença entre as pastas <strong>system/libraries</strong> e <strong>system/application/libraries</strong>.</li>
<li><strong>models.</strong> Armazena os <em>models</em> que você cria para seu aplicativo.</li>
<li><strong>views.</strong> Armazena os <em>views</em> que você cria para seu programa.</li>
</ul>
<div class="alert">Todos os seus projetos terão imagens, folhas de estilo, javascript e outros arquivos necessários. Evidentemente será preciso pastas para organizar tudo isso. Existe uma técnica que preconiza que a melhor maneira para organizar isso é fazer pastas na raiz da instalação do CodeIgniter &#8211; ou seja, no mesmo nível hierárquico da pasta <strong>system</strong>. Mas, para se fazer isso, é preciso utilizar um <a href="http://en.wikipedia.org/wiki/Htaccess">.htaccess</a> com algumas poucas linhas para que o CodeIgniter reconheça as novas pastas:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p52code34'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p5234"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p52code34"><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>$ <span style="color: #339933;">/</span>index<span style="color: #339933;">.</span>php<span style="color: #339933;">/</span>$<span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#91;</span>L<span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>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>
<h3>O importante é a função de cada pasta</h3>
<p>Principalmente quando se está começando, é bastante comum ficar em dúvida sobre a função de cada diretório e ter receio de criar arquivos no lugar errado. Estudando a estrutura de pastas do CodeIgniter, certamente esse não será um problema que irá travar seu processo de desenvolvimento.</p>
<p>O CodeIgniter foi projetado para manter seguros seus arquivos de <em>core</em> e é por uma razão que existe uma pasta específica para você criar os arquivos de seu <em>software</em>. <strong>Você deve concentrar seus arquivos em system/application</strong>, criando arquivos nos diretórios adequados &#8211; conforme foi abordado neste artigo &#8211; e somente criar/alterar arquivos de outras pastas caso você saiba exatamente o que está fazendo (e tenha um bom motivo pra isso).</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 1502px; width: 1px; height: 1px;">config folder  contains several important files that control your configuration<br />
options. There are files that manage your database setup and other variables that CodeIgniter<br />
needs to know about (such as the base URL, which libraries and helpers to autoload, etc.)</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=mW32nbSuAkA:OGV2GOaLBrw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=mW32nbSuAkA:OGV2GOaLBrw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=mW32nbSuAkA:OGV2GOaLBrw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=mW32nbSuAkA:OGV2GOaLBrw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/mW32nbSuAkA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/estrutura-diretorios-organizacao-pastas-codeigniter/</feedburner:origLink></item>
		<item>
		<title>Instalação e configuração inicial do CodeIgniter</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/o-b3bVeKpmM/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/instalacao-e-configuracao-inicial-do-codeigniter/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 13:30:54 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[Configurações]]></category>
		<category><![CDATA[diretórios]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=53</guid>
		<description><![CDATA[Depois de uma boa carga teórica (mas não pensem que terminou), vamos começar com um pouco de prática e aprender como instalar o CodeIgniter. A instalação do CI, como já comentado no artigo CodeIgniter: Requisitos de Servidor e Licença de Uso, é bem simples.
Baixando o CodeIgniter
Como já deve ser do conhecimento de quem está acompanhando [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de uma boa carga teórica (mas não pensem que terminou), vamos começar com um pouco de prática e aprender <strong>como instalar o CodeIgniter</strong>. A instalação do <strong>CI</strong>, como já comentado no artigo <a href="http://codeigniterbrasil.com/diversos/codeigniter-requisitos-de-servidor-e-licenca-de-uso/">CodeIgniter: Requisitos de Servidor e Licença de Uso</a>, é bem simples.</p>
<h3>Baixando o CodeIgniter</h3>
<p>Como já deve ser do conhecimento de quem está acompanhando o <em>blog</em> (se você ainda não está, <a href="http://www.codeigniterbrasil.com/feed/">assine o feed do CodeIgniter Brasil</a>), o CodeIgniter, como bom <strong>framework PHP</strong> que é, não necessita ser instalado da forma &#8220;tradicional&#8221;, como se instala um programa <em>desktop</em>, por exemplo. Sua instalação consiste, basicamente, em extrair os arquivos que compõem o <em>framework </em>em algum servidor <em>web </em>(pode ser local, mesmo), configurar um banco de dados e começar a brincadeira.</p>
<p>No <a href="http://codeigniter.com/"><em>site</em> oficial do CodeIgniter</a> podemos encontrar o <em>link </em>para fazer o <a href="http://codeigniter.com/download.php"><em>download</em> da última versão do CodeIgniter</a>. Não precisa se preocupar com o <em>link </em>porque sempre que uma nova versão estável é disponibilizada, ela automaticamente fica acessível através do endereço &#8220;http://codeigniter.com/download.php&#8221;. Bem prático!</p>
<p>Ah, e não se esqueça de já reservar um banco de dados especialmente para você trabalhar com o CodeIgniter! Já, já, você vai ver que, só para começar, é preciso configurar as informações de acesso ao BD.</p>
<h3>Instalação  do CodeIgniter</h3>
<p>Em alguns momentos para a <strong>instalação básica do CodeIgniter</strong> será preciso alterar algumas variáveis em arquivos específicos. Apesar do tamanho dos arquivos e relativa complexidade, não é preciso se preocupar. Além de os <em>core files</em> do CodeIgniter serem muito bem comentados, ainda abordaremos no <a href="http://codeigniterbrasil.com/">CodeIgniter Brasil</a> muito sobre os arquivos de configuração. Portanto, relaxe!  ;-)</p>
<p>Para <strong>instalar o CodeIgniter</strong>, basta seguir os seguintes passos:</p>
<ul>
<li>Descompacte a estrutura de diretórios presente no arquivo zipado que você baixou;</li>
<li>Faça <em>upload</em> de toda a estrutura para o servidor que vai trabalhar (se for trabalhar com <em>localhost</em>, basta mover, claro);</li>
<li>Abra o arquivo <strong>application/config/config.php</strong> com seu editor de códigos e especifique qual vai ser sua URL base (alterando o valor de <strong>$config['base_url']</strong> com o que vai ser sua &#8220;base&#8221; de trabalho com o CI);</li>
<li>Para a configuração do banco de dados, abra <strong>application/config/database.php</strong> e altere as variáveis com suas informações de conexão &#8211; é bem simples e intuitivo; se você fez uma conexão em PHP puro alguma vez na sua vida, nenhuma novidade.</li>
</ul>
<p>E é isso! A essa altura <strong>seu CodeIgniter já está instalado</strong>, basicamente configurado e pronto para o uso!</p>
<h3>Atualizando o CodeIgniter</h3>
<p>Para saber qual a versão mais atual do CodeIgniter, basta checar o <a href="http://codeigniter.com/">site oficial do CodeIgniter</a>. Se você <strong>já mexe com CodeIgniter </strong>usando uma versão antiga e quer atualizar, não se preocupe: é possível manter a integridade de seu aplicativo e atualizar de forma rápida e simples o core do <em>framework</em>.</p>
<p>Há uma página com o histórico, especificações e  intruções de atualização das várias versões do CI. Geralmente a atualização se limita a substituir algumas pastas e realizar alterações leves em alguns poucos arquivos. Então, já sabe: <strong>sempre que uma nova versão do CodeIgniter for liberada</strong>, não se esqueça de atualizar suas aplicações seguindo as instruções de &#8220;<a href="http://codeigniter.com/user_guide/installation/upgrading.html">Upgrading From a Previous Version</a>&#8220;.</p>
<h3>Dica de segurança</h3>
<p>Se você desejar aumentar a segurança de sua instalação, é possível &#8220;camuflar&#8221; a localização dos arquivos de seu CI renomeando a pasta <strong>system</strong> para algo de sua preferência. Se optar por isso &#8211; o que, geralmente, é uma boa pedida de segurança &#8211; você deve abrir o arquivo <strong>index.php</strong> (localizado na raiz do CodeIgniter) e alterar a variável <strong>$system_folder</strong> com o nome que você escolheu.</p>
<p>Ainda comentaremos bastante sobre a estrutura do CodeIgniter, configurações, diretivas e várias outras coisas. Por enquanto, é isso, mas <a href="http://codeigniterbrasil.com/feed/">fique ligado no CodeIgniter Brasil</a> para acompanhar as novidades!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=o-b3bVeKpmM:a2PgjiwwjBI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=o-b3bVeKpmM:a2PgjiwwjBI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=o-b3bVeKpmM:a2PgjiwwjBI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=o-b3bVeKpmM:a2PgjiwwjBI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/o-b3bVeKpmM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/instalacao-e-configuracao-inicial-do-codeigniter/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/instalacao-e-configuracao-inicial-do-codeigniter/</feedburner:origLink></item>
		<item>
		<title>Fluxograma de Dados do CodeIgniter: como tudo funciona</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/uKHBY7tFr3w/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/fluxograma-de-dados-do-codeigniter-como-tudo-funciona/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 18:54:27 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=48</guid>
		<description><![CDATA[Agora chegamos a um ponto que estamos quase &#8220;metendo a mão na massa&#8221;. Continuando com as postagens &#8220;pense primeiro, escreva depois&#8221;, apresentamos o Fluxograma (Flow Chart) de Dados do CodeIgniter.
É muito, muito importante, mesmo, entender como é o fluxo de dados dentro de um software para se poder aplicar os conhecimentos em cima. Entender por [...]]]></description>
			<content:encoded><![CDATA[<p>Agora chegamos a um ponto que estamos quase &#8220;metendo a mão na massa&#8221;. Continuando com as postagens &#8220;pense primeiro, escreva depois&#8221;, apresentamos o <strong>Fluxograma (Flow Chart) de Dados do CodeIgniter</strong>.</p>
<p>É muito, muito importante, mesmo, entender como é o <strong>fluxo de dados</strong> dentro de um <em>software</em> para se poder aplicar os conhecimentos em cima. Entender por onde os dados &#8220;passam&#8221; no <strong>CodeIgniter</strong> é essencial! Sem isso o máximo que conseguiríamos e realizar algumas funções e códigos mecanicamente, sem entender o mínimo do que realmente está se passando no <em>background</em>.</p>
<p>Bem, esse é o fluxograma:</p>
<div id="attachment_49" class="wp-caption aligncenter" style="width: 310px"><a title="CodeIgniter - Fluxograma de Dados" rel="lightbox" href="http://codeigniterbrasil.com/wp-content/uploads/2009/05/codeigniter-fluxograma-dados.gif"><img class="size-medium wp-image-49" src="http://codeigniterbrasil.com/wp-content/uploads/2009/05/codeigniter-fluxograma-dados-300x88.gif" alt="CodeIgniter - Fluxograma de Dados" width="300" height="88" /></a><p class="wp-caption-text">Fluxograma de Dados do CodeIgniter (clique para ampliar)</p></div>
<p>Olhando o fluxograma do CodeIgniter, num primeiro momento pode parecer um pouco estranho ou confuso. Mas, mesmo para os que ainda não estão habituados a frameworks e terminologias como &#8220;Libraries&#8221; e &#8220;Helpers&#8221; (e que ainda não tenhamos explicado sobre estes), basta &#8220;seguir as setinhas&#8221; para entender como a coisa toda funciona!  :-)</p>
<h3>&#8220;Seguindo as setinhas&#8221;</h3>
<p>Então, vamos ao acompanhamento de um fluxo básico, numa aplicação &#8220;normal&#8221; no CodeIgniter:</p>
<ol>
<li>O <strong>index.php</strong> serve como &#8220;controlador principal&#8221;, inicializando os recursos necessários para executar o CodeIgniter;</li>
<li>O &#8220;roteador&#8221; (<strong>Routing</strong>) examina o pedido HTTP para determinar o que deve ser feito;</li>
<li>Se existe algo em <em>cache</em>, isso é enviado diretamente ao <em>browser</em>, &#8220;contornando&#8221; o sistema normal execução;</li>
<li>Antes de o <strong>Controller</strong> da aplicação ser carregado, a requisição HTTP e qualquer dado submetido pelo usuário são filtrados por motivo de segurança;</li>
<li>O <strong>Controller</strong> carrega o <strong>Model</strong>, <strong>Libraries</strong>, <strong>Plugins</strong>, <strong>Helpers</strong> e quaisquer outros recursos necessários para a requisição;</li>
<li>O(s) <strong>View</strong>(s) é(são) finalizado(s) e enviado(s) para ser(em) renderizado(s) pelo navegador &#8211; se o <em>cache</em> estiver ativado, o <strong>View</strong> é  &#8220;cacheado&#8221; primeiro, de forma que possa ser apresentado em pedidos subsequentes.</li>
</ol>
<p>Como já citado, não é preciso se preocupar tanto (neste momento) com determinadas nomenclaturas desconhecidas &#8211; e lembre-se das explicações sobre <a title="Mais sobre o padrão MVC." href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">MVC (Model, View, Controller)</a>. Basta saber que é assim o funcionando &#8220;normal&#8221; do <strong>CodeIgniter</strong> para, em momentos futuros, saber com mais facilidade/tranquilidade onde &#8220;intervir&#8221; para conseguir o(s) resultado(s) que se prentende.</p>
<p>Bem tranquilo&#8230; Por enquanto!  ;-)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=uKHBY7tFr3w:uG1Z-XDuaVY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=uKHBY7tFr3w:uG1Z-XDuaVY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=uKHBY7tFr3w:uG1Z-XDuaVY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=uKHBY7tFr3w:uG1Z-XDuaVY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/uKHBY7tFr3w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/fluxograma-de-dados-do-codeigniter-como-tudo-funciona/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/fluxograma-de-dados-do-codeigniter-como-tudo-funciona/</feedburner:origLink></item>
		<item>
		<title>CodeIgniter: Requisitos de Servidor e Licença de Uso</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/hXfythJwIlc/</link>
		<comments>http://codeigniterbrasil.com/diversos/codeigniter-requisitos-de-servidor-e-licenca-de-uso/#comments</comments>
		<pubDate>Wed, 20 May 2009 15:00:09 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Diversos]]></category>
		<category><![CDATA[código-fonte]]></category>
		<category><![CDATA[documentação]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=46</guid>
		<description><![CDATA[Até agora estávamos em uma &#8220;introdução geral&#8221;, falando genericamente sobre o que são framewoks, um pouco sobre padrões de projeto, o padrão MVC e uma palhinha sobre o próprio CodeIgniter, mostrando que ele é um framework PHP ágil, robusto e de alta performance e mostramos 10 razões de porque CodeIgniter arrasa!
Bem, chegou a hora de [...]]]></description>
			<content:encoded><![CDATA[<p>Até agora estávamos em uma &#8220;introdução geral&#8221;, falando genericamente sobre o que são <em><a title="Mais sobre frameworks." href="http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/">framewoks</a></em>, um pouco sobre <a title="Mais informações sobre os padrões de projeto." href="http://codeigniterbrasil.com/passos-iniciais/padroes-de-projeto-ou-design-patterns-o-que-sao-para-que-servem-e-qual-sua-implicacao-de-uso/">padrões de projeto</a>, o <a title="Mais sobre Mode, View, Controller, o popular MVC." href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">padrão MVC</a> e uma palhinha sobre o próprio <strong>CodeIgniter</strong>, mostrando que ele é um <a title="Mais informações sobre as características e funcionalidades do CodeIgniter." href="http://codeigniterbrasil.com/passos-iniciais/codeigniter-framework-php-agil-robusto-e-de-alta-performance/"><em>framework</em> PHP ágil, robusto e de alta performance</a> e mostramos <a title="Conheça as 10 razões!" href="http://codeigniterbrasil.com/diversos/10-razoes-de-porque-codeigniter-arrasa/">10 razões de porque CodeIgniter arrasa</a>!</p>
<p>Bem, chegou a hora de começar a abordar os assuntos referentes ao <strong>CodeIgniter, propriamente dito</strong>, já que a &#8220;base teórica&#8221; já foi dada e vocês, queridos leitores, certamente já procuraram estudar e buscar mais informações sobre tudo o que foi dito até agora, não é?</p>
<h3>Requisitos de Servidor para rodar o CodeIgniter</h3>
<p>Como já estamos falando há algum tempo, o CodeIgniter consegue alinhar boa performance, poderosos recursos, simplicidade e leveza, ao mesmo tempo! Para se ter ideia, o arquivo compactado do <em>framework</em> tem menos de 900KB e, quando está em uso, seus arquivos ocupam menos de 3MB no servidor (na versão mais atual na data de publicação deste artigo).</p>
<p>CodeIgniter é um <em>framework</em> PHP e, como era de se esperar, sua &#8220;instalação&#8221; consiste em descompactar seus arquivos no servidor, alterar pouquíssimas linhas de código para configurações preliminares e começar a usar! Para rodar o CodeIgniter, o servidor precisa de:</p>
<ul>
<li><strong>PHP 4.3.2 ou superior.</strong> Sim, CodeIgniter é escrito para ser compatível com PHP4! Os próprios desenvolvedores afirmam que teria sido muito mais fácil escrever o <em>framework</em> utilizando os recursos do PHP5; entretanto, eles optaram por escrever em PHP4 para, dentre outros motivos, não &#8220;alienar&#8221; público em potencial de programadores. Mas, calma! O CodeIgniter irá ser rescrito totalmente em PHP 5 &#8211; quando a equipe julgar conveniente.</li>
<li><strong>Banco de Dados.</strong> Na verdade ter um banco de dados não é obrigatório, mas se for para desenvolver algo que não use banco de dados, então nem precisa usar CodeIgniter&#8230; Atualmente há suporte para <a title="Mais sobre MySQL, na Wikipédia." href="http://pt.wikipedia.org/wiki/Mysql">MySQL</a> (4.1+), <a title="Mais informações sobre MySQLi (em inglês)." href="http://en.wikipedia.org/wiki/MySQLi">MySQLi</a>, <a title="Mais sobre MS SQL, na Wikipédia." href="http://pt.wikipedia.org/wiki/Microsoft_SQL_Server">MS SQL</a>, <a title="Mais sobre PostgreSQL, na Wikipédia." href="http://pt.wikipedia.org/wiki/Postgres">PostgreSQL</a>, <a title="Mais sobre o SGBD Oracle, na Wikipédia." href="http://pt.wikipedia.org/wiki/Oracle">Oracle</a>, <a title="Informações sobre SQLite, na Wikipédia." href="http://pt.wikipedia.org/wiki/Sqlite">SQLite</a> e  <a title="Mais informações sobre ODBC, na Wikipédia." href="http://pt.wikipedia.org/wiki/Odbc">ODBC</a>. E, como veremos em artigos futuros, alternar o uso entre estes é facinho, facinho!  ;-)</li>
</ul>
<h3>Licença de Uso</h3>
<p>Como qualquer software, o Code Igniter possui uma <strong>licença de uso</strong>. Licença esta que é um acordo legal entre quem usa o CodeIgniter e a <a title="Página inicial da EllisLab Inc." href="http://ellislab.com/">EllisLab Inc</a>, empresa mantenedora do <em>framework</em>. É permitido <strong>usar</strong>, <strong>copiar</strong>, <strong>modificar</strong> e <strong>distribuir</strong> o CodeIgniter e sua documentação, com ou sem modificações, para qualquer finalidade, <strong>desde que</strong> sejam cumpridas as seguintes condições:</p>
<ol>
<li>Uma cópia da licença deve ser incluída com a distribuição;</li>
<li>As redistribuições do código fonte devem reter a observação de <em>copyright</em> em todos seus arquivos;</li>
<li>As redistribuições na forma binária devem reproduzir a observação de <em>copyright</em> na documentação e/ou outros materiais fornecidos com a distribuição;</li>
<li>Os arquivos que foram modificados devem conter avisos indicando a natureza da alteração e os nomes de quem os alterou;</li>
<li>Produtos derivados devem incluir um aviso de que eles são derivados de CodeIgniter na sua documentação e/ou outros materiais fornecidos com a distribuição;</li>
<li>Produtos derivados não pode ser chamado de &#8220;CodeIgniter&#8221;, nem pode &#8220;CodeIgniter&#8221; aparecem em seu nome, sem autorização prévia por escrito da <a title="Página oficial da EllisLab Inc." href="http://ellislab.com/">EllisLab Inc</a>.</li>
</ol>
<p>Essas são as condições no momento da publicação deste artigo, pode ser que haja alterações. Outras 3 coisas importantíssimas são:</p>
<ol>
<li><strong>Indenização.</strong> Ao usar o CodeIgniter, Você concorda em indenizar e defender os autores do <em>software</em> e eventuais contribuições para quaisquer efeitos diretos, indiretos, incidentais ou consequentes reclamações de terceiros, ações ou fatos, bem como de quaisquer despesas, responsabilidades, danos, acordos ou honorários decorrentes de seu uso ou mau uso do <em>software</em> ou uma violação de quaisquer termos da licença.</li>
<li><strong>Isenção de Garantia.</strong> O <em>software</em> é fornecido &#8220;como está&#8221;, sem qualquer tipo de garantia, expressa ou implícita, incluindo, mas não se limitando a garantias de qualidade, desempenho, não violação, comerciabilidade ou adequação a uma finalidade específica.</li>
<li><strong>Limitações de responsabilidade.</strong> Você assume todos os riscos associados com a instalação e utilização do <em>software</em>. Em nenhum caso o autor ou direitos de autor do <em>software</em> pode ser responsabilizado por reclamações ou outros danos decorrentes da responsabilidade civil, a partir de ou em conexão com o <em>software</em>. Titulares de licença são os únicos responsáveis por determinar a adequação do uso e assumir todos os riscos associados à sua utilização,incluindo mas não limitados aos riscos do programa, erros, danos aos equipamentos, perda de dados ou programas ou indisponibilidade ou interrupção de operações.</li>
</ol>
<p>Quer dizer, é possível usar amplamente o CodeIgniter, mas <strong>você assume toda a responsabilidade em usá-lo</strong>! Quando fizer <em>softwares</em> utilizando o <em>framework</em> (inclusive os de distribuição em modo binário), você deve liberar juntamente o aviso de <em>copyright</em> (em todos os arquivos) e avisar que é um produto derivado (apesar de você não poder incluir o nome &#8220;CodeIgniter&#8221; no produto).</p>
<p>Vai encarar?  :-D</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=hXfythJwIlc:1W2eJz2EPmc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=hXfythJwIlc:1W2eJz2EPmc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=hXfythJwIlc:1W2eJz2EPmc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=hXfythJwIlc:1W2eJz2EPmc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/hXfythJwIlc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/diversos/codeigniter-requisitos-de-servidor-e-licenca-de-uso/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/diversos/codeigniter-requisitos-de-servidor-e-licenca-de-uso/</feedburner:origLink></item>
		<item>
		<title>10 razões de porque CodeIgniter arrasa</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/by3w9vaofJQ/</link>
		<comments>http://codeigniterbrasil.com/diversos/10-razoes-de-porque-codeigniter-arrasa/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 11:00:51 +0000</pubDate>
		<dc:creator>Rúbia Gardini</dc:creator>
				<category><![CDATA[Diversos]]></category>
		<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[documentação]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=37</guid>
		<description><![CDATA[De vez em quando é possível encontrar em algum artigo de blog ou discussão em fóruns a pergunta sobre qual é o melhor framework para PHP. Todos os frameworks têm seus pontos positivos e negativos, mas a verdadeira resposta para essa pergunta, é que depende do programador. Cada programador tem um estilo diferente e diferentes [...]]]></description>
			<content:encoded><![CDATA[<p>De vez em quando é possível encontrar em algum artigo de blog ou discussão em fóruns a pergunta sobre qual é o <strong>melhor framework para PHP</strong>. Todos os frameworks têm seus pontos positivos e negativos, mas a verdadeira resposta para essa pergunta, é que <strong>depende do programador</strong>. Cada programador tem um estilo diferente e diferentes prioridades quando se trata de adotar uma <em>tool kit</em> para usar na construção de seus aplicativos.</p>
<p>Nossa escolha é <a title="Visitar o site oficial do Code Igniter." href="http://codeigniter.com/">CodeIgniter</a> (CI) e abaixo estão as minhas 10 razões de porque CodeIgniter arrasa!</p>
<div class="alert">Este artigo é tradução do original &#8220;<a href="http://www.christophermonnat.com/2008/06/10-reasons-why-codeigniter-rocks/">10 Reasons Why CodeIgniter Rocks</a>&#8220;, do <a href="http://www.christophermonnat.com/">Chris Monnat</a>, e sofreu pequenas modificações.</div>
<h3>10. Arquitetura MVC</h3>
<p>A arquitetura <a title="Ler artigo sobre Model, View, Controller." href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">Model, View, Controller</a> não tem nada de novo. É como se todos os <a href="http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/">frameworks</a> hoje em dia fossem feitos em MVC e, os que não são, podem ser adaptados facilmente. Tenho tido experiência construindo grandes aplicações de forma procedural e toda vez elas terminam com uma salada-mista de códigos ingerenciáveis. A forma MVC oferece uma boa separação de códigos, e mantém a escrita limpa. Alguns frameworks forçam você a trabalhar de uma forma específica, mas o CI deixa você livre dentro do modelo MVC para programar como achar melhor. Se isso significa ignorar modelos, então, que assim seja.</p>
<h3>9. Quase nenhum pré-requisito para o servidor</h3>
<p>Diferente de outros <a href="http://www.phpframeworks.com/">frameworks PHP</a>, o CI trabalha com as versões 4 e 5 do PHP. Isso faz a vida de alguém como eu, que tem que ser capaz de trabalhar entre as duas versões, muito mais fácil. Claro, há muito tempo tenho usado técnicas do PHP 5 nas minhas aplicações, mas o framework por si só funciona em ambas versões.</p>
<h3>8. Fácil de entender e extender</h3>
<p>O CI foi o primeiro framework que usei que realmente fez sentido para mim. Tentei o <a href="http://www.cakephp.org/" target="_blank">Cake PHP</a>, o <a href="http://framework.zend.com/" target="_blank">Zend Framework</a>, <a href="http://www.symfony-project.org/" target="_blank">Symfony</a>, entre outros, e o CI foi o melhor para sair desenvolvendo rapidamente. É simples também quando se trata de escrever novas bibliotecas, mudar o comportamento de bibliotecas existentes, e simplesmente mudar todo comportamento do framework com um pequeno esforço.</p>
<h3>7. Todas as ferramentas que você precisa em um pequeno pacote</h3>
<p>Calendário, e-mail, codificação ZIP, validação, upload, sessões, teste de unidade&#8230; São somente algumas das bibliotecas pré-prontas que vêm com o CI. Isso inclui uma rápida importação dos &#8220;helpers&#8221; padrão para coisas como formulários, manipulação de arquivos, arrays, strings, cookies, diretórios e muito mais. Se tudo isso ainda não foi suficiente, você pode criar suas próprias bibliotecas e &#8220;helpers&#8221; ou usar código desenvolvido pela comunidade CI e postado no <a href="http://codeigniter.com/wiki/" target="_blank">Wiki</a>.</p>
<h3>6. Instalação não necessária</h3>
<p>Acredite ou não, uma das coisas mais difíceis que experienciei testando novos frameworks é a instalação dos mesmos. Eu não sou fã das linhas de comando UNIX, então procuro ferramentas que posso instalar e usar apenas subindo arquivos para um diretório. O CI é perfeito para isso. Não é preciso pacotes PEAR ou mudanças no servidor para ter o framework rodando. Apenas suba os arquivos para o seu servidor e pronto.</p>
<h3>5. Ferramentas de segurança pré-prontas</h3>
<p>O CI permite que você implemente quanta segurança for necessária para a sua aplicação. Ele faz algumas coisas por padrão como desconfigurar todas variáveis globais independente da diretiva <a href="http://www.php.net/manual/pt_BR/ini.core.php#ini.register-globals">register_globals</a> do PHP, e desabilita o <a href="http://www.php.net/set_magic_quotes_runtime">magic_quotes_runtime</a> durante a inicialização do sistema, assim você não precisará remover as barras quando for capturar dados do seu banco de dados. Outras coisas podem ser habilitadas, como encriptação de cookies, integração de dados de sessão com o banco de dados e automação de tratamento de consultas SQL.</p>
<h3>4. Abstração de banco de dados e mais</h3>
<p>Todo framework decente de hoje em dia tem uma camada de abstração de banco de dados e o CI não é diferente. Você pode facilmente criar declarações de insert, update e delete sem precisar escrever SQL. Manipule conexões para múltiplos bancos dentro de uma só aplicação e conecte-se em qualquer tipo de banco: MySQL(4.1+), MySQLi, MS SQL, Postgre, Oracle, SQLite ou ODBC. O CI também deixa você manipular o banco de dados adicionando/removendo colunas de tabelas, criando novas tabelas e removendo as antigas usando a nova biblioteca &#8220;database forge&#8221;.</p>
<h3>3. Comunidade grande e ativa</h3>
<p>A ultima vez que chequei, havia mais de 57.000 (na data de publicação deste artigo, mais de 70000) membros registrados no fóruns CI. É uma ótima comunidade para trabalhar quando se tem um problema ou uma questão. O site do CI tem um <a title="Visitar os fóruns oficiais do CodeIgniter." href="http://codeigniter.com/forums/">fórum</a> e um <a title="Visitar wiki oficial do CodeIgniter." href="http://codeigniter.com/wiki/">Wiki</a> quando você procura por respostas. Não há listas de grupo confusas ou canais de chat apenas para pegar uma resposta rápida.</p>
<h3>2. Documentação excelente</h3>
<p>De longe, a maior vantagem do CI é sua documentação. Eu admito que tentei outros frameworks enquanto eles ainda estavam na versão BETA e sob desenvolvimento. Mas a documentação do CI é 10 vezes melhor do que a documentação deles, e realmente acredito que é porque o CI é apoiado por uma empresa e não somente pela comunidade. <a href="http://www.ellislabs.com/" target="_blank">EllisLab</a>, a empresa que criou o CI, tem orgulho de tê-lo criado e eles têm grandes planos para ele, de modo que eles não têm problema em gastar o tempo necessário para criar uma documentação de qualidade para a comunidade de usuários.</p>
<h3>1. Logo mais irá se unificar com o ExpressionEngine</h3>
<p>A primeira razão do porque o CI arrasa é que o <a title="Acesar site oficial do ExpressionEngine." href="http://expressionengine.com/">ExpessionEngine</a>, sistema de gerenciamento de conteúdo da <a title="Site oficial da EllisLab." href="http://www.ellislabs.com/">EllisLab</a>, está sendo reconstruído para utilizar o <a title="Artigo sobre frameworks." href="http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/">framework</a>. Isso significa que as bibliotecas, &#8220;helpers&#8221;, etc. que você desenvolver para o CI, poderão ser reutilizados para o EE e vice-versa. Também significa que, o que quer que o EE precise operar, o CI tem. Classes melhoradas, autenticação de usuários pré-pronta, capacidade para facilmente programar aplicações modulares e muito mais. Tudo isso é apenas especulação, a nova versão do EE ainda não foi lançada, mas podemos sonhar (NT: quem tem uns dólares <em>extra</em> pode sonhar mais, porque o <strong>ExpressionEngine</strong> é pago).</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=by3w9vaofJQ:jnlDaIG_nDk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=by3w9vaofJQ:jnlDaIG_nDk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=by3w9vaofJQ:jnlDaIG_nDk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=by3w9vaofJQ:jnlDaIG_nDk:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/by3w9vaofJQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/diversos/10-razoes-de-porque-codeigniter-arrasa/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/diversos/10-razoes-de-porque-codeigniter-arrasa/</feedburner:origLink></item>
		<item>
		<title>MVC (Model – View – Controller)</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/KJbAXhxg1Ho/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 11:08:58 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[padrões de projeto]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=29</guid>
		<description><![CDATA[
O MVC (Model &#8211; View &#8211; Controller) já foi citado no artigo sobre padrões de projeto e no artigo introdutório sobre CodeIgniter; foi citado que o MVC é um dos padrões que o CodeIgniter implementa em seu core. Também foi dito que não é preciso saber tanto sobre o que ou como o CodeIgniter implementa [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-35 ilustra-artigo" title="Esquema visual do MVC (model - view-controller)." src="http://codeigniterbrasil.com/wp-content/uploads/2008/10/mvc-model-view-controller-esquema-visual.gif" alt="Esquema visual do MVC (model - view-controller)." width="500" height="151" /></p>
<p>O <strong>MVC (Model &#8211; View &#8211; Controller)</strong> já foi citado no <a href="http://codeigniterbrasil.com/passos-iniciais/padroes-de-projeto-ou-design-patterns-o-que-sao-para-que-servem-e-qual-sua-implicacao-de-uso/">artigo sobre padrões de projeto</a> e no <a href="http://codeigniterbrasil.com/passos-iniciais/codeigniter-framework-php-agil-robusto-e-de-alta-performance/">artigo introdutório sobre CodeIgniter</a>; foi citado que o MVC é um dos padrões que o CodeIgniter implementa em seu <em>core</em>. Também foi dito que não é preciso saber tanto sobre o que ou como o CodeIgniter implementa os padrões de projeto. Bem, esta é a regra geral. O <strong>MVC</strong> é uma exceção a isso! <strong>É muito importante saber o que é e como funciona o padrão MVC no CodeIgniter</strong> a fim de saber como tirar o melhor proveito do <em>framework</em>!</p>
<p>Na verdade, saber sobre o conceito e como funciona o MVC é imprescindível para que você possa mexer, o mínimo que seja, com o CodeIgniter, já que todo o funcionando do <em>framework</em> se dá a partir da lógica e estrutura do MVC.</p>
<h3>Por que &#8220;MVC&#8221;?</h3>
<p>Atualmente muitos &#8211; muitos, mesmo &#8211; <em>softwares</em> utilizam o padrão MVC como base de funcionamento e, no caso, não é à toa, pois a abordagem é realmente muito boa e a lógica por trás faz &#8220;<a title="Explicação sobre a origem do termo." href="http://br.answers.yahoo.com/question/index?qid=20070110130020AAvacga">valer a pena</a>&#8221; adotar o MVC.</p>
<p>O MVC pode ser entendido como uma <strong>divisão de tarefas</strong> em um aplicativo. Cada um dos 3 &#8211; <strong>Model</strong>, <strong>View </strong>e <strong>Controller</strong> &#8211; tem sua função bem definida (na teoria) e executa exatamente o que deve; nada além, nada aquém.</p>
<p>Com o desenvolvimento e evolução dos programas e, consequentemente, da <strong>forma</strong> de se fazer os programas, novas abordagens tiveram que ser pensadas para facilitar a programação e garantir que os <em>softwares</em>, depois de prontos, fossem mais facilmente manuteníveis. A partir disso surgiu o conceito de <strong>dividir tarefas</strong>, de garantir com que cada &#8220;camada&#8221; da aplicação tenha seu próprio escopo e definição e que a comunicação entre todas elas se dê de maneira eficiente e controlada.</p>
<p>Façamos uma analogia interessante envolvendo o HTML e o advento do CSS. &#8220;Antigamente&#8221;, a parte &#8220;estética&#8221; dos <em>sites</em> era controlada diretamente via <em>tags</em> HTML; se se queria um título na cor vermelho, colocava-se a <em>tag</em> para cores em vermelho; se se quisesse a fonte de tamanho &#8220;x&#8221;, colocava-se a <em>tag</em> para o texto ficar deste tamanho; e assim por diante. O problema era quando havia um <em>site</em> com 20 páginas ou mais e era preciso alterar o tamanho e a cor de todos os títulos&#8230;</p>
<p>Pensando nisso, <a title="Um pouco sobre o criador das CSS." href="http://www.cssnolanche.com.br/hakon-wium-lie-o-criador-das-css/">Håkon Wium Lie</a> teve a brilhante ideia de criar as folhas de estilo em cascata, tão conhecidas hoje em dia como &#8220;CSS&#8221;. Com CSS, a &#8220;aparência&#8221; do <em>site</em>, apesar de ser intrinsecamente relacionada com seu conteúdo, pode (e deve) ser controlada de forma independente, em arquivos separados, de forma a garantir a manutenção de um sem intervir no campo de atuação do outro.</p>
<p>E, mais ou menos da mesma maneira, se dá com o padrão MVC: existem funções/objetivos/escopos diferentes para o <strong>Model</strong>, para o <strong>View</strong> e para o <strong>Controller</strong> e cada um destes pode ser alterado, separadamente, por pessoas diferentes, sem interferir/intervir na &#8220;área de atuação&#8221; do outro! É algo fantástico!</p>
<h3>Entendendo o Model, o View e o Controller</h3>
<p>Na maioria das fontes que você pesquisar sobre <strong>MVC</strong>, geralmente vai encontrar primeiramente a explicação de &#8220;View&#8221; &#8211; provavelmente por ser a mais fácil de entender e/ou para não &#8220;assustar&#8221; muito no primeiro contato com o padrão de projeto. Mas, para seguir corretamente o acrônimo, serão apresentados, respectivamente, o <strong>Model</strong> (&#8220;Modelo&#8221;), o <strong>View</strong> (&#8220;Visualização&#8221;) e o <strong>Controller</strong> (&#8220;Controle&#8221;).</p>
<ul>
<li><strong>Model.</strong> Tenha uma coisa em mente: quando pensar em Model, pense em <strong>estruturas de dados</strong>! Num <em>software</em> baseado em MVC, é o Model que tem o contato com as informações armazenadas e que são mostradas, estejam elas em um <strong>banco de dados</strong>, <strong>arquivo XML</strong>, ou onde quer que estejam. É no Model e somente no Model que as operações de <a title="CRUD mais! Prefiro bem passado..." href="http://pt.wikipedia.org/wiki/CRUD">CRUD</a> devem acontecer.</li>
<li><strong>View.</strong> É a <strong>apresentação</strong>, é <strong>o que aparece</strong>, é <strong>o que é visualizado</strong> por quem usa o sistema. É no View que as informações, sejam elas quais forem e de de qual lugar tenha vindo, serão exibidas para a pessoa &#8211; logicamente acompanhadas de um bom <em>design</em>, uma boa estrutura organizacional, um ambiente agradável para quem está vendo, e muitos outros<strong>.<br />
</strong></li>
<li><strong>Controller.</strong> Como sugere o nome, é responsável por controlar todo o fluxo do programa. É o &#8220;cérebro&#8221; e o &#8220;coração&#8221; do aplicativo; é no Controller que se decide &#8220;se&#8221;, &#8220;o que&#8221;, &#8220;quando&#8221;, &#8220;onde&#8221; e tudo o mais que faz com que a <strong>lógica</strong> funcione. Desde o que deve ser consultado no banco de dados à tela que vai ser exibida para quem usa o programa/sistema, é no Controller que tudo isso deve ser definido.</li>
</ul>
<p>Certamente com estas breves descrições não é possível ter um entendimento satisfatório sobre o MVC. Então, leia a <a title="Mais sobre MVC, na Wikipédia." href="http://pt.wikipedia.org/wiki/Mvc">definição de MVC da Wikipédia</a>, uma <a title="Explicação sobre o padrão MVC, de José Carlos Marcoratti." href="http://www.macoratti.net/vbn_mvc.htm">explicação sobre MVC de José Carlos Macoratti</a> e uma <a title="Artigo de Maikon Portela sobre MVC." href="http://mykportela.blogspot.com/2008/06/aulas-24-e-25.html">explicação de MVC de Maikon Portela</a>. Com essas leituras você certamente vai entender melhor sobre a o padrão MVC. Para facilitar ainda mais, veja esta representação esquemática do modelo MVC (com o perdão da &#8220;tradução mais ou menos&#8221; que fiz a partir da imagem do <a href="http://sis36.berkeley.edu/projects/streek/">Streek</a>):</p>
<p style="text-align: center;"><img class="size-full wp-image-38" title="Estrutura MVC, Model, View, Controller" src="http://codeigniterbrasil.com/wp-content/uploads/2008/12/estrutura-mvc-model-view-controller.gif" alt="Estrutura MVC, Model, View, Controller" width="500" height="350" /></p>
<p>Como dito, o CodeIgniter utiliza fortemente o padrão MVC para seu funcionamento e o MVC é parte importantíssima de seu &#8220;fluxo&#8221; de funcionamento; e existem muitos outros, como Bibliotecas (<em>libraries</em>), &#8220;Ajudantes&#8221; (<em>helpers</em>), Extensões (<em>plugins</em>) e outros. Mas isso é assunto para outro artigo!  ;-)</p>
<p><a title="Assinar o feed do CodeIgniter Brasil" href="http://codeigniterbrasil.com/feed/">Fiquem ligados no CodeIgniter Brasil!</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=KJbAXhxg1Ho:0Nj1q2wHXmg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=KJbAXhxg1Ho:0Nj1q2wHXmg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=KJbAXhxg1Ho:0Nj1q2wHXmg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=KJbAXhxg1Ho:0Nj1q2wHXmg:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/KJbAXhxg1Ho" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/</feedburner:origLink></item>
		<item>
		<title>Padrões de Projeto (ou Design Patterns): o que são, para que servem e qual sua implicação de uso</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/pXBPoBO8hqs/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/padroes-de-projeto-ou-design-patterns-o-que-sao-para-que-servem-e-qual-sua-implicacao-de-uso/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 11:08:34 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[adapter]]></category>
		<category><![CDATA[decorator]]></category>
		<category><![CDATA[factory]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[padrões de projeto]]></category>
		<category><![CDATA[singleton]]></category>
		<category><![CDATA[strategy]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=8</guid>
		<description><![CDATA[
Quem já programa com linguagens OO (orientação a objetos) certamente trabalha ou, pelo menos, já ouviu falar, dos Padrões de Projeto ou Design Patterns. Os mais &#8220;vivenciados&#8221; na arte de programar já devem, inclusive, ter implementado um Padrão de Projeto em algum sistema ou software.
Mas nem todos conhecem os Padrões de Projeto e alguns sequer [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-26 ilustra-artigo" title="Exemplo de Diagrama Entidade-Relacionamento (DER)." src="http://codeigniterbrasil.com/wp-content/uploads/2008/10/padroes-de-projeto-design-patterns-exemplo.gif" alt="Exemplo de Diagrama Entidade-Relacionamento (DER)." width="300" height="356" /></p>
<p>Quem já programa com linguagens OO (orientação a objetos) certamente trabalha ou, pelo menos, já ouviu falar, dos <strong>Padrões de Projeto</strong> ou <strong>Design Patterns</strong>. Os mais &#8220;vivenciados&#8221; na arte de programar já devem, inclusive, ter implementado um <strong>Padrão de Projeto</strong> em algum sistema ou <em>software</em>.</p>
<p>Mas nem todos conhecem os <strong>Padrões de Projeto</strong> e alguns sequer ouviram falar a respeito; por isso, neste artigo, falo um pouco a respeito dos <strong>Design Patterns</strong>. Para entender melhor o assunto, é preciso ter, pelo menos, noções de programação orientada a objetos &#8211; dê uma lidinha em nossa página <a title="Saiba quais são os pré-requisitos para você aproveitar melhor o CodeIgniter Brasil." href="http://codeigniterbrasil.com/pre-requisitos/">Pré-requisitos</a> para saber se você está apto a continuar a leitura.</p>
<h3>O que são Padrões de projeto ou Design Patterns?</h3>
<p>Primeiramente, vamos ler um trecho da <a title="Mais sobre Padrões de Projeto, na Wikipédia." href="http://pt.wikipedia.org/wiki/Padr%C3%B5es_de_projeto_de_software">definição de Padrões de Projeto da Wikipédia</a>, onde consta que os Padrões de Projeto</p>
<blockquote><p>descrevem soluções para problemas recorrentes no desenvolvimento de sistemas de software orientados a objetos. Um padrão de projeto estabelece um nome e define o problema, a solução, quando aplicar esta solução e suas conseqüências.</p></blockquote>
<p>Excelente esta definição da Wikipédia. Para entender melhor, ainda, vamos pegar a definição mais objetiva de <strong>José Carlos Macoratti</strong>, que, <a title="Visitar site de José Carlos Macoratti." href="http://www.macoratti.net/">em seu <em>site</em></a>, no <a title="Ler artigo sobre MVC de José Carlos Macoratti." href="http://www.macoratti.net/vbn_mvc.htm">artigo sobre o padrão MVC</a>, define:</p>
<blockquote><p>Padrões de projetos  são soluções para problemas que alguém um dia teve e resolveu aplicando um modelo que foi documentado e que você pode adaptar integralmente ou de acordo com necessidade de sua solução.</p></blockquote>
<p>Por exemplo, você está programando seu revolucionário sistema e percebe que será necessário ter acesso à uma instância de uma classe qualquer, e que esse acesso deve ser fácil e possível de ser feito em qualquer parte/página de seus códigos. Ao invés de você quebrar a cabeça e pensar em como fazer isso, utilize uma solução pronta! A solução para isso já existe &#8211; porque é uma situação muito comum em desenvolvimento de programas e se tornou um padrão de projeto &#8211; e seu nome é <a title="Mais sobre o padrão de projeto Singleton, na Wikipédia." href="http://pt.wikipedia.org/wiki/Singleton">Singleton</a>!</p>
<p>Quer dizer, corroborando ainda mais com a filosofia do &#8220;Não reinvente a roda!&#8221; &#8211; já comentada no <a title="Leia o artigo sobre frameworks." href="http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/">artigo sobre <em>frameworks</em></a> -, os <strong>Padrões de Projeto</strong> existem para agilizar o desenvolvimento de aplicações e permitem que você &#8220;economize neurônios&#8221;, pois são soluções mais ou menos prontas para os problemas mais ou menos comuns do cotidiano de um programador.</p>
<p>E não se engane, pensado que padrões de projetos são &#8220;coisa de PHP&#8221;! Os <em>design patters</em> são <strong>soluções para problemas de <em>software</em></strong> e, pense bem, uma solução para problemas genéricos não pode ficar restrita a uma linguagem específica. Portanto, conhecendo a solução que se quer, esta pode e deve ser aplicada não somente em PHP, mas em Java, Ruby, C#, .NET, e qualquer outra que você queira.</p>
<h3>Para que servem os Padrões de Projeto?</h3>
<p>Você já deve ter percebido que os Design Patterns servem para mostrar (ou demonstrar) soluções prontas para problemas que são comuns; soluções estas que podem ser implementadas em qualquer linguagem de programação.</p>
<p>O importante dos Padrões de Projeto são as definições dos problemas e a &#8220;melhor saída&#8221; para cada um deles. Através da análise de caso e de solução de uma situação, conhecendo os padrões de projeto você pode decidir qual usar, como usar e porque usar um padrão de projeto &#8211; se realmente for conveniente para o caso em foco.</p>
<p>Os padrões de projeto podem ser divididos por sua função ou escopo, sendo apresentados em 3 categorias principais, quais sejam, <strong>Padrões de Criação</strong>, <strong>Padrões Estruturais</strong> e <strong>Padrões comportamentais</strong>. Cada uma destas &#8220;categorias de padrões de projeto&#8221; contém os <em>design patterns</em> que são úteis a cada escopo.</p>
<p>Por exemplo, o padrão <a title="Mais sobre o design pattern Singleton." href="http://pt.wikipedia.org/wiki/Singleton">Singleton</a> &#8211; que tem por objetivo garantir a existência de apenas uma instância de uma classe, mantendo um ponto global de acesso ao seu objeto &#8211; pertence à categoria de Padrões de Criação; o Adapter &#8211; que permite que classes com interfaces incompatíveis possam interagir entre si &#8211; pertence a Padrões Estruturais; e assim por diante. Confira uma boa <a title="Mais sobre os diferentes design patterns, na Wikipédia." href="http://pt.wikipedia.org/wiki/Padr%C3%B5es_de_projeto_de_software">listagem de padrões de projeto por categoria na Wikipédia</a>.</p>
<p>Dando uma olhadinha no código fonte e pesquisando rapidamente em alguns tópicos dos <a title="Acessar os fóruns oficiais do CodeIgniter." href="http://codeigniter.com/forums/">fóruns oficiais do CodeIgniter</a>, é possível observar que, dentre outros, alguns dos <em>design patterns</em> que o CodeIgniter implementa são:</p>
<ul>
<li><a title="Mais sobre o padrão de projeto MVC, na Wikipédia." href="http://pt.wikipedia.org/wiki/Mvc">MVC</a></li>
<li><a title="Mais sobre o padrão de projeto Singleton, na Wikipédia." href="http://pt.wikipedia.org/wiki/Singleton">Singleton</a></li>
<li><a title="Mais sobre o padrão de projeto Factory, na Wikipédia." href="http://en.wikipedia.org/wiki/Factory_method_pattern">Factory</a></li>
<li><a title="Mais sobre o padrão de projeto Adapter, na Wikipédia." href="http://pt.wikipedia.org/wiki/Adapter">Adapter</a></li>
<li><a title="Mais sobre o padrão de projeto Decorator, na Wikipédia." href="http://en.wikipedia.org/wiki/Decorator_pattern">Decorator</a></li>
<li><a title="Mais sobre o padrão de projeto Strategy, na Wikipédia." href="http://pt.wikipedia.org/wiki/Strategy">Strategy</a></li>
</ul>
<p>Se alguém identificou mais algum padrão de projeto, basta comentar no artigo e eu complemento a listagem dos design patterns que o CodeIgniter implementa.</p>
<p>Na prática &#8211; e falando genericamente &#8211; não faz muita diferença para quem utiliza o CodeIgniter saber quais design patterns o <em>framework</em> usa nem exatamente como cada um deles funciona. Entretanto, saber disso auxilia você a &#8220;montar a tela mental&#8221; do &#8220;todo&#8221; e ter uma noção de como a &#8220;mágica&#8221; do CodeIgniter funciona!</p>
<p><a title="Assinar o feed do CodeIgniter Brasil." href="http://codeigniterbrasil.com/feed/">Assine o <em>feed</em> CodeIgniter Brasil</a> para não perder os próximos &#8220;truques&#8221;!  ;-)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=pXBPoBO8hqs:yAr_COnWybE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=pXBPoBO8hqs:yAr_COnWybE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=pXBPoBO8hqs:yAr_COnWybE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=pXBPoBO8hqs:yAr_COnWybE:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/pXBPoBO8hqs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/padroes-de-projeto-ou-design-patterns-o-que-sao-para-que-servem-e-qual-sua-implicacao-de-uso/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/padroes-de-projeto-ou-design-patterns-o-que-sao-para-que-servem-e-qual-sua-implicacao-de-uso/</feedburner:origLink></item>
		<item>
		<title>CodeIgniter: framework PHP ágil, robusto e de alta performance</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/KbsOMdRcyx8/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/codeigniter-framework-php-agil-robusto-e-de-alta-performance/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 12:00:48 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[ajuda]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[código-fonte]]></category>
		<category><![CDATA[helpers]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=3</guid>
		<description><![CDATA[
Para quem programa/trabalha com PHP &#8211; e outras linguagens de programação, também -, sabe que o tempo de desenvolvimento é uma das coisas importantes a se considerar em um projeto. De igual maneira, deve-se fazer web sites e aplicações web que sejam confiáveis e seguros, ao mesmo tempo que possuam boa performance e sejam rápidos.
É [...]]]></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>Para quem programa/trabalha com PHP &#8211; e outras linguagens de programação, também -, sabe que o <strong>tempo de desenvolvimento</strong> é uma das coisas importantes a se considerar em um projeto. De igual maneira, deve-se fazer <em>web sites</em> e aplicações <em>web</em> que sejam <strong>confiáveis</strong> e <strong>seguros</strong>, ao mesmo tempo que possuam <strong>boa performance</strong> e sejam <strong>rápidos</strong>.</p>
<p>É possível conseguir estes objetivos programando &#8220;na unha&#8221; &#8211; jargão conhecido entre os programadores&#8221;; entretanto, isso possui algumas desvantagens como, só para citar algumas:</p>
<ul>
<li>Tempo &#8220;gasto&#8221; devido à preocupação com validações e segurança, em geral;</li>
<li>Preocupações com o &#8220;estilo&#8221; da codificação, haja vista o fato de eventuais compatibilidades entre servidores e versões do PHP;</li>
<li>Documentação;</li>
<li>Escalabilidade;</li>
<li>Combinar, de forma eficiente, leveza da aplicação e performance.</li>
</ul>
<p>Para sanar, ou, pelo menos, amenizar, a maioria das questões apresentadas e outras mais, muitos programadores optam por utilizam um <em><a title="Saiba mais sobre frameworks." href="http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/">framework</a></em>. Digo &#8220;um&#8221; porque, apesar da existência de inúmeros <em>frameworks</em> PHP, gratuitos ou não, o mais comum é o programador fazer alguns testes e escolher um só para trabalhar; escolher aquele que é mais consonante com sua metodologia e prática de programação &#8211; no caso, <strong>programação PHP</strong>.</p>
<p>Como você deve ter percebido pelo nome deste blog, aqui tratamos sobre o <strong>melhor <em>framework</em> PHP gratuito: CodeIgniter</strong>.</p>
<h3>Sobre o CodeIgniter</h3>
<p>CodeIgniter foi originalmente desenvolvido por Rick Ellis (CEO da <a title="Página oficial da EllisLab Inc." href="http://ellislab.com/">EllisLab Inc.</a>). O framework foi escrito para ter desempenho no &#8220;mundo real&#8221;, com muitos da classe bibliotecas, helpers e sub-sistemas baseados no código base do <a title="Página oficial do ExpressionEngine." href="http://expressionengine.com/">ExpressionEngine</a>; atualmente é desenvolvido e mantido pela ExpressionEngine Development Team.</p>
<p><a title="Site oficial do CodeIgniter." href="http://codeigniter.com/">CodeIgniter</a>, como bom <em>framework</em> que é, permite o desenvolvimento de <em>web sites</em>, <em>softwares</em> e aplicações em PHP de maneira ágil e relativamente descomplicada. O objetivo do CodeIgniter é disponibilizar um <em>framework</em> de <strong>máxima performance e capacidade, que seja flexível e o mais leve possível</strong>. Para conseguir estes objetivos, as bases do CodeIgniter são:</p>
<ul>
<li><strong>Instanciamento dinâmico.</strong> No CodeIgniter, componentes são carregados e rotinas executadas somente quando preciso, ao invés de globalmente;</li>
<li><strong>Junção de componentes.</strong> Os componentes do <em>framework</em> são intercomunicativos, proporcionando alto índice de reutilização e flexibilidade dos sistemas baseados/derivados;</li>
<li><strong>Singularidade dos componentes.</strong> No CodeIgniter, cada classe &#8211; e respectivas funções &#8211; é autônoma, o que permite elevar o grau de utilidade e o sistema, como um todo, ter mais performance.</li>
</ul>
<h3>CodeIgniter utiliza o padrão MVC</h3>
<p>O conhecido e &#8220;consagrado&#8221; <a title="Mais sobre o padrão MVC." href="http://codeigniterbrasil.com/passos-iniciais/mvc-model-view-controller/">padrão MVC</a> foi adotado no CodeIgniter. Todo o <em>framework</em> é baseado em <em>Models</em>, <em>Views</em> e <em>Controllers</em>; mas, diferente de muitos <em>frameworks</em> PHP, existe realmente uma flexibilidade muito grande! Por exemplo, um <em>Controller</em> não está &#8220;amarrado&#8221;, necessariamente, a um <em>View</em> e, inclusive, pode, este <em>Controller</em>, chamar diferentes <em>Models</em> e diferentes <em>Views</em> &#8211; torna-se muito fácil fazer <em>templates</em>, por exemplo.</p>
<h3>Classes, bibliotecas e &#8220;helpers&#8221; nativos para diversas funcionalidades</h3>
<p>Como bom <em>framework</em> PHP, CodeIgniter tem seus próprios excelentes recursos nativos, utilizados através de suas bibliotecas, &#8220;<em>helpers</em>&#8221; e classes que já constam no <em>framework</em> por <em>default</em>:</p>
<ul>
<li><strong>Calendários.</strong> Fácil criação de calendários, inclusive com criação de <em>templates</em> de formatação e exibição.</li>
<li><strong>Bancos de dados.</strong> De maneira simples e rápida é possível: carregar <em>databases</em>, executar <em>querys</em>, manipular resultados de consultas, realizar transações (como se fosse <a title="Sobre PDO e alguns exemplos de PHP Database Object." href="http://www.acordapraweb.com/pdo-bancos-de-dados-no-php5/">PDO</a>), fazer <em>query caching</em>, dentre outros.</li>
<li><strong>E-mails.</strong> Enviar <em>e-mails</em> em protocolos diferentes (Mail, Sendmail e SMTP), envio de cópias e cópias ocultas, <em>e-mail</em> em texto puro ou HTML, enviar e-mail com anexos, ferramenta própria para <em>debug</em>, dentre outros.</li>
<li><strong>Criptografia.</strong> Funções gerais de criptografia, através do uso de <em>hashings</em> e chaves.</li>
<li><strong>Formulários.</strong> Criação de <em>tags</em> de formulário &#8220;<em>on the fly</em>&#8220;, tratamento de campos e informações, <em>upload</em> de arquivos, etc.</li>
<li><strong>Manipulação de imagens.</strong> Redimensionar, criar miniaturas, rotacionar, cortar e inserir marca d&#8217;água.</li>
<li><strong>FTP.</strong> Funções gerais de FTP, como mover, renomear, deletar, etc; e ainda uma função especial de espelhagem (&#8220;<em>mirroring</em>&#8220;), que permite criação dinâmica de diretórios no servidor a partir de arquivos na máquina local.</li>
<li><strong>Compactação de arquivos.</strong> Manipulação, criação, controle e edição de arquivos compactados, sendo possível criar arquivos diretamente no servidor, acrescentar files diretamente e fazer <em>downloads</em> dos mesmos.</li>
<li><strong>Controle de <em>cookies</em> sessões PHP.</strong> Manipulação e controle geral de <em>cookies</em> e sessões PHP, com todas suas funções, capacidades e potencialidades existentes.</li>
<li><strong>Muitas outras funcionalidades.</strong> <a href="http://codeigniter.com/user_guide/overview/features.html">Muitas mesmo!</a></li>
</ul>
<h3>Material de aprendizagem, apoio e consulta</h3>
<p>No do <a title="Web site oficial do CodeIgniter." href="http://codeigniter.com/">site do CodeIgniter</a> há material de aprendizagem, apoio e consulta para as pessoas que usam o <em>framework</em>, através do <a title="Acessar o User Guide do CodeIgniter." href="http://codeigniter.com/user_guide/">Guia do Usuário</a>, <a title="Ver o Wiki do CodeIgniter." href="http://codeigniter.com/wiki/">Wiki</a>, <a title="Fóruns do CodeIgniter." href="http://codeigniter.com/forums/">fóruns</a>, <a title="Ver vídeo aulas sobre o CodeIgniter." href="http://codeigniter.com/tutorials/">vídeo-aulas</a> e exemplos e notícias, através de um <a title="Blog oficial do CodeIgniter." href="http://codeigniter.com/blog/"><em>blog</em> oficial</a>. Além disso, também há uma comunidade de programadores que utilizam o CodeIgniter e se ajudam mutuamente.</p>
<h3>Gostou do CodeIgniter?</h3>
<p>Através destas breves características do CodeIgniter já dá pra ter uma noção da <strong>potência</strong> do <em>framework</em>! Segundo o <a title="Ver o Top 10 dos frameworks PHP." href="http://www.phpframeworks.com/top-10-php-frameworks/">Top 10 PHP Frameworks</a>, o CodeIgniter é o 3º melhor <em>framework</em> PHP do mundo (na data de publicação deste artigo)!  Entretanto, para você decidir se gosta ou não, realmente, é preciso que você <a title="Página oficial de downloads do CodeIgniter." href="http://codeigniter.com/downloads/">baixe o CodeIgniter</a> e faça seus próprios testes, faça seus primeiros sites usando o <em>framework</em>, seus primeiros sistemas e decida por si só.</p>
<p>Temos certeza de que você vai gostar e, qualquer coisa, <a title="Assinar o feed do CodeIgniter Brasil." href="http://codeigniterbrasil.com/feed">estamos aí para ajudar</a>! ;-)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/cibrasil?a=KbsOMdRcyx8:dSJvQppen5I:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=KbsOMdRcyx8:dSJvQppen5I:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/cibrasil?a=KbsOMdRcyx8:dSJvQppen5I:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/cibrasil?i=KbsOMdRcyx8:dSJvQppen5I:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/KbsOMdRcyx8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/codeigniter-framework-php-agil-robusto-e-de-alta-performance/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/codeigniter-framework-php-agil-robusto-e-de-alta-performance/</feedburner:origLink></item>
		<item>
		<title>O que é um framework: definição e benefícios de se usar frameworks</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/o8_RclQCoz8/</link>
		<comments>http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 12:00:52 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Passos Iniciais]]></category>
		<category><![CDATA[ajuda]]></category>
		<category><![CDATA[comunidade]]></category>
		<category><![CDATA[definições]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=7</guid>
		<description><![CDATA[
No web site oficial do CodeIgniter, vemos na definição que CodeIgniter is a powerful PHP framework. Quer dizer, presume-se que aquele que entrou no site do CodeIgniter já seja um programador PHP e saiba o que é um framework. Entretanto, algumas pessoas utilizam muito o termo &#8220;framework&#8221; e, inclusive, trabalham com frameworks, sem mesmo saber [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-27 ilustra-artigo" title="Framework: exemplos de estruturas de frameworks." src="http://codeigniterbrasil.com/wp-content/uploads/2008/10/framework-exemplos-estruturas-frameworks.gif" alt="Framework: exemplos de estruturas de frameworks." width="500" height="150" /></p>
<p>No <a title="Acessar site oficial do CodeIgniter." href="http://codeigniter.com/"><em>web site</em> oficial do CodeIgniter</a>, vemos na definição que <cite>CodeIgniter is a powerful PHP framework</cite>. Quer dizer, presume-se que aquele que entrou no <em>site</em> do <strong>CodeIgniter</strong> já seja um programador PHP e saiba o que é um <em><strong>framework</strong></em>. Entretanto, algumas pessoas utilizam muito o termo &#8220;<em>framework</em>&#8221; e, inclusive, trabalham com <strong><em>frameworks</em></strong>, sem mesmo saber o que são, exatamente.</p>
<h3>O que é um framework?</h3>
<p><a title="Ler definições para Framework." href="http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/frame/deffw.htm">Existem muitas definições para &#8220;<em>framework</em>&#8220;</a>, feitas por muitas pessoas diferentes; algumas muito estudadas e que desenvolveram seus próprios <em>frameworks</em>, outras nem tanto, mas que buscam uma definição precisa para o termo.</p>
<p><a title="Definição de Framework, na Wikipédia." href="http://pt.wikipedia.org/wiki/Framework">Segundo a Wikipédia</a>, <em>framework</em></p>
<blockquote><p>é uma estrutura de suporte definida em que um outro projeto de software pode ser organizado e desenvolvido. Um framework pode incluir programas de suporte, bibliotecas de código, linguagens de script e outros softwares para auxiliar no desenvolvimento e unir diferentes componentes de um projeto de software.</p></blockquote>
<p>Realmente é uma descrição bem feita e que demonstra, de forma bem satisfatória, o que é um <em>framework</em>. Se alguém perguntasse para mim, minha definição não seria muito diferente. Seria algo como:</p>
<blockquote><p>Framework é um conjunto de scripts feitos por pessoas mais inteligentes que eu para eu programar de forma mais rápida, fácil e eficiente.</p></blockquote>
<p>Falando francamente e sem muito &#8220;tecnicinismo&#8221;, um <em>framework</em> não passa disso mesmo: um monte de arquivos organizados, com um monte de funções, rotinas e variáveis inclusas, que servem para nos poupar o tempo de &#8220;reinventar a roda&#8221; diversas e diversas vezes, para cada novo projeto.</p>
<h3>Quais as vantagens em usar frameworks?</h3>
<p>Você já deve ter percebido que <strong>há muitas vantagens em se usar um <em>framework</em></strong>. Mas, para ser mais explícito, algumas das vantagens em se usar <em>frameworks</em> são (a ordem não é por importância):</p>
<ul>
<li><strong>Utilidade.</strong> O objetivo primeiro dos <em>framworks</em> é auxiliar no desenvolvimento de aplicações e <em>softwares</em>. Para tal, eles têm funcionalidades nativas das mais variadas, que ajudam você a resolver as questões sobre programação do dia-a-dia com muito mais qualidade e eficiência.</li>
<li><strong>Segurança.</strong> Os bons <em>frameworks</em> são projetados de modo a garantir a segurança de quem programa e, principalmente, de quem usa o que foi feito a partir dele. Não se preocupe mais com aquelas intermináveis linhas de código para evitar um <a title="Mais sobre SQL Injection, na Wkipédia." href="http://en.wikipedia.org/wiki/SQL_injection">SQL Injection</a>, por exemplo; com <em>frameworks</em>, a parte de segurança já &#8220;vem de fábrica&#8221;.</li>
<li><strong>Extensibilidade.</strong> Os <em>frame works</em> permitem que você extenda suas funcionalidades nativas. Se aquela biblioteca de envio de <em>e-mails</em> por SMTP não contempla todas as possibilidades que você gostaria, simplesmente extenda suas funcionalidades e as use como se fossem parte do <em>framework</em> (na verdade, elas serão).</li>
<li><strong>Economia de tempo.</strong> O que você demoraria algumas horas ou alguns dias para fazer, você encontra pronto em um <em>framework</em>. Pense no quão trabalhosas aquelas funções de manipulação de imagens são; usando um <em>framework</em> que tenha isso, você só usa, e pronto.</li>
<li><strong>Ajuda fácil.</strong> Os que desenvolvem <em>framworks</em> geralmente disponibilizam material de qualidade nos <em>web sites</em> ou repositórios oficiais, com uma vasta documentação a respeito. Além disso, os bons <em>frameworks</em> sempre têm uma comunidade de desenvolvedores dispostos a se ajudarem entre si. É um prazer para os que já sabem mexer ajudar os que ainda não sabem (embora a falta de tempo também seja uma realidade).</li>
</ul>
<h3>Considerações sobre frameworks</h3>
<p>Existem, literalmente, <strong>milhares de frameworks disponíveis</strong> para as diversas linguagens de programação existentes. É importante, antes esta imensidão de &#8220;oferta&#8221;, optar por um que atenda a suas necessidades e que seja consoante a seu método e estilo de trabalho.</p>
<p>Inicialmente, pode parecer que usar um <em>frame work</em> é <strong>pior</strong> do que fazer uma &#8220;programação pura&#8221;. Entretanto, tenha certeza: <strong>vale a pena dedicar seu tempo nisso!</strong> As vantagens vindouras de ter um projeto bem estruturado e rodando numa plataforma segura e estável, realmente compensam!</p>
<p>Existem <a title="Dicas de como escolher um framework, de Vitor Pamplona." href="http://www.vitorpamplona.com/wiki/8%20dicas%20para%20escolher%20um%20bom%20framework">dicas de como escolher um bom <em>framework</em></a>, mas, já adianto, em programação PHP, o melhor é <strong>CodeIgniter</strong>!  ;-)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/cibrasil?a=sGBGm7Om"><img src="http://feeds.feedburner.com/~f/cibrasil?i=sGBGm7Om" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/cibrasil?a=JGlOyyPW"><img src="http://feeds.feedburner.com/~f/cibrasil?i=JGlOyyPW" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/o8_RclQCoz8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/passos-iniciais/o-que-e-um-framework-definicao-e-beneficios-de-se-usar-frameworks/</feedburner:origLink></item>
		<item>
		<title>CodeIgniter Brasil: o começo</title>
		<link>http://feedproxy.google.com/~r/cibrasil/~3/Adb7xBwWlMg/</link>
		<comments>http://codeigniterbrasil.com/diversos/codeigniter-brasil-o-comeco/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 12:25:09 +0000</pubDate>
		<dc:creator>Tárcio Zemel</dc:creator>
				<category><![CDATA[Diversos]]></category>
		<category><![CDATA[comunidade]]></category>
		<category><![CDATA[diversidades]]></category>

		<guid isPermaLink="false">http://codeigniterbrasil.com/?p=40</guid>
		<description><![CDATA[Muito bem-vindo seja você, visitante, utilizador do CodeIgniter, curioso sobre o assunto ou mesmo que não sabe nada a respeito e está se perguntando &#8220;Mas que diabos de blog é esse?&#8221;! Seja muito bem vindo a este novo espaço virtual, o CodeIgniter Brasil, dedicado a tratar do melhor framework para PHP que existe atualmente, o [...]]]></description>
			<content:encoded><![CDATA[<p>Muito bem-vindo seja você, visitante, utilizador do <strong>CodeIgniter</strong>, curioso sobre o assunto ou mesmo que não sabe nada a respeito e está se perguntando &#8220;Mas que diabos de blog é esse?&#8221;! Seja muito bem vindo a este novo espaço virtual, o <a title="CodeIgniter Brasil." href="http://codeigniterbrasil.com/">CodeIgniter Brasil</a>, dedicado a tratar do melhor framework para PHP que existe atualmente, o <a title="Página oficial do CodeIgniter." href="http://codeigniter.com/">CodeIgniter</a>, e os assuntos que são correlatos.</p>
<h3>Proposta</h3>
<p>Nós, autores e mantenedores do blog, consideramos que o <strong>CodeIgniter</strong> é o melhor framework para PHP e que ele veio para ficar! As facilidades que ele proporciona no desenvolvimento; a rapidez que ele provê para a criação e manutenção de funcionalidades; as características intrínsecas que ele aprensenta; suas bibliotecas, classes e helpers nativos; é por tudo isso e muito mais que escolhemos o <strong>CodeIgniter</strong> como nosso framework para trabalhos com PHP!</p>
<p>Nossa proposta com este blog é tratar das diversas temáticas que envolvem o <strong>CodeIgniter</strong>, passando desde assuntos como configurações, ajustes e otimização a downloads, notícias sobre <strong>CodeIgniter</strong>, tira-dúvidas com os leitores e muito mais!</p>
<p>Que fique claro que não somos &#8220;gurus&#8221; em <strong>CodeIgniter</strong>, ou algo parecido. Somos apenas pessoas que gostam muito do framework e querem compartilhar o que sabem e aprender muito mais coisas, principalmente através da interação entre as pessoas que os blogs proporcionam.</p>
<h3>Aspirações</h3>
<p>Temos a intenção de fazer o CodeIgniter Brasil o melhor blog nacional sobre o <strong>CodeIgniter</strong>. Nossa idéia é, através de artigos, tutoriais, ajuda dos amigos e leitores, fazer com que este ambiente online seja o melhor possível &#8211; dentro das possibilidades de cada um.</p>
<p>E para que este objetivo aconteça, é muitíssimo importante que a contribuição dos leitores/frequentadores do blog seja uma constante. Temos certeza de que as contribuições serão várias e que teremos, mutuamente, muitos e muitos momentos para interagir e aprender por aqui!</p>
<p>Para já ficar ligado nos conteúdos que estão por vir, <a title="Assinar feed do CodeIgniter Brasil." href="http://codeigniterbrasil.com/feed">assine o feed do CodeIgniter Brasil</a> e fique sabendo das novidades e atualizações da forma mais rápida possível!</p>
<h3>Sucesso aos &#8220;codeigniters&#8221;!</h3>
<p>Somos pessoas que têm seus trabalhos &#8220;oficiais&#8221; e também os &#8220;paralelos&#8221;. Uma de nossas atividades é escrever em blogs e outras publicações. Nossa intenção é colocar artigos com relativa frequencia que, esperamos, seja do agrado dos leitores.</p>
<p>Que todos nós, utilizadores do <strong>CodeIgniter</strong>, possamos lograr sucesso em nossas atividades e que comecem as atividades no <a title="CodeIgniter Brasil." href="http://codeigniterbrasil.com/">CodeIgniter Brasil</a>!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/cibrasil?a=nlphrwU3"><img src="http://feeds.feedburner.com/~f/cibrasil?i=nlphrwU3" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/cibrasil?a=cMFNDCHY"><img src="http://feeds.feedburner.com/~f/cibrasil?i=cMFNDCHY" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/cibrasil/~4/Adb7xBwWlMg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeigniterbrasil.com/diversos/codeigniter-brasil-o-comeco/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://codeigniterbrasil.com/diversos/codeigniter-brasil-o-comeco/</feedburner:origLink></item>
	</channel>
</rss>
