[Música tocando] ERIC Ouyang: Ei, todo mundo. Bem-vindo. Esta é a construção dinâmica Web Apps com Laravel. Meu nome é Eric Ouyang. Eu sou um estudante de segundo ano estudando estudos sociais com um secundário em ciência da computação, e eu vivo em Adams Casa aqui em Harvard. Então Laravel, em sua forma mais core, é uma estrutura de aplicativo web MVC. Assim como o que vocês têm vindo a fazer com CS50 Finanças, Laravel é um framework que permite -lo a construir aplicações web dinâmicas. Assim, você pode pensar sobre isso em alguns sentidos como uma extensão do tipo de material você tem feito em CS50 Finanças, mas um sistema que é muito mais robusto, uma grande quantidade mais elegante, em alguns sentidos, e fornece uma grande quantidade de funcionalidade para você para construir bastante complexo aplicações web. Então, vamos passar por alguns das principais características, e depois vamos mergulhar em uma exemplo de construção de um blog aplicação com Laravel. Assim, uma das primeiras coisas que diferencia de tipo MVC de trabalho que você tem feito com CS50 é ele inclui um motor ORM. Então ORM significa objeto relacional. Então, isso permite que você construa uma camada de abstração entre a base de dados e seus controladores. Assim, ao contrário do CS50 Finanças onde você diretamente fazer consultas, a camada ORM permite abstrato que longe e criar modelos que são mais poderosos do que você pode diretamente com consultas SQL. Outra coisa que é realmente útil é templates herdadas. Então, você vai notar no CS50 Finanças, você acaba reescrevendo um monte de coisas, onde lugares que você poderia potencialmente reutilizar coisas, você não é capaz de fazer. Então, aqui no Laravel, você pode usar o que é conhecido como o mecanismo de modelo de lâmina para criar um layout mestre. E a partir daí, você pode herdar de modo que os sub-modelos podem, na verdade, incluem elementos dentro esse modelo base maior. Migração. Portanto, esta é uma características bastante padrão em a maioria dos frameworks de aplicação web modernos. Então, o que lhe permite representar as alterações do esquema do banco de dados no código. Assim, sem vão dizer, phpMyAdmin, você pode realmente criar essas migrações onde representa o banco de dados alterações de esquema no código diretamente. E isso permite que você a-- especialmente Se você tem várias pessoas trabalhando na mesma teia application-- acompanhar essas mudanças, dizer no GitHub, ou algum outro repositório. Portanto, esta é realmente útil e mitiga a necessidade para, por exemplo, passar em torno de um monte de SQL lixeiras. E, finalmente, é Composer algo realmente útil que permite que você use outro código das pessoas para fazer coisas impressionantes. Então Laravel do estruturada como vários pacotes Composer. Então, dizer que se você queria trazer em um pacote de autenticação ou se você quiser trazer algum tipo de script gerador ou um administrador interface, você pode plug and play esses componentes com o compositor. Então, vamos começar. Qualquer dúvida de você caras antes de começar? Não há perguntas? Com estilo. Assim, o primeiro passo é instalar Composer. Então Composer permite que você gerir essas dependências, se é o quadro Laravel ou alguma outra extensão de terceiros. O primeiro comando permite você baixe Composer, eo segundo comando permite que você movê-lo para a pasta bin locais de modo que você pode executar Composer diretamente através do terminal. Depois disso, vá em frente e criar um novo projeto Laravel. Na verdade, estamos indo para utilizar algum código de exemplo que eu coloquei para criar este blog. Mas se você está começando do zero, você usaria esse comando aqui em cima, compositor criar-projeto, laravel cortar laravel, e em seguida o nome do seu projeto. E que incluirá todos os códigos de distribuição para iniciar um novo projeto Laravel. Portanto, para sua CS50 projetos finais, você vai provavelmente vai querer usar esse comando. Mas vamos começar com isso. Portanto, uma vez que você fez que, você está indo para obter um número bastante grande de arquivos em blog50. Então vamos passar por alguns destes componentes. Você vai notar a esta rota diretório, há uma pasta app. Dentro da pasta app, há um par de votos pastas. De nota para começar é esta pasta config. Então, isso configura como sua aplicação web é vai, digamos, autenticar pessoas ou coisas de caixa ou conectar ao banco de dados. E o que é realmente útil é que Laravel permite configurar diferentes ambientes de desenvolvimento. Então, o que nós fizemos aqui é se vamos na pasta local, há um arquivo database.php. E você vai notar aqui que nós configurar uma conexão MySQL que permite que os indivíduos para se conectar para o servidor MySQL que é directamente sobre o aparelho CS50. E nós estamos conectando a um banco de dados que configurei chamado Blog50. Então vamos realmente ir em frente e executar a versão de trabalho deste, só para ter uma noção do que o aplicação que estamos construindo parece. Então, eu tenho uma cópia do este Blog50 concluída. Então, na verdade, Laravel foi construído em um servidor que você pode executar diretamente a partir da linha de comando. Portanto, este é semelhante ao PSet antes, quando você, na verdade, construir o seu próprio servidor em C. Então, eles têm um construído em tão que você pode rodar seus aplicativos Laravel directamente a partir da linha de comando. Então, se nós fazemos php artesão servir, este vai lançar um servidor de desenvolvimento na porta 8000. Então, se vamos para host local 8.000, você vai perceber que, hey. Nós temos o nosso blog a funcionar. Assim Laravel aqui é gerar a primeira página do nosso blog. Aplicação muito simples. Mas há um par características muito bacana que ele fornece debaixo do capô. Então, do aplicativo de blog simples. Se quiséssemos criar um post, podemos clicar nesse botão. Podemos dizer: "Ei, pessoal. Este é realmente um divertido seminário ", por exemplo. E escrever algo aqui. Texto aqui. Se clicar em Enviar, você vai perceber que o nosso novo blog pós foi adicionado à primeira página do blog. Se voltarmos aqui, você vai perceber que tem havido alguns comentários já no blog. Então, se nós rolar para baixo, você vai notar que Jonathan Tan diz que ele estava muito intrigado com este post. Então, nós falaremos sobre como objeto relacional permite você fazer essas relações em uma forma bastante transparente também. Com estilo. Qualquer dúvida sobre a funcionalidade de que vamos construir? Com estilo. Então, vamos começar com verdade criar as tabelas de banco de dados. Então, lembra que em CS50 Finanças, você montar uma tabela para os usuários bem como para o stocks em sua carteira. Então, como mencionamos anteriormente, o que nós usamos em Laravel é algo conhecido como migrações. Então, se nós voltar para o código de distribuição aqui, o primeiro comando que é útil que Laravel fornece-lhe é este comando migrar. Então, podemos fazer php migrar artesão: fazer. Então, isso nos permite criar uma migração. E então nós vamos querer para criar uma migração chamado create_posts_table, que vai estar onde nós estamos indo para estar armazenando os nossos posts. E você vai notar aqui que ele é executado através de um código que, na verdade, gera um arquivo com um carimbo de tempo com isso. Então, se nós ir e olhar para Banco de Dados, vamos perceber sob Migrações que ele é criado um arquivo em branco para nós que tem código clichê com o nome que nós especificado, criar postos de mesa. E tem duas funções na mesma. Up é o que queremos para ser executado quando o migração é aplicada à base de dados. E para baixo é o que nós vamos fazer quando queremos reverter uma migração. Então, aqui vamos começar com a escrita esta migração. Portanto, há uma classe útil em Laravel chamado esquema. Então, nós estamos indo para executar Schema :: create. E nós estamos indo para criar uma tabela chamada postagens. E aqui nós aplicamos isso usando uma função. E dentro aqui, nós vamos realmente especificar o conteúdo de nossa mesa. Nós vamos criar um ID, que é auto-incremento. Além disso, vamos para criar um campo que representa o título do nosso blog. Nós também vamos criar um campo para armazenar o texto do nosso blog. E, finalmente, vamos para armazenar alguns timestamps para quando o nosso post foi criado e quando ele foi atualizado. E para baixo, é bastante simples. Tudo o que queremos fazer é cair a mesa que nós criamos. Ótimo. Alguma pergunta? Portanto, agora se formos adiante e- na verdade, host local, deixe-me apagar o que tínhamos anteriormente. Ir para Databases. Eu vou apagar o que tínhamos anteriormente. Largue isso e criar um novo banco de dados Blog50. Então agora o que o mágico parte é aqui que nós pode aplicar essas migrações diretamente ao banco de dados usando a linha de comando ferramenta. Então, se nós fazemos php artesão migrar, você vai perceber que, hey. É criada a tabela de migração, que nós vamos dar uma olhada em um pouco, e é aplicada esta primeira migração. Então olhamos para Blog50, você notará que ele é criado duas mesas para nós. A primeira é esta tabela migrações. Então, se nós ver isso, você vai perceber que esta tabela é bastante simples. É só dizer que, hey. Nós aplicamos essa migração. Nós voltar e olhar nos postos. Você vai notar que a estrutura é exatamente o que lhe tinha pedido. Temos um ID auto-incremento. Nós temos uma string para armazenar o título, e um campo de texto para armazenar o conteúdo. Ótimo. Com estilo. Qualquer dúvida sobre migrações trabalho, como podemos aplicá-las? Não? Com estilo. Então, agora nós estamos indo para ir em frente e, na verdade, criar o modelo. Por isso, queremos criar um modelo de mensagens que armazena uma abstração de banco de dados. Então, ao invés de fazer consultas MySQL diretamente, nós vamos criar. Portanto, temos de criar um pasta aqui chamados modelos. E aqui dentro, nós vamos criar um arquivo chamado post.php. Dentro desse arquivo PHP, vamos criar um posto de classe que se estende eloqüente. Eloquente é o nome da ORM motor que fornece Laravel. E, aqui, poderíamos esperar que você realmente precisa escrever algum código. Nós estamos indo para escrever algum funções auxiliares posteriores. Mas fora da caixa, isso já vai reconhecer o que está no banco de dados e podemos acessar, digamos, o texto do nosso post de blog ou o título, e criar coisas diretamente com praticamente nenhum código que seja. Então, isso é um dos componentes mágicos. E o vento uma vez que esta classe é mais de pleno direito, vamos incluir informações sobre o que ao qual está relacionado, de modo que os comentários. Também criar uma função para que possamos realmente obter diretamente a URL de uma página post. Com estilo. Qualquer dúvida sobre isso? Não. Com estilo. Então, agora, uma vez que temos o nosso modelo, quer criar um controlador que é capaz de interagir com estes modelos, e, subsequentemente, a base de dados. Então, se tomarmos uma olhada BlogController, você vai notar que não há muito aqui agora. Tudo o que há é uma função index que gera a home page, mas sem nada Ainda há a exibir. Assim, a primeira função que nós estamos indo para criar é aquele que nos permite para criar um blog. Então vamos declarar uma nova função chamada newPost. E aqui dentro simplesmente, vamos para definir o layout da página para ser uma versão render, se você se lembra de CS50, deste modelo chamado blog.new, que vamos criar em um pouco. Você notará aqui na linha seis que especificamos essa variável, layout. E se dermos uma olhada na pasta Views, há uma pasta Layouts, que inclui um arquivo HTML muito básico. E de nota, você notará que temos esse recipiente aqui que produz conteúdo. Então, dentro do nosso modelo o que nós vamos fazer é criar o que vai ser substituído diretamente dentro deste layout. Então nós dissemos que queremos renderizar um modelo chamado blog.new. Mas dentro do Blog, há ainda não este novo modelo. Então vamos criar um arquivo chamado new.blade.php. Isto diz que Laravel esse arquivo PHP deve ser prestado com o modelo de motor lâmina. Portanto, esta é uma forma justa arquivo simples. Vai ser a forma pela qual nós realmente adicionar em um post de blog. Assim, a magia aqui a partir do herança é que, hey. Queremos especificar que o seção, a seção de conteúdo aqui, que é delineada porsection estop. Então, o que há entre aqui vai ser substituído no layout mestre. E aqui o que nós queremos fazer é muito simplesmente criar um novo arquivo HTML. Vamos apenas adicionar um título rápida. Adicionar um post de blog. E dentro dele, nós somos vai criar um formulário. Esta forma vai ter uma ação. E isso vai ser algo que substituir mais tarde, e vamos ver como roteamento se encaixa aqui. Mas nós apenas estamos indo para definir, por enquanto que esta vai para um URL com o percurso de createPost. E então isso vai ter método post. Dentro aqui, nós vamos ter dois campos. Div class = "grupo-forma". Estamos usando a biblioteca Bootstrap CSS graciosamente fornecido pelo Twitter. Então, nós vamos criar dois destes. Portanto, esta entrada é primeiro vai ser o título. Nome Então input = "title". Class = "formcontrol". Type = "text". Eu estou indo para adicionar um espaço reservado = "Title". E, em seguida, o segundo é vai ser uma área de texto. Name = "conteúdo". Class = "formcontrol". E espaço reservado = "Escreva aqui". Lá vamos nós. Finalmente, vamos adicionar um botão rápido envio. Type = "submit" class = "btn btn-primário". Então, esses são todos características de Bootstrap assim que este pode ser colocado de uma forma que é presa para o usuário, em vez de HTML nu. Então, nós definimos o controlador aqui. Nós já definimos uma visão muito simples. Mas o que está faltando é do tecido conjuntivo. Então, neste momento, Laravel não tem idéia de como vamos realmente acessar este controlador. Portanto, este é definido em um arquivo chamado routes.php. E, neste momento, temos uma rota. Que é quando vamos para o caminho de casa para o site, que vai processar o controlador de índice. Então, aqui o que nós precisamos fazer é implementar uma nova rota para nós para criar um post. Então, nós usamos este método obter, que especifica que, quando um usuário tenta obter este página-- especificamente o post cortar novo página-- o que nós vamos fazer é usar o controlador chamado BlogController novo post. O que acabamos de criar. E então nós vamos alias como newPost. Nós vamos criar outro função em um pouco. Mas o que está aqui sob a chave ", como" é o que podemos substituir dentro nossos modelos da lâmina. Então, por agora, vamos na verdade, também dizem rota. Então, nós também vamos para criar um controlador para que possamos criar essas mensagens. Portanto, se um usuário postagens para o pós página barra nova, o que nós vamos fazer é utiliza um controlador que vamos criar em breve chamado BlogController em createPost. E nós vamos fazer a réplica com este como createPost. Com estilo. Alguma pergunta? Com estilo. Então, vamos executar o que temos até agora. Então, se nós fazemos php artesão servir, vamos ver muitos erros. Portanto, parece que temos um erro de sintaxe em rotas linha 27. Ah. Faltando um ponto e vírgula. Então, se vamos para 8000, você vai ver nada aqui ainda. Portanto, esta é a página inicial padrão. Mas se formos para deixar cortar novo, hey. Vai ser a forma que acabamos de criar. Neste momento, não temos implementado a funcionalidade de quando se pressiona o botão Enviar. Então, se eu clicar no Enviar botão, ele está indo para executar um erro. Mas vamos ao código que agora, precisamente o que nós quer fazer quando um usuário sustenta esta forma. Então, vamos fazer isso. Volte para o arquivo de controladores. O que vamos fazer é implementar esta nova função que nos permite criar um post. Declare nova função. CreatePost função pública. E essa função vai ser um pouco mais sofisticado do que o que que tínhamos antes. Mas você vai ver aqui que não estamos vai realmente escrever qualquer SQL. O ORM, o Eloquent ORM, vai permitir -nos a fazer isso em alguns formas uma maneira mais elegante. Então vamos criar um novo post. E aqui estamos instanciar um novo objeto a partir do modelo que acabamos criado, o modelo post. E o que nós vamos fazer é definir o atributo título deste usando algo que começa a partir do servidor. Portanto, este é semelhante ao que que tínhamos antes em CS50 Finanças onde gostaríamos de fazer, usando o Super Global Post procurando título. Então Laravel fornece algumas saneamento e outros enfeites usando essa função auxiliar. Então, nós preferimos usar isso em vez desta forma bruta muito básico de PHP. E então o que vamos fazer é definir o conteúdo do mesmo para obter o conteúdo de entrada. Na verdade, estamos indo para embrulhar isso em uma função útil PHP que fornece chamado nl2br, que Acontece novas linhas, NLS, em brs, pausas, para que possamos realmente ter diferentes pontos dentro dele. E, finalmente, o que vamos a fazer é salvar este post. Então, nós chamamos a função guardar para este modelo. Vamos salvar o post. E, finalmente, o que nós vamos fazer é redirecionar o usuário especificamente para o percurso que vamos criar em breve, alias, viewPost. E nós estamos indo para passar nos argumentos id, sendo o id deste novo post. Ótimo. Então, agora, se realmente ir e executar este. Nós vamos adicionar um novo post. Vamos dizer que este é o seminário 50. E dizer, com certeza. ADSL. Tanto Faz. Algum tipo de conteúdo. E apresentá-lo. E nós vamos perceber que, hey. rotas não definido. Mas se dermos uma olhada e phpMyAdmin procurar ou não a nossa função fez nada. Olhe para os posts Blog50. Vamos perceber que, hey. Na verdade, nós apenas criar esse blog enviar com a data e hora, conforme especificado. Então agora vamos voltar e realmente criar esta outra função no nosso controlador, especificamente o controlador viewPost. ViewPost função Então público. Então, aqui o que vamos fazer, em vez de ter parênteses vazios, vamos querer passar o ID de o post que estamos criando. E a partir daqui que nós vamos fazer é realmente consultar o banco de dados para ele. Então, se nós não postar, há uma função chamada Encontre que nos permite consultá-lo por ID. Especificamente, na verdade, nós vamos usar uma versão alternativa deste chamado Procure ou Fail, o que nos permite para sair fora desta função, lançar uma exceção se o ID passamos em não existe. E então nós vamos fazer algo semelhante ao que fizemos anteriormente onde vamos definir o conteúdo desta página para ser a versão processada desse novo modo de exibição que vamos criar, blog.view. E nós vamos passar para ele-- Assim como no CS50 renda function-- um dicionário de variáveis. As chaves desta matriz associativa tornam-se variáveis ​​dentro do modelo. Então, nós estamos indo fazer pós post. Então passar indiretamente o cargo que temos consultado a partir do banco de dados. . Agora, o que nós vamos fazer é criar essa visão para que possamos realmente ver os posts do blog que temos construído. Então vamos criar um arquivo chamado view.blade.php. Então, dentro desse modelo, o que nós vamos fazer é montar uma página simples que nos permite mostrar o conteúdo. Então nós fazemos parte, que é antes de conteúdo. Pare. E o que vamos o que fazer dentro aqui é escrever algum HTML para exibir esta página. Então, nós estamos indo para envolvê-lo com uma fantasia novo elemento HTML5 chamado artigo. E, aqui, nós vamos ter um cabeçalho onde vamos simplesmente ter um h1, que inclui o título do post. Então, aqui, se olharmos para este notação chaveta dupla, isso vai fazer essencialmente PHP echo título do post. Portanto, é uma abreviação útil Laravel que nos fornece. Então, nós estamos indo para usar esta notação em vez disso. E aqui, nós vamos também imprimir o conteúdo do mesmo. E, aqui, nós vamos fazer conteúdo do post. E, na parte inferior do que somos vai fazer é criar um rodapé. E no rodapé, vamos primeira exibição quando este foi publicado. Portanto, este foi publicado em, criada no. E Laravel usa um muito bom biblioteca data chamado carbono. Assim, podemos realmente fazer algo chamado difforHumans, o que você viu anteriormente. Quando postamos. ele vai dizer: tipo, cinco segundos atrás. Portanto, este é um muito bom funcionalidade de Laravel. E, finalmente, vamos para fechar esta rodapé. Portanto, agora se voltar para Home Page vamos para ver nada aqui ainda porque não ter codificado a home page. Mas se formos para postar uma barra, vamos ver uma exceção. Alguém sabe por que vemos uma exceção? O que estamos perdendo? Qualquer idéias? Então, o que nós fazemos mais cedo para nós, na verdade, para definir como nós conseguimos controladores em particular? COLUNA 1: A rota? ERIC Ouyang: Yeah. Portanto, ainda temos de definir o percurso. Então vamos voltar aqui para routes.php. Você vai perceber que nós realmente não tenho definido como vamos chegar a este controlador. Então, agora vamos definir essa rota. É bastante simples, semelhante ao que fizemos anteriormente. Mas o que nós estamos indo para notar aqui é que nós vamos ter um espaço reservado. Então, se nós fazemos route.get pós barra ID. Então ID agora é o que vai ser passado para o controlador. Isso vai usar o controlador que acabamos criado, em BlogController viewPost. E nós vamos aliás esta como viewPost. Ótimo. Então agora vamos criar esta rota. Portanto, agora se vamos aqui e atualize esta página, nós, de fato, têm o nosso novo blog. Então é isso que nós criamos mais cedo. Mesma página simples, mas mostra o blog que acabamos de criar. Com estilo. E se nós realmente passar por todo processo de criação de um novo post, vamos perceber que tudo redireciona corretamente. Se eu disser: "Oi. Estou Jonathan Tan. " Diga: "Este é o meu blog." E apresentá-lo, isso vai criar este novo post com ID 2, que incrementos do que tínhamos anteriormente e apresenta-lo corretamente. Impressionante. Alguma pergunta? Sim? COLUNA 2: Será que Laravel handle sanitização e tudo para você? ERIC Ouyang: Sim. Então, quando nós vimos antes, quando fizemos entrada cólon cólon obter, que sanitates qualquer SQL injeções e outros enfeites que pode querer executar se nós somos um usuário mal-intencionado do site. Então Laravel lida com um monte de que, por trás dos bastidores. Boa pergunta. Então, vamos dar uma olhada na home page. Então, se nós primeiro voltar para o controlador para a home page, você vai perceber que ele não faz muito aqui. Você vai notar que não estamos passando para este controlador nada de particularmente útil. É apenas este arquivo de índice. Então, vamos passar para este algo útil. E, especificamente, estamos vai passar nos postos. E Laravel nos permite fazer pós tudo, o que nos permitirá obter todas as mensagens. Agora, se voltar para index.php, você vai ver, hey. Nada aqui ainda. Mas o que queremos fazer aqui é, na verdade, iterar, fazer um loop foreach sobre os lugares que nos permite imprimir as mensagens. Assim como postos foreach post, o que nós queremos fazer é imprimir o conteúdo do post. Mas uma coisa que você vai notar é que nós realmente escreveu a maior parte desse código já, em view.blade.php. Então, o que nós vamos fazer é, na verdade, usar um recurso útil agradável de Lâmina e fatorar o código comum. Então vamos aqui. Nós vamos levar este conteúdo aqui mesmo, eo que nós vamos fazer é criar uma nova pasta. Vamos chamá-lo apenas Partials. E, aqui, nós vamos para criar uma post.blade.php. Então, aqui, nós consignado aponta o caminho para que queremos exibir essas mensagens. E aqui o que vamos fazer em vez de realmente ter que HTML diretamente, vamos usar essa diretiva chamado incluem blog.partials.post. E o que nós vamos fazer aqui é passar no post da página. Portanto, agora se voltar aqui, nós vamos notar que a funcionalidade ainda é o mesmo. Mas agora temos este fatoramos código, este HTML. Assim, podemos usá-lo em Index. Então, aqui, isso é muito simples. Tudo o que fazemos é incluir blog.partials.post e array. E em algum lugar para antes, o que fazemos pós post. Portanto, agora se voltar para o home page, vamos ver que, hey. Temos uma lista de todos os posts que tínhamos antes. Podemos querer adicionar um pouco de "se" condições e as condições "senão" de modo que se não temos qualquer coisa no blog, queremos mostrar algo útil. Como, hey. Não há conteúdo ainda no blog. E se vocês realmente olhar para o código de distribuição no GitHub, você verá um exemplo de como podemos fazer isso. Com estilo. Alguma pergunta? Sim. COLUNA 2: Eu acho que apenas uma questão fundamental. De volta ao percurso. ERIC Ouyang: Yeah. Se dermos uma olhada rotas. COLUNA 2: Onde é que a uses.blogcontroller a criar post, o que isso nos direcionar para? ERIC Ouyang: Yeah. Sim. COLUNA 2: Ou o que é isso-- ERIC Ouyang: Então, dê uma olhada, dizem por exemplo, esta rota bem aqui. A primeira parte é o real URL que o usuário vai para. E essa matriz aqui, matriz associativa, define como queremos ter a ato aplicação em resposta a ele. Então usa é o controlador, a função que nós quer chamar quando um usuário vai para este URL. Então viewPost aqui era um função que definimos no interior de BlogController-- COLUNA 2: Entendo. ERIC Ouyang: --so que nós pode realmente tornar um ponto de vista, realizar alguns cálculos, interagir com o banco de dados SQL. COLUNA 2: OK. ERIC Ouyang: E ​​depois o outro parte ", como" é um apelido que nós usamos. Então, se nós perceber quando criamos o formulário, você vai perceber que URL :: routecreatePost. Então, ele substitui na real URL para que não são difíceis codificação destes em para que possamos alterá-lo uma vez, dizer se queria mudar o nome. Em vez de barra de pós novo, queremos fazer, como, p cortar novo só para limpar nossas URLs um pouco. Gostaríamos de mudá-lo em um local bastante do que em todos os diferentes ficheiros. Com estilo. Isso é bom. Portanto, agora temos um muito blog plataforma básica. Nós provavelmente vai querer adicionar em um botão para que podemos realmente criar novos postos. Então, se vamos dar uma olhada no Mestrado Layout, temos uma seção chamada Header Direito que acabamos de definir-se no topo. Assim, podemos adicionar botões para a parte superior do cabeçalho. Então, se vamos para index.blade.php, na verdade, fazer é definir o que se passa aqui dentro. Portanto, esta seção Cabeçalho direito, o que nós vamos fazer é adicionar um botão para ir para o URL definida pela rota novo post. Só para limpá-lo e torná- -la bonita e todos Bootstrap, vamos fazer este botão padrão. Vamos apenas torná-lo grande para se divertir. E dentro dela, poderíamos colocar algum texto. Mas o que Bootstrap proporciona é glyphicons. Assim, podemos realmente adicionar em que bom lápis que vimos anteriormente. Glyphicon. Glyphicon-lápis. Então, isso vai nos permitir colocar num ícone em vez de texto. Agora, se não parar, este vai definir nesta seção. E, hey. Temos um botão agradável que nos liga diretamente ao adicionar uma página de blog. Portanto, temos um blog bastante simples. Podemos adicionar coisas a ele. Mas o que nós geralmente esperam de blogs está comentando. Então é muito importante para nós ter, dizer que, se alguém visita um website e realmente gosta do post que eles podem se envolver em discussão com outras pessoas que visitam a página. Então, nós estamos indo para ir e criar um nova tabela de banco de dados e um novo modelo para que possamos associar comenta com mensagens. Então o primeiro passo, como antes, é que precisamos para executar uma migração. Assim como antes, o que fazemos php artesão migre: fazer. E nós estamos indo para criar um chamado create_comments_table. Isto irá criar um arquivo que tem a nossa nova migração. E nós vamos, como antes, definir uma nova tabela. Então Schema :: criar um tabela chamada comentários. Esta função aqui. E dentro deste quadro que nós vamos fazer é em primeiro lugar, como antes, atribuir um ID. Incrementa ID. Nós estamos indo para permitir que os usuários a associar seu nome com um comentário particular. Nós vamos ter algum conteúdo que vai junto com isso, o conteúdo do texto. E aqui o que nós estamos indo para fazer é algo diferente. Nós vamos criar um inteiro que é chamado post_id que vai significar que o pós um comentário especial vai com. Além disso, nós estamos indo realmente para definir uma restrição de chave estrangeira sobre o assunto. Então, MySQL irá impor isso. Nós não estamos tentando atribuir o número de comentário 5 para postar 5.000 se não tivermos teve 5.000 posts sobre isso. Então, o que fazemos aqui, fazemos post_id estrangeira vai ser associado com o campo ID dos postos da tabela. E nós vamos realmente fazer alguma coisa outra coisa útil, é onDelete. Então, se nós apagar alguns postar a partir do banco de dados, que queremos cascata do exclui para comentários também. Porque não é muito útil para nós ter comentários sobre os posts que não existem. E, finalmente, como antes, nós estamos vai definir carimbos de tempo sobre este assunto. E, como antes, nós vamos têm a migração inversa ser eliminando a tabela comentários. Portanto, agora se voltarmos para aqui, nós vamos para executar esta migração, artesão migrar. E agora ela é aplicada esta migração que acabamos de criar. Então, se nós um olhar para phpMyAdmin, o que fazemos, de fato, agora ter uma tabela de comentários que tem o estrutura que acabamos especificado. Assim como antes, nós estamos vai criar um novo modelo abstrair a tabela de SQL que acabamos de criar. Então, vamos adicionar um novo arquivo. Vamos chamá-lo de comment.php. E isso é realmente vai ser bastante simples, com uma ligeira mudança do que tínhamos antes. Assim, a classe Comentário estende eloqüente. E o que vamos fazer aqui é definir uma função que é a relacionamento com outros modelos. Então, nós vamos ter uma função de pós aqui que retorna este relacionamento. Então, nós estamos especificando que isto pertence a postar, dizendo que há um posto que este comentário pertence. Esta tem de ser efectivamente P maiúsculo para o modelo. E agora apenas no outro aleta lado, temos a dizer que, hey. Posts tem comentários. Então, o que nós vamos fazer é definir comentários de função pública. E aqui é devolvido Isto tem muitas Comment. Então agora magicamente quando temos um post, podemos obter os comentários de atributos e ele vai preenchê-lo com o informações da base de dados. Então vamos realmente passar e adicionar um novo recurso para o nosso arquivo de visão para que possamos tanto exibição e criar comentários. Então, vamos definir uma nova seção. Vamos apenas separá-lo com uma regra horizontal. Seção id = "Comentários". O que nós vamos fazer aqui é, como antes, percorrer todos os comentários. Então, na verdade, como fazemos isto é, como já referi, bastante mágico. Fazemos postar comentários. E então nós podemos fazer isso para cada loop sobre cada um dos comentários. E o que nós estamos indo para fazer é classe div comentário, e nós estamos indo para realmente imprimir este comentário. Então mostrar que hey, comentar nome-- a pessoa que publicou este comment-- diz dot dot dot. Vamos colocar isso em um bloco Citação, apenas para torná-la agradável. E em seguida, comentar bloco de citação de conteúdo. E foreach. Portanto, agora é que isto vai fazer um loop através de todas as opiniões que está associada com cada um dos postos e exibir cada um desses comentários. Eu estou indo para adicionar uma outra seção para baixo aqui, o que nos permite adicionar um comentário. Classe Então h3. Coloque um título aqui. Adicionar um comentário. E nós vamos definir uma nova forma. Assim como antes, nós estamos vai fazer ação de formulário. E aqui, a nova ação é que estamos indo para definir um novo controlador que permite-nos responder para postar pedidos de criação de comentários. Então URL :: rota createComment. Vou passar no parâmetro aqui. O ID do post que estamos criando comentar. E, em seguida, o método do presente forma vai ser post. Agora vamos adicionar em a dois campos, grupo formulário. Esta vai ser uma entrada com o nome "nome" e class = "-control forma", type = "text", e com o espaço reservado = "Seu nome". Nós também vamos definir outro campo de formulário, que vai ser um texto área como tínhamos antes. Assim como antes, chamá-lo de conteúdo. Class = "-control forma." Espaço reservado = "Escreva aqui." E só assim que nós realmente pode submetê-lo, apresentar tipo e class = "btn btn-primário." Feche o formulário. Feche essa ação. Então, agora, se atualize esta página onde temos, digamos, um post especial. Nós temos que reiniciar o servidor. PHP artesão servir. Reinicie isso. Temos de definir o percurso. Mas, por agora, vamos aproveitar esta para fora, para que possamos realmente mostrar-lhe o que a página parece, e, em seguida, vamos realmente criar essa rota. Então, hey. Nós temos esta nova forma aqui para que possamos criar comentários. Então vamos realmente definir um função dentro do controlador para que possamos adicionar comentários. Vamos voltar. E dentro blogcontroller.php, o que nós vamos fazer é criar uma nova função chamado criar comentário. CreateComment função pública. Isto vai ter um único parâmetro, o ID dos postos que estamos comentando. E, como antes, estamos vai pegar o primeiro post. Então postar, id findOrfail. Depois, vamos para criar um novo comentário. Então comentar = new Comment. Comentário name = Input :: get nome. Conteúdo Comment = a mesma linha nova em intervalos de entrada :: obter conteúdo. E, finalmente, vamos ter que associar este comentário com o post. Então, nós estamos indo para usar esta função, comentários, que nos permite economizar esta relação. Então agora este comentário terá automaticamente o ID post. Nós também pode configurá-lo manualmente, mas esta é mais fácil de ler, tanto como a função vai. E depois nós realizamos isso, o que nós queremos fazer é redirecionar o usuário para o rota especificada por viewPost com a matriz com o parâmetro da ID post. E agora, de modo que este, na verdade, funções, precisamos definir esta rota. Route :: post. E agora nós vamos chamar esse pós cortar ID barra comentário. Matriz usa a nova função que acabamos de criar. BlogController. CreateComment como createComment. Ótimo. Então, agora espero que se atualize esta página e adicionar em um comentário, digamos, David Malan. "Esperamos que isso funciona". Enviar. Nós, de fato, ter um comentar este post. Com estilo. Portanto, agora temos um bastante post funcional. Nós apenas estamos indo para adicionar um par de ajustes de modo que temos um pouco mais útil informações sobre essas mensagens. Então, se nós voltar para o primeira página, não temos sentido de quantos comentários são em cada uma destas mensagens. Então, o que nós estamos indo realmente a fazer é, dentro do nosso modelo, definir uma função auxiliar que permite -nos para especificar o número de comentários que ir com um post especial. Então, nós estamos indo para criar uma função auxiliar. Função Pública. GetNumCommentsStr. Assim, uma seqüência de caracteres que especifica o número de comentários que ir junto com ele. E o que nós vamos fazer é dizer que num = esta comentários contar. Então, nós estamos indo para contar o número de comentários. E se esse número for igual a 1, nós somos só vai retornar 1 comentário. E, em seguida, caso contrário, queremos voltar a concatenação de num e comentários, assim que nós começamos a pluralização correta. Basta fazer isso uma única citação. Um comentário. E agora nós podemos usar esta função diretamente dentro do nosso ponto de vista. Então, se nós voltar para o mensagens parciais que criamos, agora queremos realmente exibir o número de comentários. Então, o que nós podemos fazer é post, usar esta função que acabamos de criar a exibir o número de comentários. Então, se nós agora atualizar, ele faz, de fato, display os comentários número que ir junto com ele. Se quiséssemos ser extravagante, se você realmente olhar para o código de distribuição, podemos realmente link isso para os comentários. Se bem se lembram, nós definido dentro do ver que isso não tem comentários seção de identificação. Então, se nós realmente queria vincular directamente para a secção de comentários, o que faríamos aqui é a href URL do viewPost rota. Passe no ID matriz de pós ID. E então nós queremos ir para especificamente a seção de comentários. Aqui vamos fechar a A tag. Então, agora, se atualize esta página, clique sobre este assunto. Vamos ir diretamente para a seção de comentários. Se tivéssemos um post mais longo, você pode realmente ver este salto baixo. Mas você vai perceber que ele é não no topo da página. Com estilo. Ótimo. Então isso é um bastante simples exemplo de algo simples que você pode fazer com Laravel. Mas você pode notar aqui que nós fizemos um monte de coisas com bastante pequena quantidade de código. Laravel nos permite fazer a Consultas SQL nos bastidores. Ele faz o saneamento para nós nos bastidores. Nos permite fazer essas relações muito facilmente, sem nós, precisando para fazer qualquer SQL juntar declarações à combinar observações com o que os postes. Permite-nos fazer isso herança de modelos para que possamos definir estes nidificação arquivos por isso não estamos nos repetindo, assim como quando tivemos que exibição dos posts do blog que não temos a copie e cole o código. E a partir daqui você pode construir aplicações cada vez mais complicados. Você pode imaginar se queria implementar log-in, poderíamos dizer, trazer um terceiro estrutura que nos permite fazer isso. Há um monte deles que são muito, muito grande que pode fazer, como, recuperação de senha. E vai enviar-lhe uma redefinir a senha do e-mail. Podemos implementar permissão para que eu possa criar um post, mas alguém não pode editá-lo. Podemos implementar funcionalidade para apagar posts. Mas você pode ver aqui que nós temos muito tanto todos os componentes rudimentares para construir alguns realmente, realmente, aplicações dinâmicas e emocionantes da web. Então, com isso, eu acho que estamos bem. Vocês têm alguma dúvida? Sim? COLUNA 3: Como você obter conteúdo estático? ERIC Ouyang: O conteúdo estático. Então você viu antes que quando tivemos isto aqui, este conteúdo layout, vista make, tivemos este sem esta matriz depois. Blog.index, tivemos este como apenas um arquivo estático. Então, se nós não passar nada junto a ele, isso só vai tornar o HTML diretamente. Mas se nós passamos neste associativa variedade de mensagens, que é dinamicamente puxado a partir da base de dados, nós pode tornar a página dinâmica. Com estilo. Alguma outra pergunta? COLUNA 3: Como você compararia Laravel para talvez algumas outras opções? ERIC Ouyang: Claro. Sim. Então Laravel é-- isso é um grande question-- uma das muitas opções de frameworks web. Então Ruby on Rails é um que é popular. Acredito Twitter costumava ser implementado com Ruby on Rails. Eu acho que eles desde comutada. Há um outro chamado FuelPHP. Então Ruby on Rails usa a linguagem Ruby e implementa um monte de coisas MVC que vemos aqui. FuelPHP é outro framework PHP. Django é um dos meus favoritos. É um framework web para Python. Assim, você pode escrever seu aplicativo web em Python. Portanto, há uma tonelada de estas opções. Laravel, eu acho que, de um modo grande é o meu direito favorito agora para PHP só porque dos componentes que falamos anteriormente. É Composer habilitado. Ele inclui um muito, muito sistema ORM expressivo. Também tem uma modelagem realmente incrível língua que alguns dos outros só não fornecem. E migrações. As migrações são incríveis. Legal? Impressionante. Bem, muito obrigado por assistir a este seminário, e boa sorte em seus projetos finais.