Transcrições
1. Introdução: Bem-vindo a esta classe em framework PHP sinfonia. É incrível ter você aqui. Symphony é usado por um monte de negócios do mundo real. Assim, você estará obtendo experiência que ele pode usar em seus projetos pessoais e também experiência
comercial para alimentação indo lá fora como um empreiteiro ou trabalhando para uma empresa de software. Nós fazemos isso prático como todos os projetos de compartilhamento de habilidades e construímos uma loja de e-commerce juntos. Então vamos começar.
2. Symfony CLI: A sinfonia CLI nos dará um monte de ferramentas de linha de comando podemos usar para fazer carregar coisas úteis. Então, para chegar a isso, podemos entrar em um site sinfônico e você receberá instruções para qualquer plataforma em que estiver. Então, se você estiver no Mac, você só precisa copiar isso para o seu terminal. A mesma coisa com o Linux. Se você estiver no Windows, então você terá executável para download e você pode baixá-lo. E isso o levará através do processo de instalação. Seja como for que você fizer isso, então você pode abrir seu terminal no Linux ou Mac. E você pode fazer prompt de comando ou cygwin no Windows. E se você apenas digitar sinfonia, vamos limpar isso primeiro. Então, se você receber um comando não encontrado, você saberá que ele não funcionou. Se você obter todas essas informações com a CLI sinfonia e todos os comandos que você pode fazer, então, você sabe que ela está configurada e pronta para uso.
3. Como verificar seu ambiente: Uma vez que temos a sinfonia CLI, então para cima, podemos verificar se tudo o resto está configurado usando a sinfonia CLI. Então, se fizermos Symphony, e então se fizermos verificar os requisitos de dois pontos, isso irá verificar se temos tudo o que precisamos na configuração do PHP corretamente. E neste caso, boas notícias, eu tenho. Agora há alguns avisos aqui que são recomendações opcionais, e há algumas coisas que eu poderia mudar, mas você absolutamente não precisa fazer isso. Contanto que você consiga o ok aqui, você pode ignorar os avisos. Isso pode ser útil para uma configuração de produção, mas no caso do Git está começando, então nós temos
isso, ok, não importa se temos alguns avisos de par.
4. Instalando Symfony: Agora que sabemos que temos nossos ambientes funcionando corretamente, vamos em frente e instalar fora do projeto sinfonia. Então, quando se trata da linha de comando, e eu vou digitar sinfonia New. E então vamos dar o nome do nosso projeto. Agora podemos fazer traço, queda de traço. E isso iria instalar sinfonia e um monte de bibliotecas que normalmente
precisaríamos em um aplicativo web de pilha completa. Mas neste caso, quero manter as coisas estreitas que só instalamos o que precisamos. Temos o que precisamos e nada mais. E podemos mostrar a instalação de bibliotecas adicionais no caminho. Então eu vou pular isso. E eu vou chamá-lo de Projeto Bike Shop. Então só sinfonia, nova loja de bicicletas. E então sinfonia e vamos começar a criar tudo isso. Então vamos tomar alguns momentos para toda essa rotação através da sinfonia
IS vai e busca todas as dependências. E então nós temos, ok, ótimo, para que possamos abrir isso em nosso editor de código. Vou usar o Sublime aqui. Mas você pode usar o que quiser. Ok, legal. Então nós já temos um monte de arquivos lá. Vá para esse diretório público, um diretório de origem. Para que eu possa ignorar. A sinfonia vai nos dizer as coisas que não deveríamos nos comprometer a conseguir. Nós temos o, toda a configuração para Symphony vive no diretório S config. E por padrão, nós já temos um carregado este material. E nós temos um arquivo de compositor com um monte de dependências aqui também. Ok, legal.
5. Servidor de devoção do Symfony: Agora que instalamos nossa primeira aplicação sinfônica, vamos executá-la. Então nós voltamos ao Terminal e vamos CD no diretório que você acabou de criar. Neste caso, liguei para a minha loja de bicicletas. E vamos fazer o servidor de sinfonia, início de carillon. E isso vai parar servidor de desenvolvimento de sinfonias. Nós apenas como PHP é built-in servidor web, mas específico para Symphony. E então se formos para localhost, 8 mil. Perfeito. Então, estamos apenas dizendo a página padrão que a sinfonia cria quando você cria um novo aplicativo. Obviamente vamos criar nossa própria página aqui, mas isso parece bom. Já está funcionando e funcionando.
6. Arquitetura de símbolos: Nesta lição, eu quero abordar algumas das arquiteturas básicas da Symphony. Symphony usa uma arquitetura MVC Model-View-Controller. E a maneira como vamos fazer isso é vamos
criar algumas classes que são chamadas controladores. E dentro desses controladores, isso terá um monte de funções. E cada uma dessas funções representará uma página diferente e produzirá algumas coisas. Então isso poderia ser um modelo ou que poderia ser um monte de Jason, ou que poderia ser um monte de HTML bruto. No entanto você deseja saída, essa função retornará, ele irá mapear um URL para uma classe específica e essa função específica dentro dessa classe, e então esse método irá retornar algo. Então, se olharmos para a forma como a estrutura MVC, temos o nosso modelo, que é nossas entidades de banco de dados tipicamente irá armazenar aqueles na entidade de origem. Nós, em seguida, temos uma visão que é tipicamente os nossos modelos geralmente irá reduzir para novamente motor. E vamos cobrir tudo isso com mais detalhes à medida que percorrermos o curso. E então temos nossos controladores, que são nossas classes PHP, que conectam os dois juntos. A sinfonia é ligeira, frouxamente acoplada, por isso é fácil dissociar as coisas. O que isso significa é que você não tem que usar doutrina para fazer o seu banco de dados e você não tem que usar o motor galho para fazer o seu modelo. Se você quiser trocar um e impulsionado para fazer seus bancos de dados ou Smarty para fazer seus modelos, você pode. Mas a sinfonia também torna as opções padrão muito fáceis de integrar. Então, se você só quer pegar o material que funciona muito bem na caixa e você não quer mexer trazendo diferentes bibliotecas. As coisas vão funcionar muito bem juntas.
7. Criando um controlador: Agora temos este aplicativo funcionando. Vamos em frente e realmente criar uma página, ou pelo menos um simples pequeno mundo Olá. Então a primeira coisa que vamos precisar fazer é criar um controlador. E nós temos essa pasta de controle, mas não há nada nela no momento. Então vamos começar escrevendo um novo. Coloque-o no namespace. E vamos precisar retornar um objeto de resposta. A sinfonia dá-nos um destes. E então criaremos nossas cargas de controle chamado este primeiro gramado de controle. Vou criar um método que é chamado homepage. E vai retornar uma resposta. E no objeto resposta finlandês, podemos apenas dar-lhe uma string com algum HTML. Eu vou dizer que esta praga controlá-lo, bate-me. Então, quando esse diretório do controlador de origem, ok, então temos maior controlador de ponto, criamos um método de página inicial vai retornar os respondentes. E então nós realmente retornamos essa resposta, que nós recebemos da sinfonia aqui. E nós apenas retornamos alguns HTML que diz, bem-vindo. Então a próxima coisa que precisamos fazer é por que esta rota até dizer Symphony quando eles devem enviar o usuário para esta página.
8. Adição da rota: Para ligar caminho, precisamos ir para o diretório config e encontrar esta munição routes.rb. E alguém já é dado como algo para começar aqui. Então vamos dizer que queremos esse corte primeiro. E isso vai para o primeiro controlador e nós chamamos-lhe a página inicial do método. Então estamos dando o caminho. E eu vou dar a vocês um controlador e o nome do método, que corresponde ao que criamos aqui. E agora, se formos cortar primeiro, perfeito, temos nossa simples mensagem de boas-vindas.
9. Usando anotações: Temos rota rápida aqui e definimos isso na demonstração routes.js. Mas o problema com isso é que então teríamos que adicionar cada r2 neste arquivo YAML. E em um grande projeto que se tornaria difícil muito rapidamente. Portanto, há uma maneira mais popular de fazê-lo chamada anotações. Vamos fazer isso agora primeiro, descomentar isso, o que significa que isso vai parar de funcionar. O que não é problema. Porque em vez disso, vamos usar anotações. Então precisamos trazer a anotação, componente
sinfonia, anotação de roteamento. E então tudo o que vamos fazer é adicionar um comentário aqui usando alguma sintaxe especial de anotação, digamos root psi barra primeiro. Está bem, adorável. Por isso, também precisamos trazer o pacote de anotações. Então vamos pausar isso e vamos compor, exigir anotações. Ok, agora, vamos reiniciar a profundidade da sinfonia. E então se tentarmos de novo agora, perfeito, de volta. Então, não usamos mais no próximo routes.js homólogos comentaram. Agora, toda vez que criar um método, podemos adicionar esta anotação linha e dizer sinfonia o que queremos que o URI seja para este método particular.
10. Templating: Nesta lição, vamos introduzir o conceito de modelagem. Então, normalmente, quando estamos construindo sites, queremos nossa lógica e somos projetados para ser separados quanto possível para que não estejamos misturando tudo. E é muito fácil ver quais bits projetam, quais bits lógica. E quando queremos editar um deles, não
corremos o risco de quebrar o mais. E por padrão tipo de sinfonia vem com galho. Então vamos precisar instalar galho como uma biblioteca separada. E você não tem que usar galho, você pode conectá-lo motor de modelagem diferente em tal como bigode inteligentemente. Mas se você escolher ir galho e vamos acordar o exemplo do ninho. Ele vai integrar muito bem com a sinfonia porque galho
também é construído pela mesma equipe que constrói sinfonia. E assim eles se certificam que ele se integra muito bem se você optar por usar isso. Você também pode pegar galho fora da Symphony e usá-lo em seus próprios projetos, se você quiser, porque eles estão frouxamente acoplados. Então, um modelo de galho parece HTML, mas apenas com alguma sintaxe especial galho. Então, quando queremos adicionar uma variável lá,
usamos este chaves duplas e, em seguida, o nome da variável. E também podemos colocar alguma lógica lá como loops, que é onde usamos o colchete e, em seguida, o sinal de porcentagem. E isso nos permite fazer alguns loops. Também podemos fazer um pouco de filtragem. Eu vou passar por como usar tudo isso neste módulo.
11. Instalando o Twigg: No nosso primeiro controlador, acabamos de escrever “O Odeia ao Continente “para uma corda, o que é um pouco confuso. Seria melhor ter templação. E sinfonia não vem com templação porque é frouxamente acoplado. Mas há uma biblioteca de modelos construída pela Symphony. Ele se integra muito bem chamado galho. E podemos ir em frente e instalar isso agora. Então vamos voltar para a nossa linha de comando. Quer compor um galho exigem. Ótimo, então isso é galho instalado. E agora ele pode ir em frente e criar um modelo.
12. Criando um modelo: Agora que temos galho instalado, vamos criar um modelo. Mantenha-o bem simples. E bem cone. Na verdade, esta pode ser a página inicial, digamos homepage. E isso é tudo o que precisamos por agora. Vamos chamá-lo de bem-vindo, e vamos chamá-lo de bem-vindo ponto HTML, ponto galho. Então um nome de modelo, então eles tipo de dados. E então nós vamos adicionar este galho de ponto no final. E nós vamos colocar isso no diretório templates. Ótimo, agora vamos colocar isso no nosso controle.
13. Usando o controlador abstrato: Vamos criar controlador para renderizar este modelo. Então, provavelmente podemos copiar e colar este código do primeiro controlador, e vamos chamá-lo de controlador de boas-vindas. No controle de origem ou na bandeja direta. Vou mudar o nome. Slash bem-vindo. Ainda podemos chamar o método homepage e
Bob e , em seguida, carregar na biblioteca de tweets e renderizar nosso self. Podemos usar sinfonias controlador abstrato para nos dar um bom método ajudante pouco. Então a primeira coisa que precisamos fazer é trazer controlador abstrato. E então essa aula vai se estender. Controlador abstrato agora se estende mesmo. E o que isso significa é que agora temos este adorável executar o método onde se dermos o nome do nosso modelo, que é o que chamamos,
Hey, bem-vindo ao HTML que galho. Podemos apenas retornar o resultado
deste método aleatório e que irá renderizar o modelo. Esperemos. Então salve o que fizemos e então
voltaremos para um servidor de desenvolvimento. E temos uma barra. Bem-vindo. Se pararmos quando incutirmos galhos, vamos recomeçar isso. E lá vamos nós. É renderizado um modelo perfeito.
14. Variáveis no Twig: Isso é bom para uma página estática muito simples. Mas realisticamente em algum momento vamos querer que o controlador injete alguns dados neste modelo. E isso é muito fácil de fazer com um ajudante. Então aqui para este esforço aleatório, podemos apenas passar uma matriz de dados para aqui. E neste caso, vou acrescentar que dia é hoje. Assim chamado o método de data padrão com l minúsculo que nos dará o dia. E então podemos adicionar isso ao nosso modelo também. Então, digamos que hoje é e em galho para renderizar uma variável, usamos colchetes duplos. Então, passando o dado aqui, e então nós estamos renderizando um modelo. Haha. E se atualizarmos a página, diz que hoje é quarta-feira, que é o diam filmando isso. Então pague. Certo. Então parece que está funcionando.
15. Segurança de twig: Se formos renderizar variáveis no modelo, e isso pode causar problemas de segurança. Mas felizmente, galho exceto para lidar com isso escapando por padrão. Então digamos que eu mude isso e de alguma forma eu sou maliciosamente passada em uma tag de script, algo assim. O que aconteceria então? Bem, galho na verdade apenas renderizá-lo para que ele escapasse dos caracteres especiais e apenas renderizasse nosso texto simples, então nada para se preocupar com isso. Mas o que acontece se você realmente precisa renderizar alguns, Você tem uma variável que contém algum HTML e você precisa que HTML para ser processado. Bem, você pode fazer isso apenas tendo um tubo e, em seguida, usando esta função bruta, que vai dizer galho para não escapar dele. Agora, neste caso, isso seria ruim porque agora ele está apenas executando o código. Embora neste caso é, Vamos mudar isso para uma certa pequena atualização nafta visível. E agora temos esse JavaScript louco aparecendo. Não é bom. Então, se você precisar renderizar HTML, você pode usar essa tag de regra. Mas você precisa ter certeza de que limpou sua entrada para ter certeza que ninguém está injetando nenhum script perigoso lá. Mas por padrão, mesmo que alguém injete um script de alguma forma, ele só o renderizará como texto. Ok, isso parece bom. Vamos redefinir e S dois chapéu foi. E seguir em frente.
16. Como usar layouts: Este modelo está funcionando, mas não tem, por exemplo, um título ou nenhuma das tags de corpo de cabeça HTML. Agora nós poderíamos apenas adicionar isso para dar as boas vindas HTML que galho, mas agora seria um grande esforço porque então nós teríamos que fazer isso para cada template que criamos. E se quiséssemos atualizá-lo, teríamos que passar por tudo. Então, uma maneira melhor que podemos usar sua herança de modelo. E podemos criar um modelo de layout padrão e, em seguida, incluir isso em tudo isso. Vamos fazer isso agora. Então vamos parar por todo esse galho layout.html. E vamos salvar isso no diretório de modelos. Widgets vão responder. E isso vai colocar o principal dentro do principal vai voltar a isso também. E está em algumas quebras de linha aqui porque ainda não desenhamos o cabeçalho no flutter, então não vai ser óbvio. E aqui dentro é onde a magia vai acontecer. Então vamos em galho, quando fazemos parênteses por cento, então estamos fazendo algum tipo de lógica. Vamos chamar esse bloco de conteúdo. E então nós vamos adicionar este bloco n aqui. Não precisamos disso, acho que nisso. Então o que fizemos aqui é que definimos um layout. E então nós
dissemos aqui, vamos colocar o conteúdo. Então, se voltarmos para um modelo de boas-vindas e vamos fazer algumas mudanças aqui. Então eu vou dizer que este modelo se estende, rapaz I HTML que galho. E, em seguida, este bit vai ser o bloco de conteúdo. E poderíamos adicionar quantos blocos quiséssemos. Então, se quisermos um bloco de fotos separado ou um bloco de cabeça aqui em cima, nós também poderíamos adicioná-los e poderíamos obter quantos blocos quiséssemos aqui. Agora, dizendo para usar o layout como base. E no espaço de conteúdo que definimos, haha, insira este HTML. Então é refresca agora. E ótimo, então nós temos nosso cabeçalho, nós temos pé para, nós temos todas as coisas no laboratório. E então, no meio, aqui, temos nosso conteúdo específico para esse modelo.
17. O que são ativos estática?: Vamos esclarecer brevemente quais são os ativos estáticos. Então temos nossas páginas regulares com nosso PHP, estamos gerando uma página sob demanda e que pode ser personalizada para este usuário. Mas algumas coisas são apenas entregar a mesma coisa para todos, como imagens, ícones, folhas de
estilo e JavaScript. Podemos compilar estes e depois enviá-los para todos. Poderíamos colocá-los em um CDN, uma rede de distribuição de conteúdo. E nós não queremos que eles passem por toda a pilha PHP porque
nós, nós realmente não precisamos verificar coisas como permissões ou personalização. Só precisamos enviar o CSS para eles, e é disso que estamos falando aqui.
18. Servindo arquivos estáticos: Symphony nos dá este diretório público aqui para salvar ativos fora de e não jurá-lo, salvando este auto-gerar index.html, que configura tudo sinfonia completa. Então, digamos que queríamos ter um arquivo robots.txt. Poderíamos ir ao diretório público e guardar isso. E então imediatamente, se tentarmos acessar isso, então funciona, o que é ótimo. Agora nós poderíamos fazer uma coisa semelhante para o CFS, onde nós apenas salvá-lo no diretório público e então nós colocá-lo lá. Mas seria bom se pudéssemos fazer algo um pouco mais elaborado com ele. E vamos procurar no resto deste módulo.
19. Pré-processamento de SSAS.: Temos nosso site aqui, mas parece muito feio. Então seria bom se pudéssemos estilizá-lo com CSS. Mas, idealmente, queremos usar algum tipo de pré-processador CSS como dura ou meias. Porque estes nos dão todos os tipos de extensões agradáveis para CSS. Então, para este exemplo, vamos usar SAS. Se você ainda não o viu, você pode procurá-lo no site. E nos fornece um monte de coisas legais, como variáveis. Para que, se quisermos definir, digamos, uma cor e usá-la em muitos lugares diferentes em nossas folhas de estilo, podemos simplesmente defini-la como guardiões. E então podemos usar essa variável. E se quisermos atualizá-lo, só
precisamos atualizá-lo em um só lugar. Então eu vou colocar um link para as ações SAT na seção de recursos desta lição. Mas, felizmente, a Symphony tem um grande apoio nisso. Nós temos o que é chamado de sinfonia em chamada, e vamos ver como configurar isso agora.
20. Instalando o Encore: Vamos levantar e correr. Temos cooperativas da Symphony. Vou abrir uma nova guia do terminal aqui. Ainda estamos no diretório certo. E eu vou executá-lo. Compostos que requerem sinfonia barra web pack no pacote de carvão. Então isso vai trazer para baixo um pouco do que precisamos. Mas a outra coisa que vamos precisar é porque a web part não funciona em tarefas ao invés de PHP. Nós também vamos precisar instalar todas as nossas dependências de nós, que é NPM é como o compositor de NodeJS. Então vamos em frente e executar uma instalação NPM aqui também. E assumir esse tempo. NPM. Mas os literais podem ser enormes. Ok. Legal. E isso está feito. Então olhamos para o projeto agora há um par de mudanças, bem como nossas dependências compositor. Temos este pacote. JSON, que é o quê? Que é o gerenciamento de dependência do NPM. Instalou um monte de roteiros para nós, para o nosso objetivo final. E é também criar esses arquivos de dependência que acabamos de instalar com a instalação do NPM.
21. Compreensão de ativos: Então, temos dependências aqui e que será muito parecido com compositor tem este diretório de fornecedor. Nós temos este nó sublinhado módulos, que é onde NPM coloca suas dependências. E também temos estes pequenos comandos aqui. E para renomeá-los, podemos fazer npm run dev. E este é o comando que vamos usar para construir ativos estáticos. Então, em relação aos ativos de bondade agora, onde temos esse CSS e temos esse arquivo JS também. E então este é o lugar onde vamos editá-los. E então quando eu renderizei o criado neste arquivo de compilação, onde nós obtemos esta versão compactada. Essa é a saída do pacote web. E estas são as cópias que vão invadir a nossa página web. Então nós estamos escrevendo eles aqui e web pack irá compilá-los neste diretório de compilação. E podemos incluí-los a partir disso.
22. SASS de abertura: Então, agora temos web pack levando nosso CSS e
JavaScript e compilando-o pronto para o nosso Incluindo. Mas nós realmente não habilita o imposto ainda porque on-call suporta vários pré-processadores CSS diferentes, Você também pode usar menos e overs. Então precisamos ir em frente e configurá-lo para SAS também. Então vamos começar por mudar isso. Vamos renomear isso. Sas usa SCSS. Então vamos mudar isso. E então vamos para este app.js e vamos atualizar esta referência aqui. Então ele está apontando para o arquivo certo. E então vamos descer para esta web part, dot-com ab.js. Foi criado quando instalamos o onco. E por padrão, e temos este SAS pré-carregado, mas ele comentou. Então vamos remover esse comentário. E então nós temos isso habilita carregador Sass lá dentro. E, finalmente, precisamos instalar outra dependência usando o NPM para fazê-lo processar isso. Então vamos voltar para a nossa linha de comando. Faça npm install dash, dash save dev para instalar a dependência e escrever essa alteração no package.json. Então, quando estamos instalando dependências do Composer, os judeus são automaticamente adicionando-o. Aqui, precisamos dizer explicitamente ao npm que queremos que ele se lembre que
instalamos essa dependência e vamos precisar de um carregador Sass. E SAS. Certo, ótimo, e isso está instalado. Então agora vamos fazer npm run dev. Só para verificar se tudo está funcionando. Ótimo, então não explodimos nada. Isso é uma boa notícia. Agora, vamos em frente e trazer os ativos que criamos aqui.
23. Incluindo nossos ativos: Agora que temos o nosso SS compilando neste diretório de compilação pública, Como podemos colocá-lo em nosso modelo? Bem, nós temos uma pequena etiqueta que vai nos ajudar com isso. Então, abrimos o nosso arquivo de modelo layout.html, galho. Podemos fazer em tanques de ligação de entrada do núcleo. E, em seguida, se atualizar esta página por afeta embora o plano de fundo está cinza. E isso é que era o CSS padrão nisso. Então este é SaaS, mesmo que não estamos usando qualquer SAS é então colocado aqui onde ele é compilado. E então estamos trazendo o fim. Então, se olharmos para HTML, coloca EUR LAN. Vamos também rapidamente acessar o Google Fonts e trazer uma espuma de gelo. Open Sans serve. E queremos o regular e o ousado. Eu acho. Eu só vou pegar isso. E eu acho que eu abri envios instalados, mas eu quero que ele funcione no computador de todos. Tão legal. Então nós estamos trazendo CSS, nós também estamos trazendo uma fonte a partir daqui. E agora, provavelmente você não quer que fique assim. Então podemos começar a escrever alguns CSS.
24. Adição de alguns CSS: Vamos transformar esta página feia em algo um pouco mais agradável. Então, primeiro vamos voltar para a nossa linha de comando e vamos executar o NPM Run Watch. Isso é semelhante ao NPM quando dev, mas funcionará para quaisquer alterações de arquivo. Assim que fizermos uma alteração no arquivo, ele será recompilado automaticamente. Então aqui nós fechamos tudo isso, e vamos abrir este aplicativo dot CSS. Primeiro, vou criar uma variável. Então temos um tamanho padrão para sempre pendurado. E aqui está ela aquela bela fonte “Open Sans”. Vamos n definir sinais
de fonte. Vamos nos livrar de qualquer margem por aí também. E estilo F0 sobre coisas que o estilo de pé deixa essa variável padrão de colocação. Nós já fomos. E agora que temos alguma diferenciação de cores, podemos desligar a linha horizontal. E faremos uma coisa semelhante com um cabeçalho. Mais uma vez também o solo anterior para linha azul. E dê-lhe um grande tamanho de fonte. E algum preenchimento novamente, usando a variável de grau. Vá para a tag principal também. E vou adicionar um pouco de estofamento. E quando salvarmos isso, ele irá recompilar tudo. Agora, se atualizarmos a página, perfeito, talvez seja necessário fazer uma atualização rígida porque não há bloqueio de cache. Para que o controle B, pensar mudança de controle ou talvez no Windows. Eu estou apenas para limpar o dinheiro para que você não esteja recebendo a versão antiga e a folha de estilo, mas como você pode ver, agora que nós
atualizamos, nós temos todo o nosso CSS funcionando bem, e isso está começando a parece uma página web respeitável.
25. OrM de doutrina: Neste módulo, vamos olhar para bancos de dados e sinfonia especificamente usando doutrina de RM. Orm significa mapeador relacional de objeto. Então isso é sobre mapeamento de objetos no PHP para linhas de banco de dados. Alguém que retiremos os dados. Como colocamos isso em um objeto PHP bem utilizável e como colocamos de volta? E a ideia de usar um ORM é que o ORM cuida de toda esta floresta. Então nós podemos apenas escrever objetos PHP e não temos que nos preocupar com o SQL. ORMs mais populares no PHP são a doutrina am propel. E se você é de outros idiomas, você pode ter ouvido falar de coisas como hibernar e Active Record. Todos fazem a mesma coisa. Você não precisa usar o verde escuro para Symphony, mas ele é realmente muito bem integrado, então ele é frouxamente acoplado, mas ele se integra muito bem. E você obtém um monte de funcionalidade fácil fora da caixa. E doutrina nos permite usar praticamente qualquer plataforma de banco de dados. Então nós poderíamos usar MySQL, MariaDB, e eu vou usar MySQL neste exemplo porque esse é o mais comum para emparelhamento com aplicativos PHP. Mas você também pode usar Postgres, Oracle, SQL Server, SQL mentira. E você realmente não precisa fazer muitas mudanças nisso. Basta dizer à doutrina o que você quer usar. Você escreve seus objetos PHP. E novamente, a doutrina cuida de tudo isso. Então, como funciona? Como podemos realmente mapear nossos objetos PHP para o banco de dados? Usamos classes especiais que vamos chamar entidades, mas essencialmente Git de classes PHP regulares com algumas anotações. E este é um exemplo de quando vamos escrever
para um produto e usamos uma anotação para dizer, ok, isso é e entidade. Assim, uma entidade é análoga a uma tabela no banco de dados. Então, ei, nós temos uma classe de produtos. E então vamos ter instâncias dessa classe. E isso é como dizer que temos tabela de produtos
no banco de dados e haverá linhas dentro dessa tabela. E, em seguida, cada uma das colunas que usamos anotações para mapear também. Então, por exemplo, podemos ter uma propriedade id e um getters punchy e setters na classe. E vamos marcar isso usando anotações para dizer, ok, esta é a coluna ID na tabela, e é assim que a doutrina sabe mapeá-la.
26. Configuração de banco local: Neste módulo, vamos configurar o banco de dados. Doutrina suporta um monte de plataformas para que você possa tecnicamente usar qualquer pessoa que desejar. Se você tem MySQL e PHP, meu administrador instalado localmente, então ótimo, esta lição é para você. Tudo o que queremos fazer é criar um banco de dados. Então eu sou jatos no PHP, meu administrador aqui. Vou criar um banco de dados chamado Byte Shop. E então eu vou para a aba de privilégios. E quando eu subir para o topo, porque eu quero criar um novo usuário. Vamos pegar contas de usuário e Nuan, criminoso combinado tiro do anfitrião local. Vou deixar arremessar por meio minuto, gerar a senha. E o mais importante, vamos precisar usar a visualização
nativa de autenticação MySQL em algumas das novas inovações um PDR, você pode não precisar, mas é apenas um problema de longa duração com o PHP que você precisa usar o MySQL nativo autenticação ou lição de casa. Então isso é apenas Slashdot em algum lugar seguro. E eu poderia ter criado a conta de usuário primeiro. Lutar para saber o que acontece se eu tomar fosco. Ok, então isso deixa pra lá. Ok, agora, então nós criamos este usuário loja de bicicletas, e nós criamos este banco de dados de loja de bicicletas também. É assim que vamos fazer. Se você tiver MySQL e PHP, meu administrador instalado localmente. Caso contrário, mostrarei como podemos fazê-lo na Amazon sem que você precise instalá-lo localmente. Na próxima lição.
27. Configuração da AWS alternativa: Se você não tem MySQL tão localmente e você está pensando, Chris, eu realmente não quero fazer isso. É muito esforço. Meu computador não tem tanta memória. A boa notícia é que você também pode fazer a
Amazon web services hospede seu banco de dados para você. Portanto, se você já estiver configurado com a Amazon Web Services, provavelmente
poderá usar esse nível gratuito para passar por este curso. E a maneira de fazer isso é fazer login no console, console.log AWS para amazon.com. E ele você poderia acessar todos os serviços da Web da Amazon, como EC2 e S3, e tudo o que queremos hoje não vamos RDS Relational dia a serviço. E isso essencialmente dará a você um banco de dados MySQL na nuvem. E isso é quando duas configurações diferentes, esta Amazônia de aura é bom porque isso é compatível com MySQL. Então, clicamos em criar banco de dados e vamos, mesmo agora, há uma opção para MySQL. Mariadb também ficaria bem. Vamos usar o Amazon Aurora porque é, e podemos ver aqui é compatível com MySQL. Podemos selecionar versão scanf, algo um pouco mais moderno. Este. E vai ser um teste Devin 1. Aquele classificador de TV está bem. Vamos usar a mesma senha aqui. Obviamente, vou apagar apenas estas credenciais. Depois que eu terminar de filmar este curso. Todas essas opções estão bem. Vamos em frente e clique em criar banco de dados. E leva um pouco de tempo para que a Amazon faça qualquer coisa na nuvem. Então vai levar talvez 510 minutos para configurar isso. Mas se formos até esta visão credenciais aqui, então podemos ver que temos o admin e a senha. E uma vez que assim seremos capazes de se conectar ao banco de dados também. Então essas são as credenciais que você precisa se você estiver indo para acessá-lo desta forma, obviamente não terá PHP my admin. Você poderia configurar o PHP meu administrador para fazer isso. Mas o que mais provável é que você faça é usar software como eu tenho SQL proibir um Mac. Mas também Heidi é muito boa. Se você estiver no Windows. E você poderá criar uma nova conexão aqui. E você só vai colocar em todas as credenciais que você vai obter do cabelo. Ótimo, então agora, agora está carregada. Nós também temos um ha, administrador. Temos nome de usuário, senha, e também temos o local que precisamos nos conectar também. Então essas são as credenciais que você precisará colocar ao fazer login usando algum tipo de cliente SQL, como o SQL bro
28. Configurando o banco de banco de banco: Agora que criamos um banco de dados no MySQL e em qualquer plataforma que você está usando, precisamos configurar nosso aplicativo sinfonia para ser capaz de se conectar a ele. Então voltamos ao nosso terminal, vamos cancelar e precisamos começar a instalar coisas. Slats fazer compor que requerem pacote ORM sinfonia. E isso trará as bibliotecas que precisamos usar a doutrina ORM. Então dê um minuto para girar. Ok, legal. E então nós também para nos ajudar a fazer parte do edifício, nós vamos exigir mas traço, traço, traço, porque isso vai ser uma dependência de desenvolvimento que nós vamos usá-lo ao desenvolver localmente, mas nós não vamos precisar para produção. Vamos precisar que a sinfonia venha agrupar. Certo, agora, temos todas as dependências que precisamos. Agora. Também precisamos configurar isso no arquivo a.m. Então temos este URL de banco de dados aqui. Então chamamos o uso da loja de bicicletas e temos uma senha aqui. E vamos mudar isso para localhost. E D b também é chamado de loja de compra. E a outra coisa que precisamos fazer é passar na versão
do MySQL em execução se estamos nos conectando a um MySQL. Acho que estou executando uma versão bastante leve 8. Ok, agora, então nós instalamos nossas dependências e nós
atualizamos nosso URL de banco de dados com o caminho correto.
29. Criando uma entidade de produtos: Agora que configuramos nosso banco de dados, é hora de fazer nossa primeira entidade. E uma entidade representa uma tabela de banco de dados. E poderíamos escrever tudo do zero. Mas muitas vezes é mais fácil usar as ferramentas incorporadas que obtemos. Temos doutrina e sinfonia. Então vamos ao console Petri Ben. Quando você faz dois-pontos entidade. E eu vou dar um nome a ela. Neste caso, vamos chamá-lo de produto. E isso nos levará através de uma série de perguntas sobre como queremos que a entidade se pareça. Então, precisamos organizar propriedades, por exemplo, um nome. E vai ser uma corda. Ok, legal. E sentou-se preço vai
ser ser um
lados decimais , uma imagem que neste caso também vai ser uma string. Ele pode apenas apontar para um nome de arquivo. Digamos que este pode ser anulado. E vamos ter uma descrição. Vai ser uma mensagem. Em seguida, um pode ser anulado também. Ok, legal, e isso está feito. Vamos ver o que foi criado. Então agora temos isso dentro da fonte. Vamos chamar essa pasta de entidade. E nós temos este produto. Portanto, é qualquer namespace de entidade. E tem todas as propriedades que criamos,
o nome, o preço, a descrição da imagem. Ele também tem getters e setters gerados para todos esses métodos. E também temos sua propriedade ID que é adicionada automaticamente para nós. E então nós também temos este repositório de produtos que vamos usar para pesquisar a tabela também. Então era tudo o que tínhamos que fazer era responder a essas perguntas. E todo esse código foi gerado para nós.
30. Gerando o esquema: Temos nossa classe de entidade de produto aqui com nosso próprio banco de dados ainda está vazio. Agora podemos criar manualmente as tabelas. Mas porque já definimos como queremos que nossa entidade de produto se pareça. Não precisamos fazer isso. Podemos obter doutrina para fazer isso por nós. E nós fazemos isso por lá no PHP sido console fazer migração de dois pontos. E isso deveria ter criado um arquivo de migração. Então, se estamos olhando agora, dentro são devolvidos para nós diretório de migrações. E isso nos dá uma maneira de atualizar programaticamente e fazer downgrade do banco de dados. E ele tem seu próprio método onde ele está criando esta tabela e um método para baixo para se livrar dela. E então podemos executar isso. Poderíamos automatizar isso como parte do nosso processo de construção. Mas aqui vamos executá-lo manualmente. Então, vamos voltar. E agora que estamos satisfeitos com o SQL que é gerado ao executar migrações de cólon, dois pontos migram. E isso executará o script de migração. E agora, se voltarmos ao nosso banco de dados, perfeito, temos nossa tabela de produtos. Se olharmos para a estrutura, ela corresponde à estrutura da entidade. Então nós temos agora, nós apenas escrevemos o código PHP e todo o SQL foi cuidado para nós usando doutrinas, ferramentas.
31. Como importar dados de amostra: Agora que temos banco de dados ou de executar este suco Bev admin hoje. Então, se entrarmos na tabela de produtos, ela está vazia. E seria bom se tivéssemos alguns exemplos lá dentro. Então eu providenciei isso para você. Então, se nós exemplo de código SQL, podemos executar bem. Vamos cavar e ficar no SQL aqui. Então, espero que você tenha baixado o código de exemplo. E eu tenho isso aqui. Eu só vou abrir isso. Se você entrar no código de exemplo que você pode obter do GitHub e entrar neste arquivo de recursos. Esse é o exemplo de produtos, o SQL para copiar e colar isso e pode fazer isso no PHP, meu administrador. Ou, se você estiver usando o banco de dados da Amazon, você pode usar o SQL pro ou Heidi terá o cliente SQL configurado e apenas executar o SQL. E então você terá todos esses exemplos. Aqui estão algumas outras coisas que queremos copiar do código
de exemplo para o nosso projeto em público. Vamos trazer todas essas imagens. E também nos ativos e CSS tem permitido de bom ar CSS. Então, de novo, vamos copiar isso. E se você voltar para o seu projeto,
em seguida, encontrar todos menos CSS. E vamos apenas trazê-los atualizados. Então vamos dizer npm run dev apenas para reconstruir o CSS que temos. Então, no final deste deve ter alguns produtos de exemplo em seu banco de dados. Você deve ter algum CSS atualizado. E você deveria ter um monte de imagens aqui também. E isso vai ajudantes do Git acelerar as coisas à medida que passamos pelo projeto.
32. Listando os produtos: Agora que temos tudo configurado, vamos em frente e criar um controlador e renderizar alguns desses objetos de banco de dados. Então nós temos, então nós vamos entrar e apenas copiá-lo preço. Vamos tomar um controlador de boas-vindas. E chamaremos isso de produtos de Control-A. E vamos querer trazer aquele repositório que foi ótimo para nós. Vamos renomear isso para páginas iniciais do controlador de produtos. Tudo bem. Vamos fazer disso o dano real prometido à raiz será apenas um corte. E então vamos usar alguns dos fios mágicos e sinfonia, digamos, trazer o repositório e chamá-lo de repo. Então isso significa que quando Symphony chama este método, ele vai injetar automaticamente o repositório Paul, que é a coisa que vai usar para pesquisar o banco de dados. E então aqui, vamos pegar uma lista de orçamento de bicicletas dizendo repo, Find By. Este é um método onde podemos colocar colunas aqui. Podemos fazer o nome igual à bicicleta X. Mas neste caso, vamos encontrar tudo. Então, vamos deixar assim. E então aqui vamos dizer a ele para renderizar uma página inicial. E passaremos na nossa lista de motos. Tudo isso parece bom para o controlador de produtos. Agora é ir Criar modelo na próxima lição.
33. Modelo de listagem de produtos: Agora, se criarmos nosso controlador, vamos criar um modelo também. Então vou copiar e colar. Bem-vinda. E vamos chamar esta página inicial HTML de galho. Eles foram o diretório do modelo. E vamos estender o layout como antes. Vamos mudar este código. Copiamos um bom CSS, e vamos usar isso aqui. E usamos alguma lógica de galho. Então vamos dizer para bicicleta, em bicicletas, OK. E feche a div. E então ele vai criar um loop aqui. Diga se a imagem da bicicleta. E, eventualmente, vamos encaminhar isso para uma página de produto. Então vamos dizer algo assim. E é assim que o nome do byte, e vai ser um link também. E então, finalmente, vamos colocar o preço. Lá vamos nós. Legal. Então vamos dar uma olhada no que estamos fazendo aqui. É que estamos indo comer para as motos. E estamos dizendo que se tem uma imagem, exiba a imagem. Caso contrário, basta exibir o nome e o preço. Ok, então se verificarmos o nosso servidor de desenvolvimento ainda em execução, parece que ele foi reiniciado apenas para ter certeza de que temos todas as dependências de luzes. E então se nós apenas obter uma barra, não
podemos encontrar nosso repositório de produtos, eu acho que porque eu tenho um namespace errado lá. Então vai ser entidade aplicativo para adversários da árvore. Vamos verificar novamente aqui. Ainda assim. Não é um repositório. Vamos solucionar menos problemas na próxima lição.
34. Visualizando nossa lista de produtos: Ok, um problema tão simples aqui, já que eu sou um “S “extra lá dentro. E uma vez que consertamos isso, funciona bem. Ótimo. Então, estamos pegando todos os registros no banco de dados, o que estamos fazendo usando este repositório de produtos, passando para o modelo. E o modelo é então looping através deles e exibindo-os todos. Ali. Temos nossa conexão de banco de dados funcionando e recuperando dados.
35. Opções Opções de encaminhamento: Symphony nos oferece um monte de opções quando estamos definindo raízes. Então, até agora nós acabamos de definir uma rota estática. Só disse que este é o nosso jeito. Queremos que ele mapeie para o método que anotamos. Mas também podemos usar variáveis. Tendo esse segundo exemplo, temos essa idéia de lesma, por exemplo, um post no blog. Cada post do blog vai ter seu próprio site de slogan para acessar isso, vamos precisar chegar lá. Nós também podemos limitar os métodos que as pessoas costumavam chamá-lo. Então coisas como get, post, put, delete, podemos dizer, OK, só
queremos que essas raízes mapeem aqui se for um desses métodos por padrão, se eles aceitarem monges para eles. Mas podemos limitar isso se quisermos. Podemos dar a rota e o nome, o que é útil se fizermos coisas como redirecionamentos. E queremos redirecionar para uma rota específica. Podemos dar-lhe um nome, e também podemos adicionar filtros aos parâmetros. Então, por exemplo, no terceiro exemplo, se ID é suposto ser apenas um número, e não queremos que a rota corresponda se houver algum caractere
e que, e os caracteres alfabéticos, então poderíamos adicionar requisitos e para dizer, ok, isso tem que coincidir com esta expressão regular. Então sinfonias, anotações de roteamento, mesmo que tenhamos usado apenas as básicas até agora, têm um monte de outras opções. E vamos entrar em alguns desses parâmetros neste módulo.
36. Página de detalhes de produtos: Criamos uma lista, mas queremos poder clicar neles e visualizar os detalhes. Então vamos em frente e cuidar disso. Então vamos criar um novo método dentro do nosso controlador de produtos. E vamos começar definindo a raiz. Então, vai haver produtos de corte. E depois vamos ter a identificação. E vamos colocar o ID e chaves para deixar sinfonia agora é variável. E então vamos definir os métodos. Porque nós adicionamos variável aqui, podemos tomar ID como uma variável para o método. E também vamos querer um monte de outras coisas. Então, aceitaremos um pedido. E vamos querer nosso repositório de produtos novamente. E nós vamos retornar uma resposta. Se eu, vamos nos livrar desse pedido por enquanto. E acho que vamos usar isso aqui. E a primeira coisa que precisamos fazer é encontrar a moto correta. E podemos fazer isso apenas usando o método find que nos permite passar em uma chave primária. E neste caso temos a identificação, então podemos fazer isso. E então tudo o que vamos fazer é renderizar uma classe template. Vamos passar na moto. Portanto, isso deve ser tudo o que precisamos inicialmente para isso. Vamos em frente e criar um modelo para ele na próxima lição.
37. Modelo de detalhes de produtos: Vamos criar um modelo. Então, provavelmente podemos usar a página inicial como base. Vamos chamá-lo de detalhes para HTML galho. E colocar um pouco de pão vem para cima. Então, este usuário para navegar facilmente de volta para a página inicial. E então isso vai ser detalhes do produto. Alguns CSS pré-construído agradável. Não vamos andar nas motos porque só temos uma bicicleta. E aqui, vamos tirar a imagem da moto. E, em seguida, a segunda div, e colocar um nome de byte em H1 e colocar o preço por baixo dele. E derruba a boa cidade aqui. Diga se uma bicicleta tem uma descrição. Ok, parece bom. Então, agora, se formos até aqui e clicarmos em uma bicicleta, perfeito, então temos uma migalha de pão, temos nossa imagem, você coloca o nome e o preço. E temos a descrição na parte de baixo também.
38. Mande erros não encontrados: Isso funciona bem para ir
a partir da página inicial e clicar em por detalhes o que acontece se este ID estiver errado? Era para uma bicicleta que não existia. Talvez removemos uma bicicleta e ainda havia um elo antigo lá. Bem, eu todos Condie dar errado e temos 500 anos porque a moto é nula, mas ainda estamos tentando acessar a imagem. Então vamos adicionar um pouco de manipulação para verificar isso novamente. Então vamos para uma página de detalhes. E aqui vou dizer que se a moto é não, desculpe. E isso é o que obtemos do bom método. Se não encontrar o ideal, apenas nos avise. Então podemos usar algumas outras sinfonias, bons métodos de ajuda. Só para dizer que este byte não existe. Então, para sempre. E se voltarmos, tudo bem, isso é bom. Então parece o mesmo porque ainda é uma página de erro, mas agora temos um a para a linha quatro em vez de um erro 500. Então o servidor não está explodindo. Esta é uma área que esperamos que aconteça e podemos fazer esta página parecer um pouco mais bonita para o usuário.
39. Personalizando a página de erro: Se o usuário conseguir uma era de quatro ou quatro, do que queremos que ele pareça um pouco mais bonito do que este idealmente combina com o nosso design. E podemos facilmente fazer isso. Então vamos pegar, vamos apenas pegar uma página inicial novamente e vai fazer. Mas se o ar personalização, então ainda vamos trazer o layout. Mas vamos nos livrar desse conteúdo antigo. Vou dizer que a página não foi encontrada. E então vamos dizer que alguém como, desculpe, a página que você está procurando não existe. E nós damos a eles um link de volta para a página inicial. Agora, a maneira de fazer isso funcionar é super simples na AIG, mas um pouco inquieta. Então precisamos especificamente chamar erro para ou para o galho ponto HTML e dentro do diretório templates quando quaisquer dois créditos não são pacotes de gotejamento. E então dentro de Bundles vamos criar um chamado galho 10. E dentro disso vamos precisar criar uma chamada exceção. E então finalmente vamos salvá-lo. Por isso, modelos bastante específicos, pacotes, pacote de
galhos, erro de exceção para quatro. E isso não é um pouco de espaçamento e isso também, ok, isso parece bom. Agora, porque estamos executando o servidor de desenvolvimento, não
vamos realmente obter a página de erro aqui vai continuar a obter a coisa de depuração sinfonia. Mas se quisermos testar o que são a nossa página parece, podemos fazer isso indo para sublinhar era e, em seguida, colocar o código de erro neste caso quatro ou quatro. E isso aqui podemos ver que temos nossa página não encontrado erro, e isso é o que o usuário vai dizer na produção. Então, em desenvolvimento, temos a sinfonia completa sempre pilhas que podemos depurar produção de culpa. O usuário veria esta página de erro agradável que acabamos de criar.
40. Adicionar à cesto: Neste módulo, vamos cuidar da funcionalidade anti cesta. Então vamos precisar de algum tipo de botão add to basket que permite aos usuários adicionar bicicletas para mentir cesta como qualquer plataforma de e-commerce. E vamos precisar persistir nessa cesta de várias páginas. Então, uma vez que eles adicionaram, ele não desaparece na próxima página. E felizmente, o symphony mx é muito fácil de fazer isso, encerrando a funcionalidade de sessão PHP em algumas funções fáceis de usar.
41. Adicionar ao botão ao cesto: Indo para o modelo de detalhes aqui. Então vamos em frente e adicionar este botão Basket a ele. Então, se abrirmos o modelo de detalhes e abaixo do preço, estamos apenas indo para a forma porcaria. E então n hat, vamos usar uma variável que ainda não criamos. E vamos dizer f na cesta. Se já estiver na cesta e não queremos que os EUA construam para adicionar novamente. Então vamos fazer um botão desativado e dar-lhes alguns comentários. É Odeon dizendo adicionado à cesta. E se não, então vamos criar um botão até cesta. E vamos fazer o “M surdo”. E já fechamos nossa espuma. Ótima. Então, se atualizarmos agora, vai reclamar que a cesta não existe. Então vamos criar isso. E quero faltar por enquanto. Perfeito. Então agora temos este botão. Não faz nada, mas o botão em si é que vamos ligá-lo na próxima lição.
42. Configurando o serviço de sessão: Configurar a sessão vai ser agradável e fácil
porque a manipulação de sessão vem com sinfonia. Mesmo em uma instalação básica, há alguma configuração que podemos olhar. Então, se entrarmos na configuração e, em seguida, em pacotes, vamos para este framework. Ei, nós temos um monte de opções para a sessão que
pudéssemos mudar o tratamento da sessão se quiséssemos. Mas neste caso, tudo o que a sinfonia nos dá por padrão está bem. Então podemos deixar este framework dot yaml como está, e estamos prontos para ir. Podemos usar a sessão fora da caixa. Não precisamos instalar nenhum dos pacotes.
43. Entender uma entrada de solicitação: Agora que sabemos que podemos usar um serviço de sessão e temos um modelo. Podemos entrar e conectar-se no controlador de produtos. E um par de coisas que precisaremos apenas do objeto de solicitação porque um era o objeto de resposta para minha Fundação HTTP. E também pode precisar trazer nossa sessão. vez, este é também um pacote de fundação HTP e I seção faz interface de sessão. Então temos o iOS. Então agora podemos usá-los aqui em baixo. E de novo, temos sinfonias, magia onde toco. Conseguimos a sinfonia de toalha o que queremos. E ele vai cuidar de realmente conectá-la nisso para nós. Então nós não temos que passar explicitamente nenhum desses n. Nós apenas dizemos Will not the request e a interface de sessão e sinfonia e nós vamos cuidar do resto. Ok, então agora vamos adicionar alguma manipulação para este código. A primeira coisa é que vamos conseguir cesta. E o segundo parâmetro que chamamos no gatt é o padrão. Então, se não há cesta na sessão, nós fizemos, ele vai ter uma matriz vazia. E então nós vamos dizer, este pedido
é um pedido post em vez de um pedido GET? Se assim for, sabemos que clicámos no botão anthro Basket e na AESA. E nós vamos adicionar a moto. E, em seguida, uma coisa final é, e nós precisamos atualizar isso na variável cesta. E vamos entrar assustados e eu vou falar por isso. Certo, então vamos pegar o escaravelho, a sessão. E se não for, então terei uma matriz vazia, que é bom, é uma cesta vazia. E então estamos dizendo que se esta é uma solicitação de postagem, os usuários clicam no botão. Então o que queremos fazer é adicionar a moto ao cesto. Vamos usar o ID como K em uma matriz associativa e, em seguida, salvar o byte para isso. E então vamos escrever a cesta atualizada de volta para a sessão. E aqui em baixo, nós vamos dizer, ok,
reviste o cesto cheio desta bicicleta. E se for A1, então as bicicletas já estão na cesta para que possamos exibir o botão sobre. Então vamos apenas atualizar esta página e na cesta. E boom, lá está ele. Agora estamos realmente adicionados ao botão Basket porque ele está sendo adicionado. E à medida que recarregamos a página, parece na sessão, descobre que a moto já está lá. E vamos apenas atualizar para ter certeza de ficar por aqui, é perfeito.
44. Controlador de cesto: Temos que adicionar a funcionalidade cesta de trabalho. Então, a próxima coisa que queremos é ser capazes de realmente ver uma cesta. Nuvem alguém caiu. E eu vou copiar e colar. Os produtos podem experimentar muito. E vamos chamar este controlador de cesta. Isso irá renomeá-lo também. E então vamos chamar esta cesta e vamos definir uma raiz para cortar cesta. Não sei como esta identificação está bem. Legal. E então vamos nos livrar de todo esse código também. A primeira coisa que vamos fazer é a mesma coisa que fizemos antes, se apenas conseguirmos uma cesta. E essa é a cesta está vazia, será padrão para uma matriz vazia. E vamos adicionar a capacidade de excluir coisas da cesta também. Então psi é método. Nós vamos obter o ID e isso vai fazer mais sentido quando fizermos o modelo. Então, se um usuário quiser excluir algo da cesta, vamos postar o ID e vamos ter a idéia, hey, removê-lo da matriz cesta. E então vamos escrever essa cesta de volta para a sessão com o item removido. E a próxima coisa que queremos fazer é fornecer algum tipo de total. Então vamos iterar através da cesta e retirar cada preço. Então aqui vamos mapear através da cesta. Sabia que eu fui e sentei aqui e eles infringiram um preço. E depois que tivermos todos os preços, soma-os juntos. E isso nos dará um título. E então vamos renderizar tudo. Tão bem. Modelo chamado cesta ponto HTML olhar galho que irá criar mais tarde. E vou passar algumas coisas. E então nós vamos passar a cesta que
possamos iterar através de tudo lá dentro. E vamos congelar o total que calculamos também. Ok, isso parece legal. Vamos criar o modelo na próxima lição.
45. Modelo de cesto: Agora que temos um controlador de cesta, vamos em frente e criar um modelo. Então eu vou apenas pegar detalhes HTML ponto em galho, salvar, isso é cesta quantidades Dykstra em galho no diretório templates. Usamos as migalhas de pão, tudo o resto pode ir. Vou chamá-lo de cesta de graduação com a aula de cesta. Mais uma vez, nós já temos alguns CSS agradável em. E a primeira coisa é que vamos percorrer todas as motos. E vamos usar um pequeno filtro em galho. Então chame o método de formato numérico. E isso irá adicionar automaticamente um em vírgulas Eu sou casas decimais e torná-lo bonito. E também vamos adicioná-lo nesta capacidade de remover algum ventilador. Então aqui eu vou adicionar um botão que diz Remover. E vamos adicionar um oculto por KID. Sim. Então agora formar um botão de remoção, envia um ID de bicicleta para que no onde estamos pegando o ID, removendo-o da matriz. Nós temos isso. - Legal. E hey, nós vamos adicionar uma linha final. Só vou dizer o título. E novamente, vamos chamar este pequeno método ajudante no formato de número de galho. Isso funciona exatamente como o formato de número base de pitch. É quase certamente a mesma função subjacente. Certo, e isso parece legal. E a última coisa que está fora do botão é check-out. Obviamente isso não vai fazer nada porque não construímos um caixa, mas vamos usá-lo mais tarde. Ok, então esse modelo parece bom para mim. Vamos tentar novamente uma cesta de barra. E lá vamos nós. Temos a nossa bicicleta. Vamos voltar para a página inicial. E isso é mais motos. E então nós nunca vamos levá-lo de volta ao cesto. Ohms, se eu pudesse soletrar cesta, certo? E então passamos por todas as nossas três bicicletas bem formatadas para usar o cifrão em vez de uma sauna libra. O Skype. Conserte isso. Ok, legal. E também podemos apertar este botão Remover e ele desaparece da cesta. Está bem, adorável. Então, a única coisa que nos falta agora é esta nova maneira de chegar ao cesto. Então vamos corrigir isso na próxima lição.
46. Visão de link do cesto: Vamos adicionar um link para que possamos chegar ao cesto de um que estamos na página inicial. Então vamos para o laboratório de layout, tem galho e vamos dizer sessão f, que nos dará acesso ao objeto sessão de dentro galho e sua variável aplicativo tem cargas sobre Stefan útil. Então, se você tem uma necessidade de obter acesso a uma variável que você tipo de uma variável global que ela está em todo o aplicativo. Muitas vezes, você pode encontrar o aplicativo no. E nós diremos para pegar cesta. E então faça um endif. E então vamos criar um link para barra cesta. E vamos chamá-lo de cesta V. Atualize a página. E agora temos este grande botão V Basket que nos leva para a página da cesta. Perfeito.
47. Instalando o pacote de forma: O que a cesta funciona, mas agora precisamos da página de strikeout. E para fazer isso, poderíamos usar manualmente escrever um formulário. Mas isso soa como um monte de esforço quando podemos ter Symphony ainda permitir o trabalho pesado para nós e podemos fazer isso com forma sinfonia. Então vamos em frente e fazer o prazer exigir forma sinfonia traço. Vamos deixar isso girar por um momento e, e isso vai derrubar a biblioteca de formulários que vamos usar. E então podemos começar a criar o próprio código PHP.
48. Criando uma entidade de ordem: A primeira coisa que vamos precisar é de algum tipo de entidade de ordem que possamos manter o banco de dados para fazer um registro dele. E poderíamos usar o utilitário make novamente, mas por que não temos alguma experiência prática criando uma entidade. E vamos começar preguiçoso apenas copiando e colando produto dot PHP no PHP dot mais antigo. E vamos nos livrar disso. Mas vamos trazer uma ferramenta inevitável do dreno dopado é a coleção de matriz. Então eu não vou envolver este ponto com uma classe repositório, mas nós vamos precisar para zombar como uma entidade e vamos dar-lhe um nome de tabela
porque se nós apenas chamá-lo mais antigo do que a tabela de banco de dados seria chamado ordem. E, claro, ordem é uma palavra reservada em SQL. E assim, sempre que tentamos executar uma consulta, MySQL nos daria um erro dizendo, não entendo o que está acontecendo aqui. Esta é uma palavra reservada. Então, podemos usar essa anotação para dizer que são os scripts de migração para chamá-lo de ordens em vez de ordem. Vamos ver o que mais temos aqui. Então vamos precisar da identificação, é claro. E vamos querer um nome também. E também vamos querer um endereço de e-mail. E vamos querer um endereço postal também. Acho que todos nós, como necessário, não vamos precisar desta imagem de pixel para nos livrarmos disso. E a outra coisa que precisamos
fazer é ter uma lista de produtos. E nós vamos apenas executar algum código e então nós vamos falar através dele. Então nós temos essa variável chamada produtos e que tipo de dados são? Por exemplo, os ataques deste. Esta é uma corda. Bem, este aqui, é um produto do tipo F tende t, É uma variedade de produtos. E assim podemos usar essa tag muitos-para-muitos para dizer a
doutrina para obter relação entre a ordem e a entidade do produto. Agora, se vamos fazer isso sobre as coisas que precisamos fazer é dar-lhe um valor padrão porque vai ser uma variedade de produtos. Então precisamos definir por padrão, ele quer ser uma coleção de matriz. E então mesmo que esteja vazio, então ainda vamos conseguir todos esses valores. Bem, livre-se desse preço e imagem. Mas queremos caras e satisfazer pelo e-mail. Então esta descrição vai ser endereço. Vamos criar um fundo de confiança. E então a última coisa que precisamos fazer é adicionar dados para obter a matriz de produtos que não precisamos definir. Ok, legal. Então agora temos nossos segundos fins para a entidade Pedido, que teremos um ID, nome, endereço de e-mail e endereço. Olá a pessoa que faz a compra. E uma variedade de produtos que foram o promotor também.
49. Construindo o checkout: Agora que temos entidade mais antiga, vamos em frente e criar um controlador. Esse será o nosso controlador de checkout. Então eu vou apenas copiar e colar este controlador cesta e vamos chamá-lo de controlador de checkout. Uma dessas coisas está bem. Precisamos trazer algumas coisas novas também. A partir do pacote de formulário deve ser tipo de carvão de extensão. Vou trazer um monte desses tipos fundados por agora sobre têxteis necessários e o tipo de área de texto. E então precisaremos de alguns pacotes locais também. Então precisamos trazer a entidade Ordem que acabamos de criar. E o repositório de produtos também. Usamos sempre mais para baixo. Então teremos nossa grosseria um checkout também. E, na verdade, isso servirá por enquanto. Podemos pegar uma cesta de novo como antes. E nós vamos trabalhar fora também. Então vamos apenas mover esse código até o e podemos ir em frente e criar uma nova ordem entidades para que C e C acabamos de criar. E então vamos usar isso para criar um formulário usando a biblioteca de formulários de sinfonias. Então vamos chamar o construtor de formulários. E isso vai criar um formulário em torno dos n estados. Ele vai usar isso como base para que ele possa adicionar validação e entender o que está acontecendo. E então podemos adicionar nossas falhas a ele. Então vamos adicionar um nome. Vou adicionar um endereço de e-mail, o endereço postal. E este vai ser um tipo de área de texto. E então vamos adicionar um botão de salvamento. E podemos dar a isto uma etiqueta que diz confirmar ordem, ligar, obter formulário. E, finalmente, aqui em baixo, nós renderizamos essa contagem chef aqui na cesta. Ainda quero um total. Ok, então vamos falar através do código que implementamos aqui. Tão grande faz a entidade New Order. E usamos isso como base para a nossa forma. E então nós dissemos, OK, criar essas fábulas de formulário, nome, e-mail e endereço. E estes são os tipos que queremos. E, em seguida, adicionamos o botão de envio. Chama-se salvamento aqui. E demos um rótulo. E depois que tivermos este formulário pronto, vamos criar uma versão HTML do veterinário. Tudo isso é fornecido por sinfonias Form Component e vamos enviá-lo para este modelo de checkout que vamos criar na próxima lição.
50. Modelo de check-out: E criamos nosso checkout com nosso formulário. Então vamos em frente e criar o modelo. Basta usar cesta como base, mas podemos nos livrar da maior parte. Basta salvar como checkout em HTML, galho. Vamos nos livrar de toda essa cenoura aqui. Então eu vou usar esse ajudante de formato de número baixo novamente aqui. E então cortar a espuma vai ser super simples. Vamos chamar o ajudante do formulário e eu vou passar o formulário. Então, no controlador de checkout, nós chamamos de formulário aqui. Poderíamos ter chamado este formulário 123. E então colocamos o formulário 123 aqui. Mas como nós acabamos de chamá-lo forma, um pouco confuso para chamar para o método com a variável formulário. Mas isso é tudo o que precisamos fazer. Então vamos bater, vamos prosseguir. Botão Checkout quais os participantes para cortar check-out e ver o que acontece. Então, temos um erro ao solucionar isso na próxima lição.
51. Testando o checkout: Temos uma coisinha para esclarecer aqui, e é isso que vamos atribuir. Namespace deve ser coleções em vez de coleção. Refresque isso agora, ok, perfeito. Então tudo isso foi magicamente construído pela Symphony para nós. Então lembre-se que tudo o que fizemos foi no controle. Nós dissemos, queremos criar fora este entretido e estes fracassaram. E sinfonias indo em frente e criar rótulos e os campos, florestas e configurados todos nós falham, então nós tentamos e enviá-lo. Ele já tem a validação básica de HTML em E e F, nós preenchemos alguns valores aqui e enviamos. Nada vai acontecer porque ainda não adicionamos nenhuma manipulação para isso. Mas já fora da caixa, temos todo o formato HTML construído para nós. E fluentemente para datar o formulário ou teríamos que fazer é ir atualizar a entidade no controlador e todo o HTML, todos os widgets magicamente atualizar floresta.
52. Como processar a ordem: Agora que temos um formulário criado, vamos adicionar algum processamento para ele. E o primeiro passo é realmente CB fácil. Podemos apenas dizer pedido, um pedido de alça. Não faz nenhum sentido tal pré-forma, eu vou dizer pedido de identificador de formulário. E isso vai dizer um formulário para pegar o pedido de entrada e mapeá-lo sobre o formulário. Então vamos filosofar novamente e mostrar o que acontece. Agora, se eu o submeter. Salvará todos os meus valores. Legal. Porque quando o pedido chega, mapeia tudo aqui. Porque ainda não aconteceu nada porque não lidamos com a submissão. Então vamos acrescentar isso. Então vamos dizer que se submetido e é só fazer isso se o formulário é válido também. Primeiro de tudo, vamos atualizar esta entidade Order porque até este ponto, salvamos todos os valores que ele salvou. Foram salvos nesta forma. Mas eles não são realmente entidade mais velha. Mas se chamarmos isso obter dados e ordem de venda, isso irá atualizar o pedido que temos aqui com o nome, endereço de e-mail, endereço. E a próxima coisa que precisamos fazer é adicionar os produtos à cesta. Então, vamos chamar isso de obter produtos que chama a coleção de matriz na ordem. E eu vou falar com você. E então o que está acontecendo aqui? Bem, estamos a percorrer a cesta e a apanhar cada produto. E estamos usando esse ID do produto para encontrar a entidade no banco de dados aqui. E então estamos adicionando essa entidade na matriz de produtos no pedido. Então, se tivéssemos bicicletas gratuitas e nossa cesta, ele iria percorrer o medidor de cesta ou o GET AID grátis. Encontrar a entidade e adicionar n. Poderíamos tomar porque nós armazenamos a moto em uma sessão, poderíamos apenas adicioná-lo diretamente para a coleção matriz vai saber, porque se fizéssemos
isso, ele pensaria que era uma entidade separada. Então, quando eu estou adicionando aqui, nós precisamos ir buscar do banco de dados novamente. Então essa doutrina sabe que não estamos criando uma bicicleta nova aqui. É uma bicicleta existente no banco de dados que quer ser anexada a este pedido. Então, uma vez que fizemos isso, então construímos uma entidade inteira da Ordem. E agora só queremos salvar isso no banco de dados. E a maneira como fazemos isso é que precisamos obter o gerente de entidade, o que podemos fazer com isso. E então vamos dizer persistir, que significa salvar a auditoria no banco de dados. E então precisamos de uma chamada final, que é flush, que diz a doutrina para arruinar todo o SQL. Tem tamponado. Então, se você vai escrever várias entidades no banco de dados, você pode chamar persistir em um monte de diferentes, e então nenhuma delas realmente seria escrito até que você chame esse método flush. Então você tem que fazer isso manualmente para dizer, OK, agora escreva isso no banco de dados. E a razão é apenas para a eficiência por causa da doutrina dos aliados, se você está tentando adicionar cinco coisas, doutrina iria para o banco de dados cinco vezes. E muito mais eficiente para você dizer a doutrina quando você quer que ela vá e escreva para o banco de dados. Então, agora que temos e salvamos isso, podemos retornar um modelo separado. E vamos em frente e criar esse modelo também. Só queremos uma cabeça super simples que diga, parabéns ou não. Então isso é apenas salvar. Isto tem confirmação ponto HTML, galho. E eu vou dizer algo como se fôssemos vistos. Soletre errado e volte e conserte isso em um minuto. Sim. Ok, legal. Agora vamos voltar a esta página. E o que vai acontecer quando enviarmos isto? Vai haver uma era. Consegues adivinhar porquê? Certo, perfeito. Então nós temos um erro aqui porque esta tabela realmente não existe. Criamos a entidade que não criamos no banco de dados. Então vamos fazer isso na próxima lição.
53. Migrando a tabela de ordens: E como esperado, recebemos esse erro porque ainda não criamos a tabela de banco de dados. Então vamos em frente e fazer isso. Da mesma forma que fizemos antes. Nós vamos rodar PHP sido dashed console. Faça a migração ao lado da dos criadores. Um segundo arquivo de migração. Sim, então ele vai criar é essas tabelas de li. E então para executar essa doutrina, migrações
de dois pontos, dois pontos migram. - Legal. Se olharmos para a base de dados agora, vamos dizer que temos a nossa mesa mais antiga. E porque a doutrina é gerenciar a relação entre os pedidos e os produtos. Então vamos equiparar esta tabela de produtos de ordem com um link entre os dois. Mas não precisamos nos preocupar com que a doutrina lida com todos os estrangeiros. Vamos tentar enviar o nosso pedido. No entanto, temos nossa tela de confirmação tão grande. E aqui está a nossa ordem. Então vá são produtos mais velhos e em ordem. Podemos ver que está ligado as duas motos que temos lá também. Então, isso é perfeito. Apenas um par de tarefas de limpeza para fazer isso vamos cuidar da próxima lição.
54. Tender o checkout de vigas: A última coisa que queremos fazer aqui é limpar a cesta para baixo, porque mesmo que tenhamos apresentado a olga, na verdade tudo ainda na cesta. Então podemos fazer isso facilmente. E checkout controlador uma vez que o mais antigo foi enviado. E nós já trouxemos sessão e aqui para que possamos apenas dizer sessão set cesta. E nós poderíamos apenas desajustá-lo, quebrá-lo também apenas ajustá-lo para um array vazio. E agora, se passarmos pelo processo de pagamento novamente, perfeito. Então, a ordem foi enviada. Temos uma nova linha no banco de dados de pedidos e liberou Dan uma sessão para as motos e não mais na cesta.
55. Camões de e-mail e transporte: Neste módulo, vamos olhar para o envio de e-mail em sinfonia. Mas antes de fazermos isso, eu só quero entrar nessa idéia de usar uma camada de transporte e ser realmente claro sobre o que é isso. Então as bibliotecas de transporte realmente quem vai enviar o e-mail. Então, se você pensar sobre o e-mail sinfonia, um componente que é tipo de como seu cliente de e-mail. Como se você tivesse o Outlook ou o Thunderbird ou um cliente baseado na Web, como e-mails do G, interface
da Web ou talvez o aplicativo de e-mail no seu telefone. Mas isso não é fazer o envio real dos e-mails. Você precisa ter algum tipo de conta de e-mail. E o software apenas interage com essa conta de e-mail. E é o mesmo com o mailer sinfonia é que isso vai
interagir com a coisa que está realmente enviando os e-mails. E há um monte de opções que podemos fazer isso. Podemos apenas usar uma conta de e-mail padrão ou podemos usar o que é chamado de serviço de e-mail transacional. Então isso é como uma API que nos conectamos e dizemos, ok, enviou esse e-mail para essa pessoa. E isso é chamado de transacional porque você tende a enviá-los um de cada vez comparado a dizer, uma lista de discussão onde você iria sair e dizer, ok, eu quero enviar este e-mail para todas essas pessoas. Transacional tende a registrar um de cada vez usando uma API. Agora, em termos de enviar o e-mail para a pessoa, e-mail não é um sistema perfeito e alguns se perdem, alguns spam independente. E, em geral, o motivo pelo qual você pode pagar mais por um serviço de e-mail transacional em vez de apenas usar sua conta de e-mail é que pode ser melhor e evitar spam. Ou pode ser pior. É bom testar essas coisas porque ele nunca sabe dizer. Temos um monte de opções de camada de transporte na sinfonia. Ele vem com, por padrão, só obterá SMTP. Portanto, esta é a maneira normal que você configuraria um cliente de e-mail é ir para sua conta de e-mail, obter as configurações e ele lhe dará um nome de usuário e uma senha e, provavelmente, um servidor IMAP e SMTP para se conectar. E você também pode usar o Gmail. Gmail um pouco diferente, mesmo que seja apenas uma conta de e-mail normal. Há uma biblioteca separada que fornece sete dias se você quiser usar o Gmail. E então há um monte de serviços de e-mail transacionais. Coisas como correio,
armas, grade de envio, carimbo. A AWS da Amazon tem seus próprios custos de serviço de e-mail, simplesmente serviço de correio e chimpanzé masculino também. Agora que temos chimpanzé macho, estamos falando especificamente de mandril. Então você pode ter um acampamento de chimpanzés e que boletins para sua lista de e-mails. Mas há um serviço adicional de e-mail
transacional chamado mandrill que custa dinheiro extra que você pode adicionar à sua conta também. Então não é a coisa regular de e-mail chimpanzé lista de e-mail, é o serviço de mandril adicional que eles fornecem. Todos eles são bons. Eu realmente gosto de pistola de pregos pessoa eles, mas se você quiser ir para o serviço de e-mail de transação,
em seguida, basta fazer um pouco de pesquisa e ver qual deles funciona para você. Ou você pode simplesmente usar uma conta de e-mail normal como vamos fazer neste exemplo.
56. Instalando o pacote de e-mail: Para enviar e-mails, precisamos instalar o pacote de mailer. Então vamos em frente e fazer isso. Vamos apenas fazer compositor exigir sinfonia barra Mila. Damos um minuto para assumir isso. Vou derrubar a biblioteca do meio e então podemos começar a trabalhar usando-a e personalizá-la e implementá-la. Certo, perfeito. Estamos prontos para enviar e-mails.
57. Configurando o serviço de e-mail: Vamos em frente e configurar o serviço de e-mail. Então vamos para o nosso arquivo e então temos este mailer, o sol aqui. E a forma disso dependerá de qual camada de transporte usando, neste caso, estamos apenas usando o servidor SMTP básico. Então você vai precisar de seus detalhes SMTP discutidos, estilo um módulo. Ou você pode usar um serviço diferente, se desejar. E toma a forma de senha de usuário. E, em seguida, os detalhes SMTP e a porta. Agora vou em frente e trocar estes pelos meus detalhes reais. Mas obviamente você quer colocar seus dados pessoais aqui.
58. Enviando um e-mail de confirmação: Agora que configuramos o serviço de e-mail, vamos em frente e atualizar o checkout para usá-lo. Então vamos precisar trazer ainda mais aulas para cá. Na interface de email. Nós vamos trazer a integração galho bem
como porque queremos que ele seja agradável e modelá-lo. E então vamos usar a fiação de sinfonias para trazer o continente. E então vamos limpar a cesta antes de fazermos isso. Vamos ligar para o e-mail de confirmação. E eu vou passar na ordem. E a mielina. Agora vamos funções e estamos prestes a descer e criá-lo. Então vamos fazer isso agora. É um evento privado porque estamos correndo para chamá-lo a partir daqui. E chamamos de confirmação de envio por e-mail. Posso pegar um pedido. E uma interface de correio. Diga, Nova. Comece a configurar isso a partir de enviá-lo do meu domínio. E nós vamos para dois, e nós vamos usar isso como uma função de vestido. E nós compramos e nós poderíamos apenas colocar o endereço de e-mail lá dentro como uma string. Mas isso será melhor porque também podemos dar o nome. Então vamos receber o e-mail. Vamos conseguir o nome também. Assunto. Vou dizer confirmação mais antiga. E eu estou porque estamos usando um modelo hoje. Agora, vamos passar essa lista. E-mail tal ordem ponto ponto HTML galho novamente não existe. E, em seguida, o contexto está sempre passando em um galho variáveis. Então só mais velho lá dentro. E isso está feito. E então aqui eu vou dizer meu, vamos enviar este e-mail. Ok, então essa é a primeira parte feita. Vamos criar o modelo de e-mail na próxima lição.
59. Modelo de e-mail: Agora temos o nosso mau funcionamento da Sandy. Vamos em frente e criar um modelo. E desta vez não vamos estender porque é um e-mail. Vamos apenas salvar isso como ordenado, nosso galho HTML. E nós colocamos em um diretório e foi e-mails e linha de sésamo, obrigado pelo seu pedido. E depois podemos listá-los. mão abaixo vai dizer que vamos confirmar. O pedido foi despachado. Jose para água em todos os produtos. Digamos por objeto dopamina. Ok. Isso parece bem. Bastante simples, bem básico. Mas ele irá formar uma confirmação de pedido com o ID do pedido e listar os produtos que eles compraram de volta para eles. Ótimo, então vamos testar isso na próxima lição.
60. Testando a confirmação de e-mail: Configuramos todos os serviços e ambientes para o e-mail. Então vamos em frente e testar isso. Primeiro de tudo, vamos apenas adicionar algumas bicicletas ao nosso cesto. Lá vamos nós. Ótimo com Godfrey bicicletas agora cesta em uma compra que iria preencher meus detalhes. E confirmaremos que os pedidos não são muito rápidos porque vão falar com o serviço de e-mail. Ou se você estivesse fazendo isso em um grande projeto comercial, você faria isso de forma assíncrona, mas eu coloquei um e-mail em uma fila e alguém lidando com isso mais tarde, mas isso funciona bem por enquanto. Temos uma confirmação. Obrigado por Shaphan foi e se eu abrir meus e-mails, nós agora bem, é toda a conformação ou o número sete e tem as motos. Eu levantei isso também. Então Alex, perfeito. Agora pode ser o caso se este e-mail não aparecer na sua caixa de entrada imediatamente, você precisa ir até a sua pasta de spam e dar uma olhada no e-mail deles. Git tem, a maioria das pessoas vai saber, eu acho que você não é apenas muito confiável nos dias de hoje, porque a proteção contra spam mapa, e especialmente se você não conseguir que o e-mail configurado muito bem e realmente provedor genuíno, então você pode ser capturado em um filtro de spam. E a maneira como eles evitam é apenas provocá-lo duro, caro provedor de e-mail infelizmente. Mas espero que seja capaz de encontrar este e-mail em algum lugar e ver o mailer funcionando.
61. Considerações finais: Parabéns por chegar ao fim desta aula. Se você foi programando junto, você terá construído sua primeira loja de e-commerce sinfonia e agora sabe como sinfonia funcionou e eu adoraria que você compartilhasse seu código completo com a turma. Boa sorte e desenvolvimento feliz.