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