Slide Aula - Curso CakePHP

5,162 views
4,954 views

Published on

Published in: Technology

Slide Aula - Curso CakePHP

  1. 1. CakePHPTão fácil quanto fazer um bolo!
  2. 2. Roteiro• Conceitos• Framework• MVC• CakePHP
  3. 3. Quem sou eu...• Rangel Xavier – 25 anos• Sistemas de Informação• Aluno do Mestrado em Eng. de Software• Design & Desenvolvedor• J!platform/CSS/HTML• PHP
  4. 4. O que é?• O CakePHP é um framework para desenvolvimento de aplicações e websites, de forma que os programadores/desenvolvedores possam trabalhar simples.
  5. 5. O que é?• Qualquer programador, seja de qualquer nível, pode sim, aprender o cakePHP tranquilamente, pois, além de uma vasta documentação, o framework é muito bem organizado. Tudo isso totalmente gratuito.
  6. 6. História• Michal Tatarynowicz• Ano 2005• Quando Ruby on Rails começou a ganhar popularidade entre os desenvolvedores.• Versão 2.x
  7. 7. Motivos para utilizar• Ativo e com comunidade amigável;• Licença flexível;• Compatibilidade com PHP 4 e PHP 5;• Integrando funcionalidade CRUD (Create, Read, Update and Delete, ou Criar, Ler, Atualizar e Excluir) para interagir com o banco de dados;• Aplicações scaffolding;• Geração de código;• Arquitetura MVC (Model, View, Controller, ou Modelo, Visões, Controlador);• Requisições ao expedidor com clareza, URLs personalizáveis e rotas;
  8. 8. Motivos para utilizar• Validações internas;• Templates rápidos e flexíveis (Sintaxe PHP e com ajudantes);• Ajudantes para usar AJAX, JavaScript, HTML, formulários e outros nas visões;• Componentes de E-mail, Cookie, Segurança, Sessões, Manipulação de Requisições e outros;• Flexibilidade com cache;• Internacionalização;• Funciona em qualquer subdiretório do seu website, com poucas configurações no Apache
  9. 9. O que é aprender?• Orientação Objeto• PHP OO• HTML e CSS• JS• Convenções e particularidades do cakephp
  10. 10. POORevisal, que tal?
  11. 11. Objetos e Classes• Objetos reais possuem duas características. Estado e Comportamento. Por exemplo, um cachorro tem nome, raça, idade, tamanho e etc, e existem também comportamentos, como abanar o rabo, latir e “acasalam nas pernas alheias”.
  12. 12. Objetos e Classes• Exemplo mais simples:• No objeto lâmpada: – Estado: Acesa e Apagada – Comportamento: Ser acesa e ser apagada;• Então, tudo pode ser um objeto. Concordam?• A partir de agora, ESTADO = ATRIBUTO e COMPORTAMENTO = MÉTODOS/FUNÇÕES
  13. 13. Objetos e Classes• Classes são a base ou template para criação do nosso objeto. Ela define nossos atributos e nossos métodos utilizados.• Vamos criar nossa primeira classe.
  14. 14. Objetos e Classes• Classe – Primeiro passo é criarmos nosso arquivo animal.class.php. – Iremos criar a Class Animal, com atributos espécie, raça, nome, cor; – Iremos também criar o nosso compartamento, ops! nosso método falar; 5 min
  15. 15. Objetos e Classes• Objeto – Agora criaremos o objeto baseado na nossa classe animal. – Crie um objeto $animal e inicialize (chamemos a partir de agora de instanciar). – Palavra chave: new 5 min
  16. 16. Objetos e Classes• Voltar para Classe – Criar nosso método falar(); – Adicionaremos um novo atributo chamado som, e iremos chama-lo dentro de nosso método; – Vamos fazer juntos!
  17. 17. Herança• O processo de “ramificar” uma classe, chama-se Herança.• Como assim tio?• Tenho uma classe Cachaça, com atributos, $teor_alcoolico, $ml e $idade, podemos criar uma classe chamada Uisque, a qual, irá herdar todas as características da classe pai.• Vamos exemplificar 
  18. 18. Esquenta!• Criar uma Classe Pessoa, com atributos, nome, altura, peso, ano de nascimento;• Criar os métodos – calcularIdade(); – calcularIMC(); – IMC = Massa / Altura²
  19. 19. Frameworks dedesenvolvimento
  20. 20. PHP do “tempo do ronca” • Falta de Padrões; • Programação Orientada a Gambiarra, tornando o programador “doidim”; • Qualquer um desenvolvia; • Linguagem para pequenos projetos; • Script Kiddies, sobrinhos e “amigos que mexem com informática”
  21. 21. PHP evolução• OO verdadeiro;• Padrões em projetos;• Inúmeros projetos criados, documentados: FRAMEWORKS!
  22. 22. O que são?• É uma coleção de códigos-fonte, classes, funções, técnicas e metodologias que facilitam o desenvolvimento de novos softwares
  23. 23. O que são comumentre eles?• Ao olharmos atentamente para os principais frameworks de desenvolvimento para PHP, podemos observar que algumas tecnologias e técnicas são comuns à maioria deles.
  24. 24. Design Patterns• Padrões de Projetos, são formas já testadas e documentadas de se resolver certo tipo de problemas.
  25. 25. Modelo, Controle eVisão• O padrão MVC é a separação de lógica e apresentação, sendo que isso favorece o trabalho em equipe.• Dessa forma, qualquer mudança, por exemplo, na apresentação, teria pouco ou nenhum impacto nas demais camadas da aplicação.
  26. 26. Active Record• Facilita a manipulação de dados contidos em uma base de dados por aplicações desenvolvidas com o paradigma orientadas a objetos.• Desta forma, não é necessário que o desenvolvedor conheça uma linguagem de manipulação de dados como SQL, além de manter toda a aplicação desenvolvida no paradigma orientado a objetos.
  27. 27. AJAX• Existem diversas bibliotecas para se utilizar as funcionalidades do AJAX em suas aplicações facilmente. Entre elas, pode-se citar o Dojo e o Prototype. Alguns frameworks utilizam estas bibliotecas para facilitar o desenvolvimento de aplicações. O CakePHP e o Symfony, são principais neste quesito.
  28. 28. Internacionalização• É o processo de permitir que seja facilmente modificada o idioma da interface e de mensagens da aplicação.• Para facilitar o desenvolvimento deste tipo de aplicações, é necessário que o framework utilizado possua suporte a essa característica.• A partir do CakePHP 2.x, essa funcionalidade foi implementada.
  29. 29. Zend Framework Particularidades
  30. 30. Caracteristicas• Surgiu em 2005;• Versão atual: 2.0.2 (21 de setembro de 2012);• Zend Technologies, empresa mantenedora do PHP;
  31. 31. +e-• Segurança;• Certificação;• Vários componentes prontos;• Muitas configurações; (-)• Arquivo bootstrap manual; (-)• Curva de aprendizagem alta; (-)• ORM #fail; (-)• http://framework.zend.com/
  32. 32. Code Igniter Particularidades
  33. 33. Caracteristicas• Surgiu em 2006;• 2.1.1 (20 de junho de 2012);• Rasmus Lerdorf, aprovou!
  34. 34. +e-• Pequeno e Leve;• Sem tantas configurações;• Framework mais utilizado;• 2º lugar no Ranking de Frameworks PHP (Europa);• Documentação boa;• ORM #fail; (Data Mapper)• E muito muito muito mais 
  35. 35. LaravelParticularidades
  36. 36. Caracteristicas• Surgiu em 2011;• 3.2.7;• Rasmus Lerdorf, aprovou!
  37. 37. +e-• Limpo e Leve;• Baseado em “Routes”;• ORM o/;• Documentação; (-)• Material em Português; (-)• www.laravel.com
  38. 38. EngatinharComeçando a entender nosso CakePHP
  39. 39. Estrutura de Pastas cakephp/ /app/ /lib/ /plugins/ /vendors/
  40. 40. Diretório “pai”/app/ /config – arquivos de configuração. Ex.: DB, Email /console – onde fica o bake (feito tudo pelo terminal) /controller – onde fica nossos controladores /lib – bibliotecas de terceiros /locale – pasta para colocar arquivos de idioma /model – onde fica nosso models /plugins – local de nossos plugins /test – para colocar nossos testes unitários. /tmp – os arquivos temporarios/cache/logs. /vendor – scritps, classes, componentes de terceiros. /view – arquivos da view /webroot – arquivos de estilo, javascripts e afins.
  41. 41. Outros conceitos• Helpers: “Ajudantes”, ele auxiliam a criação de algo dentro da aplicação. Ex.: Formulário, Gerenciamento de Cache, HTML entre outros;• Cada controller o qual é necessário utilização de algum helper, pode ser informado por meio de uma array $helpers. Veja a sintaxe:
  42. 42. Helpersclass MeuController extends AppController{ public $helpers = array(‘form’, ‘html’);}
  43. 43. Helpers Padrões• CacheHelper• FormHelper• HtmlHelper• JsHelper• NumberHelper (Número e formatos de moedas)• Paginator• RSS• SessionHelper• TextHelper (Formação de textos “inteligentes”);• TimeHelper (Formatação de data e hora)
  44. 44. Scaffolding• É uma técnica que permite ao desenvolvedor definir e criar uma aplicação básica que possa inserir, selecionar, atualizar e excluir objetos, inserindo apenas o atributo/objeto $scaffold em seu controller.
  45. 45. Sintaxe Scaffolding<?phpclass MeuController extends AppController {public $scaffold;}
  46. 46. Componentes• Componentes (components) são pacotes com funções que são usadas para serem utilizada entre os controllers.• Se você está querendo copiar e colar coisas entre seus controllers, talvez seja uma boa ideia considerar a possibilidade de empacotar estas funcionalidades em componentes.
  47. 47. Componentes Padrões O CakePHP também já vem com uma quantidade fantástica de componentes incluídos, que você pode usar para lhe ajudar com:• Segurança• Sessões• Lista de Controle de Acesso (do inglês ACL, Access control lists)• Emails• Cookies• Autenticação• Tratamento de Requisições
  48. 48. Requisições (URLs)http://localhost/controller/function/param entroExemplo real:http://localhost/usuarios/deletar/2/
  49. 49. Teste
  50. 50. Verdadeiro ou Falso• O Helpers auxiliam o desenvolvedor na criação de Sessões e manipulação no BD;• Os componentes são conjunto de códigos que são utilizados várias vezes entre os Controllers;• O diretório principal do CakePHP é o lib;• O scaffolding faz uma simulação automática de minha aplicação;
  51. 51. Verdadeiro ou Falso• O Helpers auxiliam o desenvolvedor na criação de Sessões e manipulação no BD;• Os componentes são conjunto de códigos que são utilizados várias vezes entre os Controllers;• O diretório principal do CakePHP é o lib;• O scaffolding faz uma simulação automática de minha aplicação;
  52. 52. Camada “C” Controller
  53. 53. Controllers• Os controllers fornecem uma série de métodos que são chamados de ações. Ações são métodos em um controller que manipulam requisições. Por padrão, todos os métodos públicos em um controller são ações e acessíveis por urls.
  54. 54. Controllers• A classe AppController é a mãe de todos os outros controllers da sua aplicação. O próprio AppController é estendida da classe Controller que faz parte da biblioteca do CakePHP.• Todos seus controllers devem ser estendida desta.
  55. 55. Controllers<?phpclass MeuController extends AppController{}
  56. 56. Controllers• Convenção:<?phpclass NomeDoSeuControllerEmCamelCase extends AppController{}
  57. 57. Controllers• Atributos:$nameO atributo deve ser definido com o nome do controller.Normalmente é apenas a forma plural do nome do model principalque o controller usa. Esta propriedade não é requerida mas salva oCakePHP de ter que flexionar o nome do model para chegar novalor correto.
  58. 58. Controllers$this->setEnviar atributo para view;Sintaxe$this->set(‘atributo’, ‘conteúdo do atributo’);
  59. 59. Controllerssave(“dados_a_serem_salvos_no_db”)Salva dados no banco;Sintaxe$this->MyModel->save($this->data);
  60. 60. Controllersdelete(“dados_a_serem_deletados_no_db”)Deleta dados do banco;Sintaxe$this->MyModel->delete($id);
  61. 61. Controllersredirect()Controle de Fluxo e redirecionamento de páginas;Sintaxe$this->redirect(array(‘controller’ => ‘usuario’))
  62. 62. Camada “V” Views
  63. 63. Views• A camada responsável pela visualização da interface. Aqui ficará nosso HTML e o mínimo de PHP possível.• 90% HTML e 10% PHP;
  64. 64. Views• Para cada controller, é necessário criar um diretório com o seu nome do e dentro dela os arquivos com os nomes de cada ação.• Certinho?
  65. 65. Views - Exemplo• Existe um Controller chamado Alunos, e neste controller existe uma ação inserirnota() e calcularmedia();• Irei criar uma pasta dentro de /Views/ com o nome do Controller, Alunos, e dentro dessa pasta, cada ação do Controller, ganhará um arquivo específico com a extensão .ctp;• Ficando desta maneira
  66. 66. Views
  67. 67. Camada “M” Models
  68. 68. Models• Os models (modelos) formam o coração de sua aplicação. Tratam das validações, armazenamento e recuperação dos seus dados
  69. 69. Models• Nossa Model deve ser no singular herdando de AppModel. Se nosso Controller chama Alunos, nossa model irá se chamar Aluno.
  70. 70. CVM ops! MVC• Controller camada de Negócios;• View camada de Visualização;• Model camada de Persistência;• Dramatização!
  71. 71. Baixando o CakePHP• Acessar o site oficial do http://cakephp.org/• Pelo GitHub https://github.com/cakephp/cakephp/zi pball/2.2.3
  72. 72. Descompactar• Descompacte o arquivo dentro do servidor local.• Renomear a pasta para /projetocake 10 min
  73. 73. Configuração• Gerar outro novo código de segurança, nosso atributo security.salt no arquivo config/core.php• Para simular um projeto real, iremos gerar uma chave segura.• http://www.md5encrypter.com/• Gerar outro código para o security. cipherSeed.
  74. 74. Configuração BD• Próximo passo é configurar o banco de dados. No nosso arquivo database.php.default• Precisamos criar nosso banco de dados e nossa tabela.• Veja:
  75. 75. Banco de Dados• Padrão das tabelas, sempre no PLURAL.• Nome do Banco: projetocake• Nome da Tabela: Noticias• Campos: id, titulo, conteudo, autor, created e modified
  76. 76. Revisão• Tabelas do Banco: Plural• Model: Singular• Controller: Plural seguido o nome Controller;
  77. 77. Teste
  78. 78. Pergunta 01• Quem é o responsável pela comunicação dos dados com o Banco?a) Viewb) Databasec) Modeld) DataMapper
  79. 79. Verdadeiro ou Falso• Para cada método do meu Controller, é necessário criar um arquivo .ctp dentro da pasta com o nome de meu Controller;• Models são no singular e as tabelas no banco de dados;• As validações são feita no Controller• As views é a parte da aplicação onde fica mais código PHP.
  80. 80. Verdadeiro ou Falso• Para cada método do meu Controller, é necessário criar um arquivo .ctp dentro da pasta com o nome de meu Controller;• Models são no singular e as tabelas no banco de dados;• As validações são feita no Controller;• As views é a parte da aplicação onde fica mais código PHP;
  81. 81. Meu 1º Controller
  82. 82. Meu 1º Controller• Criar um arquivo NoticiasController.php• Criar Class com o mesmo nome do arquivo;• Fazer a herança;• Inicializar o atributo $name; Tempo: 15 min
  83. 83. Meu 1º Controller• Vamos utilizar na prática agora no Scaffolding;• Para isto basta inicializar nosso atributo public $scaffold;• Vamos olhar a mágica!
  84. 84. Meu 1º Controller• Por padrão, o cakePHP busca o método index();• Então criaremos o método index();• Outro erro? Por que?• Criamos o nosso arquivo index.ctp em nossa view.
  85. 85. Meu 1º Controller• Enviar um atributo conteúdo um valor, por exemplo, “Todos as noticias”.• Para isso, basta utilizar a função set(), visto anteriormente; $this->set(‘atributo’, ‘valor’); Tempo: 15 min
  86. 86. Minha 1ª view• Vamos colocar apenas um titulo em html e “echoar” o nome de nossa variável, que enviamos para nossa view. Funcionou?o/o/o/o/o/o/o/o/o/o/o/o/o/
  87. 87. Minha 1ª Model• Essa é com vocês!• Como cria uma model?• Singular ou Plural?• Herda de quem? Tempo: 15 min
  88. 88. Inserir dados Inserir dados direto no banco, para testarmos nossa capturar de dados; Entre no seu SGBD e coloquem textos fictícios em nossos campos; Tempo: 10 min
  89. 89. Capturar dados• Para capturar os dados do banco utilizando find(); $this->Model->find(‘all’);
  90. 90. Find()• O método find() captura os dados da base;• Os parâmetros possíveis para esse método são: all, first,count, list, neighbors or thr eaded
  91. 91. Find(‘all’)• Esse método retorna para nossa view os dados do banco em forma de array.
  92. 92. Editar a view var_dump($array); Essa função exibe a estrutura/conteudo de um array. Vamos utilizar essa função em nossa view.
  93. 93. Editar a view<table> <tr> <td>ID</td> <td>Titulo</td> <td>Data</td> <td>Ações</td> </tr> <?php foreach ($noticias as $noticia) { ?> <tr> <td><?php echo $noticia[‘Noticia][id];?></td> <td><?php echo $noticia[‘Noticia][‘titulo];?></td> <td><?php echo $noticia[‘Noticia][‘data];?></td> <td></td> </tr> <?php }?></table>
  94. 94. Index Finalizado• Com isso finalizamos nosso primeiro método!• Criamos o método index();• Criamos o arquivo index.ctp;• Enviamos para a view todos os dados do banco;• Editamos o layout da View;
  95. 95. Método delete()• O que vamos utilizar? – Passar por parâmetro da função o id ao qual quer deletar. Se existir, utilize o método $this->Model->delete($id); – Nada na view; Tempo: 20 min
  96. 96. Método adicionar()• Missão agora é criar nosso método adicionar().
  97. 97. Método adicionar()• O que vamos utilizar? – $this->Model->save($this->data); – $this->data; • É um array contendo os dados enviado da view, via POST ou GET. – Vamos utilizar nosso primeiro Helper, para criar nosso Formulário na camada View, no arquivo adicionar.ctp;
  98. 98. FormHelperFormHelper::create(string $model = null, array $options = array()); É o método para iniciar a criação do nosso formulário. Ele que criará o cabeçalho de nosso formulário. Podemos definir o method, action e name do formulário. Por padrão o method é POST;
  99. 99. FormHelper<?php echo $this->Form->create(User, array(action => login)); ?> Saida:<form id="UserLoginForm" method="post" action="/users/login">
  100. 100. FormHelper• Para cada campo do nosso formulários, os “inputs” é o FormHelper oferece um método simples para isso. echo $this->Form->input(‘campo, array(label => ‘Minha Label));
  101. 101. FormHelper <?php echo $this->Form->end(Finish); ?> Saída: <div class="submit"> <input type="submit" value="Finish" /> </div> </form>
  102. 102. Criar view adicionar Vocês vão criar todos os campos que desejamos no Formulário de Adicionar, utilizando o FormHelper e em seguida iremos testar nossa aplicação. Tempo: 30 min
  103. 103. SetFlash Para uma mensagem de alerta nos controllers, o Componente Session nos da um método para isto. O método SetFlash. $this->Session->SetFlash(‘Mensagem’);
  104. 104. Redirect Para redirecionarmos de um controller para outro, o CakePHP nos disponibiliza um método para isto. $this->redirect(array(‘action’=>’pra onde vai’))
  105. 105. HtmlHelper O CakePHP também disponibiliza um Helper para o HTML dentro de nossas views, veremos agora alguns métodos utilizado.
  106. 106. HtmlHelperHtmlHelper::image(string $path, array $options = array())Parameters:$path (string) – Path to the image.$options (array) – An array of html attributes.Exemplo:echo $this->Html->image(cake_logo.png, array(alt => CakePHP));Saida:<img src="/img/cake_logo.png" alt="CakePHP" />O caminho padrão das imagens é o: /app/webroot/img/.:
  107. 107. HtmlHelperHtmlHelper::link(string $title, mixed $url = null, array $options = array(), string $confirmMessage = false)Parameters:$title (string) – O texto a ser exibido;$url (mixed) – Para onde será enviado;$options (array) – An array of html attributes.Exemplo:echo $this->Html->link(Enter, /pages/home, array(class => button, target => _blank));Saida:<a href="/pages/home" class="button" target="_blank">Enter</a>
  108. 108. Método view()public function view($id = null) { $this->Model->id = $id; $this->set(‘atributo, $this->Model->read());}
  109. 109. View.ctp<h1><?php echo $atributo[Model][titulo]?></h1><p><small>Created: <?php echo $atributo[Model][created]?></small></p><p><?php echo $atributo[Model][conteudo]?></p>
  110. 110. Exercício Método Listar, para exibir o conteúdo. $titulo Feito por: $autor $conteudo $data <tr> http://localhost/noticias/listarNoticias Titulo deve apostar para o método View Tempo: 40 min
  111. 111. Exercício Criar uma calculadora, com métodos somar, subtrair, dividir e multiplicar, passando os valores apenas pela URL.
  112. 112. Exercício Criar uma calculadora, com métodos somar, subtrair, dividir e multiplicar, passando os valores apenas pela URL, utilizando o FormHelper

×