terça-feira, 5 de agosto de 2008

Desenvolvendo com cakephp - Controller parte 1

Beleza galera? Meu nome é Matheus Cáceres e a partir de hoje estarei fazendo varios tutoriais ensinando o mexer com o cake, pois não vejo muitas pessoas utilizando ele no Brasil. Nesse tutorial estarei seguindo um padrão diferente ao invéz de mostrar como já utilizar banco de dados e etc com o cake, hoje montaremos uma pagina estatica e no proximo tutorial montaremos algo com o banco de dados.

-Minha maneira de montar os tutoriais

Estarei falando muitas vezes sobre os possiveis erros que poderam ocorrer durante o seu aprendizado com o cake, portanto as vezes estarei o obrigando a testar o codigo para ver o erro e assim aprender com ele.


-O que é preciso para entender os tutoriais?
  1. Noção em php.
  2. Ter o apache instalado em seu servidor.
  3. Mysql instalado em seu servidor.
  4. Noção em html
-O que é o cakephp?
Cake é baseado no ruby on rails, que é um framework do ruby muito poderoso também, se quiserem saber um pouco mais sobre ele http://www.rubyonrails.org/. O cake permite o desenvolvedor do php economizar linhas e linhas de codigos, um exemplo seria acessar o banco de dados de etc sem ao menos escrever NENHUM SELECT, isso graças a maneira dele de utilizar o ORM(Object-relational mapping), quem quiser saber mais sobre ORM acesse o site http://en.wikipedia.org/wiki/Object-relational_mapping.

-Qual cake será utilizado nos tutoriais?
Existe a versão estavel do cake que é a 1.1, mas já existe a versão 1.2 RC2 no momento em que crio esse tutorial que logo se tornara versão estavel, então estarei ensinando a utilizar o cake 1.2.

-Configurando o apache antes de ultizar o cake

--Habilitar Module Rewrite

Primeiramente abre o seu apache e nos arquivos de configurações procure por httpd.conf, abra no seu editor de texto favorito procure por "#LoadModule rewrite_module modules/mod_rewrite.so", esse "#" no arquivo significa que a linha esta comentada apenas retire o "#", salve o seu httpd.conf e reinicie o apache(por padrao do apache o Rewrite vem desabilitado se em seu httpd.conf não está com o "#" ignore essa parte do tutorial). Pronto seu apache está pronto para utilizar o cake.


-Baixando o cake.

Entre no site do cake http://www.cakephp.org/downloads e procure por "1.2.0.7296 RC2 (June 27, 2008)" que é a versão mais nova quando criei esse tutorial, clique e baixe com a extensão que quiser, eu utilizei a .zip, mas quem utiliza linux pode baixar o tar.bz2 e etc. Se quiser doar alguns dólares para o cake clique em "Any Donate", se quiser doar 1 dólar "Donate $1", se não quiser doar nada clique em "No thanks". A partir disso clique em "Download Latest Release" e salve o arquivo onde desejar.

-Instalando o cake.
Após baixar o cake, abre o arquivo .zip, você verá uma pasta com o nome da versão do cake, extraia essa pasta no seu apache e renomeio a pasta com o nome da versão para aula. Após isso entre em http://localhost/aula e verá algo semelhante com a imagem abaixo:
Se você viu igual a imagem a cima seu cakephp está rodando perfeitamente. Entretando se não viu um possivel erro para isso é se o modrewrite estiver desabilitado siga o passo "Configurando o apache antes de ultizar o cake", se esse passo foi seguido e mesmo assim houve algum erro por favor poste. Outro possivel erro é se você utiliza o linux, e aparecer que não e possivel escrever no diretorio tmp, de permissão 777 no diretorio tmp, na sua shell escreva "sudo chmod 777 -R caminho_do_cake/app/tmp".

-Hora de começar a cozinhar.
Bom padeiros(expressão muito utilizada para pessoas que usam o cake hehe), existe duas pastas importantes no seu diretorio aula, app e cake. Na pasta app ficara todos os seus projetos como Models, Views e Controllers, MVC, (sim o cake utiliza o MVC, explicarei o que é ao longo do tutorial, mas que quiser já ir vendo http://pt.wikipedia.org/wiki/MVC), que explicarei ao longo do tutorial o que é o MVC.Chega de bla bla bla e vamos lá:abra o seu editor de php preferido e
crie um novo projeto em php e e salva na pasta /app/controllers o arquivo "aulas_controller".

Vamos anotar?
O cake utiliza o metodo CamelCased, uau Matheus e o que é isso? Seguinte todo controller tem que ser PLURAL e todo Model SINGULAR, nossa Matheus, i dai? I dai que exemplo: Nosso tabela no banco de dados tem que ser no plural, vamos nomiar um exemplo como "Aulas", nosso model será "Aula" e o Controller Aulas fazendo assim uma ligação Model, Controller.

Em nosso arquivo "aulas_controller.php" vamos adicionar o seguinte codigo:


class AulasController extends AppController {
var $name = "Aulas";
var $uses = array();
}
?>

e pronto temos nosso primeiro controller feito.

--Entendendo o codigo acima:
Em class AulasController extends AppController { criamos a class "AulasController", como dito a cima "Aulas" está no plural pois é um controller, extends AppController significa que você está utilizando todos os metodos do cake para trabalhar como o cake. Então setamos o controller na $name como Aulas, a variavel $uses é para apenas dizer que não estamos querendo utilizar nenhum model, se não criacemos ela o Controller procuraria um Model.

Vamos anotar?
Um Model é utilizado para trabalhar com o banco de dados, então podemos concluir que o controller ve se está setado alguma variavel $uses se não estiver você está querendo trabalhar com o banco de dados, então havera uma constante ligação entre model e controllers para que finalmente o controller envie as informações para a view.

Vamos anotar?
A url no cake é definida da seguinte maneira: http://url/pasta/controllers/ação/get1/get2 e etc, url seria o nome do site, controllers seria o nome de algum controller e função veremos já já, e get seria um id passado pela views e etc que também veremos daqui a pouco. Obs:"pasta" sera opcional, existe muitas maneiras que veremos bem mais pra frente em outros tutoriais sobre "routes".

Vamos testar escreva no seu navegador http://localhost/aula/aulas:
Se você viu igualmente a mensagem a cima seu controller está funcionando, mas então que é essa mensagem de erro?

-Montando nossa primeira pagina
A mensagem de erro acima é bem simples, o cake está querendo dizer para nos, "seu controller está funcionando, mas necessita de uma ação para funcionar". Então vamos criar nossa ação:


class AulasController extends AppController {
var $name = "Aulas";
var $uses = array();

//criando nossa ação
function index(){

}
}
?>

--Entendendo o codigo acima:
Quando abrimos uma function dentro de nosso controller criamos uma ação, quando criamos a function index seria a mesma coisa como se tivessemos criado um index.php. Para testar vamos escrever em nosso navegador http://localhost/aula/aulas/index:

Se você viu a mensagem a cima seu codigo está funcionando corretamente. Entretanto você pode dizer, mas Matheus mais um erro o que é esse agora?

-Criando nosso primeiro View:

Toda ação precisa de um view. View é a pagina que mostrará o texto, imagens, inputs e etc para o usuario do site. Para criarmos uma view teremos que primeiro
1. Criar uma pasta com o nome de nosso controller dentro da pasta views
2. Criar o arquivo com o nome_da_acao.ctp

Vamos anotar?
A extensão .ctp nada mais é que o nosso codigo html + php e a extensão significa "Cake Template Pages".

Crie a pasta "aulas" dentro de app/views/ e depois crie um arquivo index.ctp e coloque o seguinte codigo:

<h2>Criado meu primeiro view em cake</h2>

Criado meu primeiro view em cake

--Entendendo o codigo acima:
Apenas criamos nosso codigo html dentro do index.ctp, se quiser testar o prorio cake já cria um layout pre-definido pra teste, nosso proprio layout criaremos nos proximos tutoriais, esse não abordara o tema agora.
Vamos vizualizar o que fizemos: http://localhost/aula/aulas/index e observe, se tudo ocorreu corretamente você cerá o texto "Criado meu primeiro view em cake".

-Trabalhando com controller e view:
Até agora aprendemos usar o controller sem enviar nenhuma informação para a view, a partir de agora vamos colocar a mão no fogo.
No controller aulas dentro da ação index, coloque:

class AulasController extends AppController {
var $name = "Aulas";
var $uses = array();

//criando nossa ação
function index(){
$this->set('criar', 'Criado meu segundo view em cake');
}
}
?>

e no view index.ctp:

<h2><?=$criar?></h2>

--Entendendo o codigo acima:
O metodo set() tem a seguinte definição de acordo com o manual do cake: set(string $var, mixed $value). Quando usamos a função set do cake o primeiro argumento é sempre o nome da variavel que será mandada pra view e o segundo argumento é o que será enviado, por isso em nosso $this->set('criar', 'Criado meu segundo view em cake') o primeiro argumento criamos a variavel criar e o segundo criamos o texto "Criado meu segundo view em cake".

Na view apenas adicionamos nossa variavel definada na função set do controller.

-Trabalhando com controller e view 2:
No controllers aula vamos criar o seguinte codigo:

class AulasController extends AppController {
var $name = "Aulas";
var $uses = array();

//criando nossa ação
function index(){
$aulas = array(
'texto' => 'Trabalhando com set em array',
'descricao' => 'Consegui'
);
$this->set('aulas', $aulas);
}
}
?>


e na view:

<h2><?=$aulas['texto']?></h2>
<h2><?=$aulas['descricao']?></h2>


Enviamos um array com uma variavel chamado $aulas, o que fizemos apenas demos um echo com o php na variavel, uma dica se quiser ver o que a variavel está trazendo para a view utilize o pr($variavel); onde variavel é seu array

Esperam que tenham gostado do primeiro tutorial do blog, esse é o primeiro tutorial do blog e o primeiro da minha vida, se contiver algum erro ou não conseguiu fazer algo por favor poste.

Ai galera, no proximo tutorial estarei ensinando a mexer com inputs e etc do cake não percam, até a proxima

2 comentários:

Anônimo disse...

Boa Matheus!

Bora desenvolver com cakephp aqui no brasil

Abs

freebox

Jhonnatan Cebidanes disse...

Ola Matheus,

Estou reavivando um topico de agosto desse mesmo ano, talvez você nem leia esse comentario, mas precisava agradecer porque estou começando a cozinhar agora segui a documentação+google+everthing e nada me falava como criar uma pagina estatica. Com seu tuto vi que bastava declarar a não utilização do model.

Então Parabens e Muito obrigado!