[Jouer de la musique] ERIC OUYANG: Hey, tout le monde. Bienvenue. Ce est du bâtiment dynamique Applications Web avec Laravel. Mon nom est Eric Ouyang. Je suis un étudiant en deuxième année à étudier les sciences sociales avec un secondaire en informatique, et je vis à Adams Maison ici à Harvard. Donc Laravel, à son plus central, est un cadre de l'application web MVC. Donc, comme ce que vous les gars ont été fait avec CS50 Finances, Laravel est un cadre qui permet de construire des applications web dynamiques. Ainsi, vous pouvez penser que ce est dans un certain sens comme une extension du type de choses vous avez fait dans CS50 Finances, mais un système qui est beaucoup plus robuste, beaucoup plus élégant dans un certain sens, et fournit un grand nombre de fonctionnalité pour vous de construire assez complexe applications web. Donc, nous allons passer par un certain des caractéristiques clés, et puis nous allons plonger dans un exemple de construction d'un blog application avec Laravel. Donc l'une des premières choses que différencie de Type MVC de travail que vous avez fait avec CS50 est-il inclut un moteur de ORM. Donc ORM signifie objet mappage relationnel. Donc, ce qui vous permet de construire une couche d'abstraction entre la base de données et vos contrôleurs. Donc, contrairement à CS50 Finances où vous faites directement requêtes, la couche ORM vous permet de abstraite qui loin et de créer modèles qui sont plus puissants que vous pouvez directement avec des requêtes SQL. Une autre chose qui est vraiment est utile modèles héréditaires. Donc, vous remarquerez dans CS50 Finances, vous vous retrouvez réécriture beaucoup de choses, où endroits que vous pourriez potentiellement réutiliser les choses, vous n'êtes pas en mesure de. Donc, ici, à Laravel, vous pouvez utiliser ce qui est connu comme le moteur de template de la lame pour créer une mise en page maître. Et à partir de là, vous pouvez hériter de sorte que les sous-modèles peuvent réellement inclure des éléments à l'intérieur ce plus grand modèle de base. Migration. Donc, ce est une des caractéristiques assez standard sur la plupart des cadres d'applications Web modernes. Donc, ce qui vous permet représentez les changements de schéma de base de données dans le code. Donc, sans aller à dire, phpMyAdmin, vous pouvez réellement créer ces migrations où vous représentez la base de données modifications de schéma dans le code directement. Et cela vous permet to-- particulier si vous avez plusieurs personnes travaillant sur le même Application-- Web suivre ces changements, dire GitHub, ou un autre référentiel. Donc, ce est vraiment utile et atténue la nécessité à, disons, passer autour d'un lot de SQL décharges. Et enfin, est Compositeur quelque chose de vraiment, vraiment utile qui vous permet d'utiliser d'autres le code de gens à faire des choses impressionnantes. Donc Laravel est structuré comme plusieurs paquets de compositeur. Alors dites si vous vouliez apporter dans un package d'authentification ou si vous voulez mettre un peu sorte de script de générateur ou un admin interface, vous pouvez brancher et de jouer ces composants avec le compositeur. Donc, nous allons commencer. Les questions de votre part gars avant que nous commencions? Pas de questions? Cool. Donc, la première étape est Compositeur installation. Donc Compositeur vous permet de gérer ces dépendances, si ce est le cadre Laravel ou une autre extension certains tiers. La première commande permet vous permet de télécharger Compositeur, et la seconde commande vous permet de le déplacer dans votre dossier bin locale de sorte que vous pouvez exécuter Compositeur directement par l'intermédiaire du terminal. Après cela, allez-y et créer un nouveau projet Laravel. Nous allons en fait utiliser quelques exemples de code que je ai mis en place pour créer ce blog. Mais si vous êtes à partir de zéro, vous devez utiliser cette commande ici, le compositeur crée-projet, Laravel slash Laravel, puis le nom de votre projet. Et qui comprendra tout le code de distribution pour démarrer un nouveau projet Laravel. Donc, pour vos projets finaux CS50, vous aurez voudrez probablement utiliser cette commande. Mais nous allons commencer avec cela. Donc, une fois que vous avez fait cela, vous allez obtenir un nombre assez vaste des fichiers dans blog50. Donc, nous allons juste passer par certains de ces composants. Vous remarquerez à cette route répertoire, il ya un dossier d'application. Dans le dossier de l'application, il ya Un couple dossiers utiles. De la note pour commencer est ce dossier de config. Donc, ce met en place la façon dont votre application web est va, disons, d'authentifier les personnes ou les choses de trésorerie ou se connecter à la base de données. Et ce qui est vraiment utile est que Laravel vous permet de configurer différents environnements de développement. Donc ce que nous avons fait ici est de savoir si nous allons dans le dossier local, il ya un fichier database.php. Et vous remarquerez ici que nous configurer une connexion MySQL permet aux personnes de se connecter au serveur MySQL qui est directement sur l'appareil de CS50. Et nous connecter à une base de données que je ai mis en place appelé Blog50. Donc, nous allons effectivement aller de l'avant et exécuter la version de travail de ce, juste pour avoir une idée de ce que le application qui nous construisons ressemble. Donc, je ai une copie de ce Blog50 terminée. Donc effectivement Laravel a construit dans un serveur que vous pouvez exécuter directement à partir de la ligne de commande. Ce est donc similaire à la PSet avant quand vous avez réellement construire votre propre serveur en C. Donc, ils ont construit une dans la que vous pouvez exécuter vos applications Laravel directement à partir de la ligne de commande. Donc, si nous faisons php artisan servir, ce va lancer un serveur de développement sur le port 8000. Donc, si nous allons à l'hôte local 8000, vous remarquerez que, hey. Nous avons notre blog et en cours d'exécution. Donc Laravel ici génère la première page de notre blog. Application très simple. Mais il ya un couple fonctionnalités vraiment astucieux qu'il fournit sous la hotte. Donc, de l'application de blogue simple. Si nous voulions créer un poste, nous pouvons cliquer sur ce bouton. Nous pouvons dire, «Hé, tout le monde. Ce est vraiment amusant séminaire, "par exemple. Et écrire quelque chose ici. Texte ici. Si nous cliquez sur Envoyer, vous aurez remarquerez que notre nouveau blog après a été ajoutée à la page d'accueil du blog. Si nous revenons ici, vous remarquerez que il ya eu quelques commentaires déjà sur le blog. Donc, si nous défiler vers le bas, vous aurez notez que Jonathan Tan dit qu'il était très intrigué par ce poste. Nous allons donc dans la façon dont l'objet cartographie relationnelle permet que vous fassiez ces relations une façon assez transparente ainsi. Cool. Une question sur les fonctionnalités de ce que nous allons construire? Cool. Commençons donc avec effectivement créer les tables de base de données. Donc rappeler que dans CS50 Finance, vous mettre sur pied une table pour les utilisateurs ainsi que pour la stocks dans votre portefeuille. Donc, comme nous l'avons mentionné plus tôt, ce que nous utilisons dans Laravel est quelque chose de connu que les migrations. Donc, si nous revenons à la code de distribution ici, la première commande est utiles qui vous fournit Laravel est cette commande migrate. Donc, nous pouvons faire artisanal php migrate: faire. Donc, ce qui nous permet de créer une migration. Et puis nous voulons pour créer une migration appelé create_posts_table, qui va d'être là où nous allons être stocker nos messages de blog. Et vous remarquerez ici qu'il fonctionne grâce à un code qui fait génère un fichier avec un horodatage sur elle. Donc, si nous allons et regardons base de données, nous remarquons dans Migrations qu'il a créé un fichier vide pour nous, qui a le code passe-partout avec le nom que nous l'avons précisé, create table des messages. Et il a deux fonctions à l'intérieur. Jusqu'à ce que nous voulons à courir lorsque le migration est appliquée à la base de données. Et vers le bas est ce que nous allons faire quand nous voulons inverser une migration. Donc ici nous allons commencer avec l'écriture de cette migration. Donc, il ya une classe utile dans Laravel appelé schéma. Donc, nous allons exécuter Schema :: create. Et nous allons créer une table appelée messages. Et ici, nous appliquons cette aide d'une fonction. Et à l'intérieur ici, nous allons effectivement préciser le contenu de notre table. Nous allons créer un ID, qui est auto-incrémentation. En outre, nous allons à créer un champ qui représente le titre de notre blog. Nous allons également créer un champ pour stocker le texte de notre blog. Et enfin, nous allons de stocker des horodateurs quand notre poste a été créé et quand il a été mis à jour. Et pour le bas, ce est assez simple. Tout ce que nous voulons faire est de goutte le tableau que nous avons créé. Grande. Des questions? Alors maintenant, si nous allons de l'avant et-- effectivement, hôte local, permettez-moi de supprimer ce que nous avions auparavant. Aller aux bases de données. Je vais supprimer ce que nous avions auparavant. Déposez cela et créer une nouvelle base de données Blog50. Alors maintenant, ce que le magique partie est ici que nous peut appliquer directement ces migrations à la base de données en utilisant la ligne de commande outil. Donc, si nous faisons php artisan migrent, vous remarquerez que, hey. Il a créé la table de migration, que nous allons jeter un oeil à un peu, et elle est appliquée cette première migration. Donc nous regardons Blog50, vous remarquerez qu'il a créé deux tables pour nous. Le premier est ce tableau de migrations. Donc, si nous parcourons cela, vous remarquerez que ce tableau est assez simple. Il vient de dire que, hey. Nous avons appliqué cette migration. Nous allons en arrière et regarder les messages. Vous remarquerez que la structure est exactement ce que nous avions demandé il. Nous avons un code d'auto-incrémentation. Nous avons une chaîne pour stocker le titre, et un champ de texte pour stocker le contenu. Grande. Cool. Une question sur les migrations travail, comment nous pouvons les appliquer? Non? Cool. Alors maintenant, nous allons aller de l'avant et effectivement créer le modèle. Donc, nous voulons créer un modèle de postes stocke une abstraction de la base de données. Ainsi, plutôt que de faire des requêtes MySQL directement, nous allons créer. Nous devons donc créer un dossier dans appelés ici des modèles. Et à l'intérieur ici, nous allons créer un fichier appelé post.php. Dans ce fichier PHP, nous allons créer un poste de classe qui se étend éloquente. Eloquent est le nom de l'ORM moteur qui fournit Laravel. Et ici, nous pourrions attendre à ce que vous avez réellement besoin d'écrire du code. Nous allons écrire quelques des fonctions d'assistance plus tard. Mais hors de la boîte, ce sera déjà Reconnaître ce qui est dans la base de données et nous pouvons accéder à, disons, le texte de notre billet de blog ou le titre, et de créer directement avec des trucs à peu près pas de code quelconque. Donc, ce est l'un des composants magiques. Et le vent une fois cette classe est plus à part entière, nous allons inclure des informations sur ce que ce est lié à, de sorte que les commentaires. Également créer une fonction afin que nous puissions obtenir directement l'URL d'une page de blog. Cool. Les questions à ce sujet? Non. Cool. Alors maintenant, une fois que nous avons notre modèle, nous vouloir créer un contrôleur qui est capable de se interfacer avec ces modèles, et ensuite la base de données. Donc, si nous prenons un coup d'oeil BlogController, vous aurez Notez qu'il n'y a pas beaucoup ici en ce moment. Tout ce qu'il ya est une fonction d'index qui génère la page d'accueil, mais sans rien il pour afficher encore. Donc, la première fonction que nous allons créer est celui qui nous permet pour créer un blog. Donc, nous allons déclarer une nouvelle fonction appelée newPost. Et à l'intérieur tout simplement ici, nous allons pour définir la mise en page de cette page être une version de rendu, si vous vous souvenez du CS50, de ce modèle appelé blog.new, qui nous allons créer dans un peu. Vous remarquerez ici en ligne six qui nous avons spécifié cette variable, mise en page. Et si nous prenons un coup d'oeil au dossier Vues, il ya un dossier Modèles, qui inclut un fichier HTML très basique. Et de la note, vous remarquerez que nous avons ce conteneur ici que les rendements contenu. Donc, à l'intérieur de notre modèle ce que nous allons faire est de créer ce qui va être substitué directement dans cette mise en page. Alors nous avons dit que nous voulons rendre un modèle appelé blog.new. Mais à l'intérieur du Blog, il ya pas encore ce nouveau modèle. Nous allons donc créer un fichier appelé new.blade.php. Cela indique que Laravel ce fichier PHP devrait être rendu avec le moteur de template lame. Donc, ce est un assez fichier simple. Ça va être la forme par laquelle nous ajoutons en fait dans un billet de blog. Alors la magie ici de la l'héritage est que, hey. Nous voulons préciser que le section, la section du contenu ici, ce qui est délimitée parsection etstop. Donc, ce est entre ici va être substitué dans la mise en page principale. Et voici ce que nous voulons faire, ce est très simplement créer un nouveau fichier HTML. Disons simplement ajouter un titre rapide. Ajouter un blog. Et à l'intérieur, nous sommes va créer une forme. Cette forme va avoir une action. Et cela va être quelque chose que nous substituons au plus tard, et nous allons voir comment routage se inscrit dans ici. Mais nous allons juste à définir pour l'instant que cela va à une URL avec la route de createPost. Et puis cela va d'avoir procédé de post. Dans ici, nous allons d'avoir deux champs. div class = "forme-groupe". Nous utilisons la bibliothèque Bootstrap CSS gracieusement fournis par Twitter. Donc, nous allons créer deux d'entre eux. Donc, cette première entrée est va être le titre. Nom Donc entrée = "title". Class = "FormControl". Type = "text". Je vais ajouter un espace réservé = "Title". Et puis la seconde est une va être une zone de texte. Name = "contenu". Class = "FormControl". Et espace réservé = "Ecris ici". Nous y voilà. Enfin, nous allons ajouter un bouton rapide présenter. Type = "submit" class = "btn btn-primaire". Donc, ce sont tous caractéristiques de Bootstrap sorte ce qui peut être posé d'une manière qui est en proie à l'utilisateur, plutôt que HTML nu. Donc, nous avons défini le contrôleur ici. Nous avons défini une vision très simple. Mais ce qui manque, ce est le tissu conjonctif. Donc, à ce stade, Laravel n'a aucune idée de la façon dont nous allons effectivement accéder à ce contrôleur. Donc, ce est défini dans un fichier appelé routes.php. Et maintenant, nous avons une route. Qui est quand nous allons à la chemin de la maison pour ce site, il va rendre le contrôleur d'index. Alors, voici ce que nous devons faire est de mettre en œuvre une nouvelle voie pour nous de créer un poste. Donc, nous utilisons cette méthode obtenir, qui précise que, lorsqu'un utilisateur tente de obtenir ce page-- spécifiquement le poste slash nouvelle page-- ce que nous allons faire est d'utiliser le contrôleur appelé BlogController nouveau poste. Celui que nous venons de créer. Et puis nous allons un alias comme newPost. Nous allons créer un autre fonction dans un peu. Mais ce qui est ici, sous la touche "que" ce est nous pouvons substituer dans les nos modèles de lame. Donc pour l'instant, nous allons fait aussi dire itinéraire. Donc, nous allons aussi pour créer un contrôleur de sorte que nous pouvons créer ces postes. Donc, si un utilisateur des messages à la page après slash nouvelle, ce que nous allons faire est utilise un contrôleur nous allons créer prochainement BlogController appelé au createPost. Et nous allons alias avec ce que createPost. Cool. Des questions? Cool. Donc, nous allons exécuter ce que nous avons à ce jour. Donc, si nous faisons php artisan servir, nous allons voir beaucoup d'erreurs. Donc, il semble que nous avons une erreur de syntaxe sur les routes la ligne 27. Ah. Manquer un point-virgule. Donc, si nous allons à 8000, vous verrez rien ici encore. Donc, ce est la page d'accueil par défaut. Mais si nous allons à poster slash nouvelle, hé. Ce sera la forme que nous venons de créer. À l'heure actuelle, nous ne avons pas mis en œuvre la fonctionnalité quand nous appuyons sur le bouton Soumettre. Donc, si on clique sur la page Soumettre bouton, il va lancer une erreur. Mais nous allons code en ce moment, précisément ce que nous voulez faire quand un utilisateur soumet ce formulaire. Alors, faisons cela. Retour au fichier des contrôleurs. Ce que nous allons faire est mettre en œuvre cette nouvelle fonction qui nous permet de créer un poste. Déclarer nouvelle fonction. Public createPost de fonction. Et cette fonction va être un peu plus sophistiqué que ce que nous avions avant. Mais vous verrez ici que nous ne sommes pas va effectivement écrire ne importe quel SQL. L'ORM, le Eloquent ORM, va permettre nous faisons cela dans certains égards un de façon plus élégante. Nous allons donc créer un nouveau poste. Et ici nous sommes instancier un nouvel objet à partir du modèle que nous venons créé, le modèle de poste. Et ce que nous allons faire est de définir la attribut title de cette utilisant quelque chose que nous obtenons à partir du serveur. Donc, ce est similaire à ce nous avions avant dans CS50 Finances où nous ferions, en utilisant le Super Global Post recherche de titre. Donc Laravel fournit quelques assainissement et ainsi de suite en utilisant cette fonction d'assistance. Nous serions donc préférer utiliser ce lieu de cette forme brute très basique de PHP. Et puis ce que nous allons faire est réglé le contenu de celui-ci à l'entrée obtenir du contenu. Nous allons en fait envelopper cela dans une fonction utile que PHP fournit appelé nl2br, qui tourne nouvelles lignes, nls, dans ls, les pauses, afin que nous puissions réellement avoir différents paragraphes en son sein. Et enfin ce que nous allons à faire est de sauvegarder ce poste. Donc, nous appelons la fonction économiser sur ce modèle. Nous allons sauver le poste. Et enfin ce que nous allons faire est rediriger l'utilisateur spécifiquement à la voie que nous allons créer peu de temps, alias par viewPost. Et nous allons passer dans les arguments id, étant l'identifiant de ce nouveau poste. Grande. Alors maintenant, si nous allons effectivement et courons cela. Nous allons ajouter un nouveau poste. Disons que ce est un séminaire 50. Et dire, bien sûr. Asdl. Peu Importe. Une sorte de contenu. Et le soumettre. Et nous remarquons que, hey. les routes non définis. Mais si nous prenons un oeil à phpMyAdmin et chercher si oui ou non notre fonction fait quoi que ce soit. Regardez les messages Blog50. Nous remarquons que, hey. En fait, nous ne avions tout simplement créer ce blog poster avec les horodateurs comme spécifié. Alors maintenant, revenons et effectivement créer cette autre fonction dans notre contrôleur, en particulier le dispositif de commande viewPost. ViewPost fonction Donc public. Alors, voici ce que nous ferons, à la place comportant des vides entre parenthèses, nous voulons passer l'ID de le poste que nous créons. Et d'ici ce que nous allons faire est en fait interroger la base de données pour cela. Donc, si nous ne affichons, il ya une fonction appelée Trouver qui nous permet de l'interroger par ID. Plus précisément, en fait, nous allons utiliser une version alternative de cette appelé Trouver ou Fail, qui nous permet d'arrêter de sortir de cette fonction, lancer une exception si l'ID nous passons ne existe pas. Et puis nous allons faire quelque chose semblable à ce que nous avons fait plus tôt où nous installons le contenu de cette page pour être la version rendue de cette nouvelle vue que nous allons créer, blog.view. Et nous allons passer dans it-- aime juste dans le CS50 rendre function-- un dictionnaire de variables. Les clés de ce tableau associatif deviennent des variables dans le modèle. Donc, nous allons faire l'enregistrement Le post. Donc, passez indirectement le poste qui nous avons demandé des explications à partir de la base de données. . Maintenant, ce que nous allons faire est de créer ce point de vue de sorte que nous pouvons réellement voir les messages de blog que nous avons construit. Nous allons donc créer un fichier appelé view.blade.php. Donc, à l'intérieur de ce modèle, ce que nous allons faire est mis en place une page simple qui nous permet d'afficher le contenu. Donc, nous faisons partie, ce est avant que le contenu. Arrêtez. Et ce que nous allons à faire ici, ce est au sein de écrire du HTML pour afficher cette page. Donc, nous allons de l'envelopper avec une fantaisie nouvel élément HTML5 appelé article. Et ici, nous allons d'avoir un en-tête où nous allons avoir une simple h1, qui comprend le titre du message. Donc ici, si nous regardons cette notation accolade double, cela fera essentiellement PHP echo après titre. Donc, ce est un raccourci utile Laravel que nous offre. Nous allons donc utiliser cette notation à la place. Et ici, nous allons aussi imprimer le contenu de celui-ci. Et ici, nous allons faire contenu poste. Et au bas de ce que nous sommes aller à faire est de créer un pied de page. Et dans le pied de page, nous allons premier affichage lorsque cela a été publié. Donc, cela a été affiché à, créé à. Et Laravel utilise une très belle bibliothèque de jour appelé carbone. Ainsi, nous pouvons réellement faire quelque chose appelé difforHumans, que vous avez vu plus tôt. Lorsque nous avons affiché. il va dire, comme, il ya cinq secondes. Donc, ce est une très belle fonctionnalité de Laravel. Et enfin, nous allons de fermer ce pied de page. Alors maintenant, si nous revenons à Accueil nous allons de ne rien voir encore là parce nous ne avons pas codé jusqu'à la page d'accueil. Mais si nous allons à poster une barre oblique, nous allons voir une exception. Est-ce que quelqu'un sait pourquoi nous voyons une exception? Que nous manque? Toutes les idées? Alors qu'est-ce que nous faisons tôt pour nous effectivement de définir comment nous arrivons à particulier les contrôleurs? ENCEINTE 1: La route? ERIC OUYANG: Ouais. Donc, nous avons encore à définir la route. Donc, nous revenons ici pour routes.php. Vous remarquerez que nous ne ont pas réellement défini comment nous allons obtenir à ce contrôleur. Alors maintenant, nous allons définir cette voie. Ce est assez simple, semblable à ce que nous avons fait plus tôt. Mais ce que nous allons noter ici est que nous allons avoir un espace réservé. Donc, si nous faisons route.get slash après ID. Donc ID est maintenant ce qui va se être passé dans le dispositif de commande. Cela va utiliser le contrôleur que nous venons créé, BlogController au viewPost. Et nous allons alias cela comme viewPost. Grande. Alors maintenant, nous allons créer cette route. Alors maintenant, si nous allons ici et rafraîchir cette page, nous ne avons, en fait, notre nouveau blog. Donc, ce est ce que nous avons créé plus tôt. Très simple page, mais affiche le billet de blog que nous venons de créer. Cool. Et si nous fait passer par toute la processus de création d'un nouveau blog, nous remarquons que tout redirige correctement. Si je dis: "Salut. Je suis Jonathan Tan. " Dis: «Ceci est mon blog." Et de le soumettre, cela va créer ce nouveau poste de blog avec ID 2, qui incréments de ce que nous avions précédemment et affiche correctement. Impressionnant. Des questions? Oui? SPEAKER 2: ne gère Laravel désinfection et tout pour vous? ERIC OUYANG: Oui. Alors, quand nous avons vu plus tôt, quand nous avons fait entrée Colon obtenir, que toute sanitates SQL injections et autres joyeusetés que nous pourrions accomplir si nous sommes à un utilisateur malveillant du site. Donc Laravel gère beaucoup des que derrière les scènes. Bonne question. Donc, nous allons jeter un oeil à la page d'accueil. Donc, si nous allons revenir à la première contrôleur pour la page d'accueil, vous remarquerez qu'il ne fait pas beaucoup ici. Vous remarquerez que nous ne sommes pas passant dans ce contrôleur rien de particulièrement utile. Ce est juste ce fichier d'index. Donc, nous allons passer dans ce quelque chose d'utile. Et précisément, nous sommes va passer dans les postes. Et Laravel nous permet à faire après tout, ce qui nous permettra d'obtenir tous les postes. Maintenant, si nous revenons à index.php, vous verrez, hey. Rien ici encore. Mais ce que nous voulons faire ici est en fait itérer, faire une boucle foreach sur les postes qui nous permet d'imprimer les messages. Alors que les messages foreach après, ce que nous voulons faire est d'imprimer le contenu du blog. Mais une chose que vous remarquerez est que nous avons écrit plus de ce code déjà, dans view.blade.php. Donc, ce que nous allons faire, ce est fait utiliser une fonctionnalité utile de Blade et prendre en compte ce code commun. Donc, nous allons ici. Nous allons prendre ce contenu ici, et ce que nous allons faire est de créer un nouveau dossier. Disons simplement appellent partiels. Et ici, nous allons pour créer un post.blade.php. Donc ici, nous pondérée sur la manière que nous voulons afficher ces messages. Et voici ce que nous ferons au lieu de ayant fait que le HTML directement, nous allons utiliser cette directive appelé comprennent blog.partials.post. Et ce que nous allons faire ici est passer dans le poste de la page. Alors maintenant, si nous revenons ici, nous allons notez que la fonctionnalité est encore le même. Mais maintenant nous avons cette pris en compte sur le code, ce code HTML. Donc, nous pouvons l'utiliser dans l'indice. Donc ici, ce est très simple. Tout ce que nous faisons est inclut blog.partials.post et tableau. Et quelque part au avant, nous faisons Le post. Alors maintenant, si nous revenons à la page d'accueil, nous allons voir que, hey. Nous avons une liste de tous les les messages blog que nous avions avant. Nous pourrions vouloir ajouter un peu de "si" conditions et conditions "else" de sorte que si nous ne avons pas quoi que ce soit sur le blog, nous voulons afficher quelque chose d'utile. Comme, hey. Il n'y a pas encore de contenu sur le blog. Et si vous les gars regardez vraiment le code de distribution sur GitHub, vous verrez un exemple de la façon dont nous le faisons. Cool. Des questions? Oui. SPEAKER 2: Je pense tout simplement une question fondamentale. Retour à la route. ERIC OUYANG: Ouais. Si nous prenons un coup d'oeil routes. SPEAKER 2: D'où vient le uses.blogcontroller à créer poste, qu'est-ce qui nous dirigent à? ERIC OUYANG: Ouais. Ouais. SPEAKER 2: Ou ce qui est that-- ERIC OUYANG: Alors, jetez un oeil, dire par exemple, cette route ici. La première partie est la réelle URL que l'utilisateur va aller. Et ce tableau ici, tableau associatif, définit comment nous voulons avoir le Application de la Loi en réponse à elle. Alors utilise est le contrôleur, la fonction qui nous vouloir appeler quand un utilisateur accède à cette URL. Donc viewPost ici était un fonction qui nous avons défini l'intérieur des BlogController-- SPEAKER 2: Je vois. ERIC OUYANG: -SO que nous peut effectivement rendre un avis, effectuer des calculs, interagir avec la base de données SQL. SPEAKER 2: OK. ERIC OUYANG: Et puis l'autre partie, "comme" est un alias que nous utilisons. Donc, si nous remarquons quand nous avons créé la forme, vous remarquerez que URL :: routecreatePost. Donc, il remplace dans le réel URL afin que nous ne sommes pas dur codant ces pour que nous puissions changer une fois, disons si nous voulions renommer. Au lieu de poste slash nouvelle, nous voulons faire comme, p slash nouvelle juste pour nettoyer nos URL un peu. Nous aimerions changer en un seul endroit plutôt à travers tous les différents fichiers. Cool. C'est bon. Alors maintenant, nous avons une très plateforme de blog de base. Nous voulons probablement ajouter un bouton pour que nous pouvons créer de nouveaux postes. Donc, si nous prenons un coup d'oeil à la Mise en page, nous avons une section intitulée tête droite que nous venons défini au sommet. Donc, nous pouvons ajouter des boutons à le sommet de la tête. Donc, si nous allons à index.blade.php, en fait faire est de définir ce qui se passe à l'intérieur d'ici. Donc, cette section tête droite, ce que nous allons faire est d'ajouter dans un bouton pour aller à la URL définie par voie nouveau poste. Juste pour nettoyer et faire joli et tout Bootstrap, nous allons faire ce bouton un défaut. Disons simplement le rendre grand pour le plaisir. Et à l'intérieur, nous pourrions mettre un peu de texte. Mais ce Bootstrap fournit est glyphicons. Nous pouvons donc ajouter que belle crayon que nous avons vu plus tôt. Glyphicon. Glyphicon-crayon. Donc, cela va nous permettre de mettre une icône en place du texte. Maintenant, si nous ne nous arrêtons, ce définira cette section. Et, hé. Nous avons un joli bouton qui nous lie directement à la ajouter une page de blog. Donc, nous avons un blog assez simple. Nous pouvons ajouter des choses à elle. Mais ce que nous attendons généralement à partir de blogs est commentant. Donc, ce est vraiment important pour nous d'avoir, dire, si quelqu'un d'autre visite un site web et aime vraiment le poste qui ils peuvent participer à des discussions avec d'autres personnes qui visitent la page. Nous allons donc aller et de créer un nouvelle table de base de données et un nouveau modèle afin que nous puissions associer commentaires avec des poteaux. Donc la première étape, comme avant, ce est que nous devons exécuter une migration. Donc, comme avant, nous faisons php artisan migrate: faire. Et nous allons créer une appelé create_comments_table. Cela va créer un fichier qui a notre nouvelle migration. Et nous allons, comme avant, définir une nouvelle table. Donc Schema :: créer un table appelée commentaires. Cette fonction ici. Et à l'intérieur de cette table ce nous allons faire, ce est d'abord, comme avant, attribuer un ID. Incrémente ID. Nous allons permettre aux utilisateurs d'associer leur nom avec un commentaire particulier. Nous allons avoir un certain contenu qui va de pair avec cela, le contenu du texte. Et voici ce que nous allons faire, ce est quelque chose de différent. Nous allons créer un nombre entier cela se appelle post_id qui va signifier ce poste un commentaire particulier va avec. En outre, nous allons en fait définir une contrainte de clé étrangère à ce sujet. Donc, MySQL va respecter cela. Nous ne essayons pas de attribuer commentaire Numéro 5 à poster 5000 si nous ne avons pas eu 5000 postes sur elle. Donc ce que nous faisons ici, nous faisons post_id étrangère va être associé à le champ ID des messages de table. Et nous allons faire quelque chose reste utile, est onDelete. Donc, si nous supprimons certains poster de la base de données, que nous voulons la cascade supprime des commentaires ainsi. Parce que ce est pas très utile pour nous d'avoir des commentaires sur les messages qui ne existent pas. Et enfin, comme avant, nous sommes va mettre timbres de temps à ce sujet. Et comme avant, nous allons ont la migration inverse être suppression de la table des commentaires. Alors maintenant, si nous remontons ici, nous allons pour exécuter cette migration, artisan migrent. Et maintenant il est appliqué cette la migration que nous venons de créer. Donc, si nous un oeil à phpMyAdmin, nous faisons, en fait, maintenant avoir une table de commentaires qui a le la structure que nous venons précisé. Donc, comme avant, nous sommes va créer un nouveau modèle à l'abstrait la table SQL que nous venons de créer. Donc, nous allons ajouter un nouveau fichier. Nous allons appeler comment.php. Et ce qui se passe réellement à être assez simple avec un léger changement de ce que nous avions avant. Donc classe Commentaire étend Eloquent. Et ce que nous allons à faire ici est de définir une fonction qui est la relation avec d'autres modèles. Nous allons donc avoir une fonction de poste ici que renvoie cette relation. Nous sommes donc en précisant que cela appartient à poster, disant qu'il ya un poste que ce commentaire appartient. Cela a en fait pour être P majuscule pour le modèle. Et maintenant, juste de l'autre bascule côté, nous devons dire que, hey. Messages ont des commentaires. Donc, ce que nous allons faire est définir des commentaires de la fonction publique. Et ici est retourné Cela a de nombreux Commentaire. Alors maintenant, magie quand nous avons un poste, nous pouvons obtenir les commentaires d'attributs et il va le remplir avec le des informations de la base de données. Donc, nous allons effectivement passer et ajouter une nouvelle fonctionnalité à notre fichier de vue afin que nous puissions à la fois affichage et créer des commentaires. Donc, nous allons définir une nouvelle section. Disons simplement le séparent avec une règle horizontale. Section id = "commentaires". Ce que nous allons faire ici, ce est comme avant, parcourir tous les commentaires. Donc en fait la façon dont nous faisons ce est, comme je le disais, assez magique. Nous faisons poster des commentaires. Et alors nous pouvons le faire pour chaque boucle sur chacun des commentaires. Et ce que nous allons faire est div class commentaire, et nous allons effectivement imprimer ce commentaire. Donc afficher que hey, commenter name-- la personne qui a affiché cette comment-- dit dot dot dot. Nous allons mettre cela en un bloc devis, il suffit pour le faire paraître belle. Et puis commenter bloc de contenu devis. Et foreach. Alors maintenant, cela va boucle à travers tous les commentaires qui est associé avec chacun des poteaux et afficher chacune de ces commentaires. Je vais ajouter une autre section bas ici, ce qui nous permet d'ajouter un commentaire. Classe afin h3. Mettez un titre ici. Ajouter un commentaire. Et nous allons définir une nouvelle forme. Donc, comme avant, nous sommes va faire form action. Et ici, la nouvelle action est que nous sommes va définir un nouveau contrôleur qui nous permet de répondre à poster les demandes de création de commentaires. Donc URL :: route createComment. Je vais passer dans le paramètre ici. L'ID de la poste qui nous créons commentaire sur. Puis le procédé de la présente forme va être après. Maintenant, nous allons ajouter dans un deux champs, forme un groupe. Cela va être une entrée avec le nommer "nom" et class = "forme-contrôle», type = "text", et avec le espace réservé = "Votre nom". Nous allons aussi à définir un autre champ de formulaire, qui va être un texte secteur que nous avions avant. Tout comme avant, appeler contenu. Class = "forme de contrôle." Espace réservé = "Ecris ici." Et juste pour que nous peut effectivement présenter, soumettre type et class = "btn btn-primaire." Fermez le formulaire. Fermer cette action. Alors maintenant, si nous rafraîchir la page où nous avons, par exemple, un poste particulier. Nous devons redémarrer le serveur. PHP artisan servir. Redémarrez cela. Nous devons définir la voie. Mais pour l'instant, nous allons simplement prendre ce de telle sorte que nous pouvons vous montrer ce que la page ressemble, puis nous créons effectivement cette voie. Donc, hey. Nous avons cette nouvelle forme ici afin que nous puissions créer des commentaires. Donc, nous allons effectivement définir une fonction dans le contrôleur afin que nous puissions ajouter des commentaires. Revenons. Et au sein de blogcontroller.php, ce que nous allons faire est de créer une nouvelle fonction appelé créer commentaire. Public createComment de fonction. Cela va avoir un seul paramètre, l'ID des messages que nous commentant. Et comme avant, nous sommes va d'abord obtenir le poste. Donc, poster, findOrfail id. Ensuite, nous allons pour créer un nouveau commentaire. Donc commenter = new Commentaire. Commentaire name = entrée :: get nom. contenu de commentaire = la même nouvelle ligne dans les pauses de l'entrée :: obtenir du contenu. Et enfin, nous allons avoir à associer ce commentaire à la poste. Nous allons donc utiliser cette fonction, commentaires, qui nous permet d'économiser cette relation. Alors maintenant, ce commentaire aura automatiquement l'ID de poste. Nous pourrions également le mettre manuellement, mais il se agit plus facile à lire autant que la fonction va. Et après que nous effectuons cela, ce que nous voulons faire est rediriger l'utilisateur vers le route indiquée par viewPost avec le tableau avec la paramètre de l'ID de poste. Et maintenant, de sorte que cette réalité fonctions, nous avons besoin de définir cette voie. Route :: poste. Et maintenant, nous allons appeler cette après slash slash ID commentaire. Tableau utilise la nouvelle fonction que nous venons de créer. BlogController. CreateComment que createComment. Grande. Alors maintenant, je espère que si nous rafraîchir cette page et ajouter un commentaire, disons, David Malan. "Espérons que cela fonctionne." Soumettre. Nous ne, en fait, avons un commenter sur ce blog. Cool. Alors maintenant, nous avons une assez fonctionnelle blog. Nous allons juste ajouter quelques réglages afin que nous avons un peu plus utiles informations sur ces postes. Donc, si nous revenons à la première page, nous ne avons pas de sens du nombre de commentaires sont sur chacun de ces postes. Donc, ce que nous allons en fait à faire est, à l'intérieur de notre modèle, définir une fonction d'assistance qui permet nous précisons le nombre de commentaires qui vont avec un poste particulier. Nous allons donc créer une fonction d'assistance. La fonction publique. GetNumCommentsStr. Donc, une chaîne qui spécifie le nombre des commentaires qui vont avec. Et ce que nous allons faire, ce est dire que ce num = commentaires comptent. Donc, nous allons compter le nombre de commentaires. Et si ce nombre est égal à 1, nous sommes aller juste pour revenir 1 commentaire. Et puis sinon, nous voulons retourner la concaténation de num et commentaires, ainsi nous obtenons la pluralisation correcte. Juste faire une apostrophe. Un commentaire. Et maintenant, nous pouvons utiliser cette fonction directement à l'intérieur de notre point de vue. Donc, si nous revenons à la les messages partiels que nous avons créé, maintenant, nous voulons effectivement afficher le nombre de commentaires. Donc, ce que nous pouvons faire, ce est poste, utiliser cette fonction que nous venons de créer à afficher le nombre de commentaires. Donc, si nous renouvelons aujourd'hui, il fait, en fait, affichage les commentaires de nombre qui vont de pair avec elle. Si nous voulions être compliqué si vous effectivement regarder le code de distribution, nous pouvons relier ce aux commentaires. Si vous vous souvenez, nous avons défini dans le voir que cela n'a section commentaires d'identité. Donc, si nous voulions vraiment relier directement à la section des commentaires, ce nous faisons ici est un href URL de la route viewPost. Passez à l'ID de tableau de la post ID. Et puis, nous voulons aller à spécifiquement la section des commentaires. Ici, nous allons fermer la balise A. Alors maintenant, si nous rafraîchir cette Cette page, on clique sur ce point. Nous allons passer directement aux la section des commentaires. Si nous avions un poste plus, vous pouvez réellement voir ce rebond vers le bas. Mais vous remarquerez que ce est pas au haut de la page. Cool. Grande. Donc, ce est un assez simple exemple de quelque chose de simple que vous pouvez faire avec Laravel. Mais vous pouvez le constater ici que nous avons fait beaucoup de choses avec assez peu de quantité de code. Laravel nous permet de faire la requêtes SQL dans les coulisses. Il fait l'assainissement pour nous dans les coulisses. Nous permet de faire ces relations très facilement sans avoir besoin de nous à faire toute SQL rejoindre déclarations combiner commentaires avec ce que les messages. Nous permet de faire ce héritage de modèles de sorte que nous pouvons définir ces nidification fichiers de sorte que nous ne sont pas nous répéter, tout comme lorsque nous avons eu ce que affichage des messages de blog que nous ne avons pas à copier et coller le code. Et à partir de là, vous pouvez construire applications de plus en plus compliquées. Vous pouvez imaginer si nous voulu mettre en œuvre log-in, nous pourrions dire, faire intervenir une tierce partie cadre qui nous permet de faire cela. Il ya un tas d'entre eux qui sont vraiment, vraiment grande qui peut faire comme, récupération de mot de passe. Et il va vous envoyer un réinitialiser le mot de passe par courriel. Nous pouvons mettre en œuvre l'autorisation de sorte que je peux créer un poste, mais quelqu'un d'autre ne peut le modifier. Nous pouvons mettre en œuvre fonctionnalité pour supprimer les messages. Mais vous pouvez voir ici que nous avons assez tous les composants beaucoup rudimentaires à construire une vraiment, vraiment, applications web dynamiques et passionnantes. Donc, avec cela, je pense que nous sommes bons. Avez-vous les gars avez des questions? Oui? SPEAKER 3: Comment avez-vous obtenir du contenu statique? ERIC OUYANG: contenu statique. Donc, vous avez vu avant que lorsque nous avions ce droit ici, ce contenu de mise en page, Voir marque, nous avons eu cette sans ce tableau par la suite. Blog.index, nous avons eu cette comme un simple fichier statique. Donc, si nous ne transmettons pas quoi que ce soit long à elle, il va tout simplement rendre le HTML directement. Mais si nous passons dans ce associative tableau de messages, qui est dynamique tiré de la base de données, nous peut rendre la page dynamique. Cool. D'autres questions? SPEAKER 3: Comment compareriez-vous Laravel à peut-être quelques autres options? ERIC OUYANG: Bien sûr. Ouais. Donc Laravel est-- ce est un grand question-- une des nombreuses options pour les cadres web. Donc, Ruby on Rails est un qui est populaire. Je crois Twitter utilisé pour être mis en œuvre avec Ruby on Rails. Je pense qu'ils ont depuis commutés. Il ya un autre appelé FuelPHP. Donc, Ruby on Rails utilise le langage Ruby et met en œuvre un grand nombre des choses MVC que nous voyons ici. FuelPHP est un autre framework PHP. Django est un de mes favoris. Ce est un framework web pour Python. Ainsi, vous pouvez écrire votre application web en Python. Donc, il ya une tonne de ces options. Laravel, je pense, par et grande est mon droit favori maintenant juste parce que PHP des composants dont nous avons parlé plus tôt. Ce est Compositeur activé. Il comprend un vraiment, vraiment système de ORM expressive. Dispose également d'un gabarit vraiment génial langue que quelques-unes des autres juste ne fournit pas. Et les migrations. Les migrations sont aussi exceptionnel. Cool? Impressionnant. Eh bien, merci beaucoup pour regarder ce séminaire, et bonne chance dans vos projets finaux.