>> [Séminaire] [Kohana: A Framework PHP Léger]
[Brandon Liu] [Harvard University]
[C'est CS50.] [CS50.TV]
Salut tout le monde >>. Mon nom est Brandon.
Je suis un junior ici au collège de faire de l'informatique, et aujourd'hui nous allons parler de
Kohana, qui est un cadre de développement web PHP.
Aujourd'hui va être un séminaire de codage en direct,
donc je suis fondamentalement va passer 5-10 minutes expliquant ce que Kohana est,
et puis je suis littéralement va construire un blog super simple
pour vous ici littéralement à partir de zéro.
Nous allons télécharger le code à partir du site Kohana,
et nous allons commencer à construire un blog, et j'espère que ça va être très instructif,
parce que vous verrez peut-être peut-être je vais faire quelques erreurs,
et vous me verrez récupérer d'eux,
ou vous verrez mon processus de pensée que je construis à travers ce blog,
et en attendant, vous pourrez également vous familiariser avec le cadre lui-même.
J'espère que ça va être un exercice très instructif.
>> Tout d'abord, qu'est-ce qu'un cadre?
Si vous avez pris CS50 jusqu'ici, vous n'avez pas vraiment travaillé avec tout
cadres pour l'instant, et la chose est ce.
Vous avez probablement fait une développement web pset déjà,
et disons que vous continuez à construire des sites Web et de garder les sites de construction.
Vous allez commencer à remarquer un certain nombre de choses.
La première chose que vous remarquerez est que vous êtes probablement faire les mêmes choses
encore et encore tout le temps,
des choses comme le nettoyage de données d'entrée d'utilisateur,
des choses comme l'organisation de vos fichiers d'une certaine manière.
L'autre chose que vous remarquerez aussi probablement que votre code
peut commencer à devenir très, très salissant,
et vous pouvez le laisser en désordre et tout simplement un moment très difficile maintenir,
ou vous pouvez commencer à structurer votre code et de le rendre modulaire
d'une certaine manière à la rendre plus maintenable.
>> C'est là que les frameworks web essentiellement venus po
Ces personnes qui avaient construit un grand nombre de sites, disaient-ils,
«Nous n'avons pas besoin de refaire ce chaque fois que nous construisons un site Web."
«Pourquoi ne faisons-nous pas juste un paquet qui fait toutes ces choses pour vous
chaque fois que vous voulez construire un site web? "
Et de sorte que lorsque vous créez un nouveau site Web,
vous vous concentrez seulement sur ce qu'est exactement ce site particulier est d'environ.
Vous n'avez pas besoin de répéter toutes les différentes configurations
et la séparation des codes et réécriture du code
que vous avez souvent à faire lorsque vous créer des sites web.
L'idée est qu'un cadre vous permet d'écrire un code de niveau supérieur
sans avoir à se soucier des détails de niveau inférieur.
Un détail de niveau inférieur pourrait être quelque chose comme
traitement des données d'entrée de nettoyage par l'utilisateur.
C'est quelque chose que vous ne devriez pas vraiment besoin de s'inquiéter.
Vous devez vous concentrer sur ce que votre allocation web est en fait sur.
Il élimine beaucoup de code réutilisable.
C'est une architecture pour votre projet.
>> Le plus populaire serait Modèle-Vue-Contrôleur,
dont je vais parler dans un instant.
Et un grand nombre de fois ces cadres incarnent un ensemble de procédures,
règles, et les meilleures pratiques pour vous d'utiliser
de sorte que lorsque vous adoptez le framework web
vous devez écrire votre code d'une certaine manière,
et il est généralement convenu d'un ensemble de principes
par la communauté qui est généralement accepté d'être
une bonne façon d'écrire du code.
Il rend votre code plus maintenable, plus utilisable,
ainsi de suite et ainsi de suite.
Et enfin, la chose que je tiens à souligner à propos des cadres
contre bibliothèques est cette idée à propos de l'inversion de contrôle, et la chose est la suivante.
La différence entre une bibliothèque et un cadre qui est doté d'une bibliothèque
vous êtes toujours en train d'écrire le programme principal,
et vous êtes sorte d'invoquer la bibliothèque
et demandant à la bibliothèque pour faire quelque chose pour vous.
La différence entre une bibliothèque et un cadre
est que le cadre commence par la commande,
et il appelle votre code,
de sorte que vous pouvez penser que c'est - c'est pourquoi on appelle ça un cadre -
le cadre fournit ce cadre et la structure de votre code,
et vous remplissez les trous,
et cela deviendra plus apparent dans une seconde
quand vous voyez-moi de commencer à écrire du code dans le contexte du cadre.
Vous verrez que je suis combler les lacunes,
et le cadre est une sorte de contrôle de toutes les pièces en mouvement,
et je dois mettre les morceaux dans les bons endroits.
>> Aujourd'hui, nous allons parler de Kohana,
qui est l'un des nombreux cadres de PHP.
Il ya frameworks web, et il y en a dans presque toutes les langues unique,
et je reprends Kohana parce Kohana est sans doute
et généralement reconnu comme le framework PHP plus facile à ramasser.
C'est le plus léger.
Il ya d'autres là-bas qui viennent avec beaucoup, beaucoup plus de fonctionnalités,
mais ils ont tendance à être plus difficile à ramasser.
Et enfin, Kohana utilise l'architecture MVC.
C'est assez léger que nous pouvons littéralement construire un projet
ici juste en face de vos yeux, et vous pouvez très bien
suivre assez facilement.
>> Quelle est l'architecture MVC?
Il est synonyme de Modèle-Vue-Contrôleur,
et peut-être si vous pensez le code que vous avez écrit à ce jour
pour certains de vos psets de développement web
vous pourriez être en mesure de voir, mais lorsque vous commencez à écrire
une application web plus complexe,
la division entre ces trois segments devient de plus en plus évidente.
J'ai présenté le MVC ici sorte de comme une pile,
et souvent, vous entendez les gens parler des piles dans le développement web,
et cela est d'illustrer l'idée que
chaque couche, chaque composant essaie vraiment de communiquer seulement
entre deux autres composants.
Quelqu'un accède à votre site comme un client ou un navigateur.
Ils interagissent avec votre programme à travers le code de la vue.
Le code de la vue interagit avec le contrôleur.
Le dispositif de commande coopère avec le modèle,
et le modèle interagit avec la base de données SQL.
Et il n'y a pas de saut entre les deux si vous écrivez votre code correctement.
>> Qu'est-ce que ces choses font?
Le modèle est essentiellement le morceau de code qui traite vos données.
Tout ce qui traite de votre base de données, avec les objets que vous stockez,
ou la récupération de ces objets dans la base de données,
C'est tout traitées par le modèle.
Peut-être que vous avez des objets dans votre base de données.
Nous allons créer un modèle ayant à voir avec les messages,
si un poste peut avoir des attributs à elle.
Vous pouvez avoir des fonctions autour de stocker ces messages ou de récupérer les messages
ou filtrer les messages et ainsi de suite et ainsi de suite,
et c'est tout le code qui est géré par le modèle.
Le contrôleur est en quelque sorte de la logique de l'application,
et beaucoup de choses différentes peut aller dans la logique de l'application.
Si vous parlez d'une API différente,
c'est peut-être où vous faites affaire avec la logique de l'application.
Si vous essayez d'avoir à apporter des données à partir de plusieurs modèles différents
et avoir à les combiner en quelque sorte, qui peuvent souvent être traitées par le contrôleur.
Par exemple, sur Facebook, si vous ami de quelqu'un,
alors peut-être l'acte d'établir cette relation
peut être effectuée par le contrôleur.
>> Et enfin, la vue est le code qui est de générer ce que vous voyez réellement.
Un grand nombre de fois, je pense que dans les psets de CS50
ils n'ont pas vraiment vous encourager les gars de séparer ces 3 choses.
Vous aurez probablement cette grande, longue file où au sommet
vous faites une certaine requête SQL et peut-être faire un peu de traitement
sur les données extraites de la base de données,
et puis vous avez tous votre code HTML au bas.
Et vous pouvez constater que lorsque vous créez de plus en plus de pages
que vous allez avoir une répétition de code, et aussi,
la chose est votre fichier devient vraiment grand et long
et devient difficile à gérer.
La raison pour laquelle MVC est si bien considérée
est pour un certain nombre de raisons.
La première chose est quelque chose qui s'appelle la séparation des préoccupations
qui est l'idée que lorsque vous avez -
idéalement 1 morceau de code devrait faire une chose et le faire très bien,
et vous ne devriez pas combiner des morceaux de code qui font des choses disparates.
Par exemple, afficher le code et le code de modèle,
ils n'ont pas vraiment à être liés.
Ils n'ont pas à être dans les mêmes fichiers, donc quand vous pouvez, séparez-les
il est donc facile à entretenir.
>> L'autre chose est la réutilisation du code.
Vous pouvez vous retrouver à écrire la même requête SQL ou faire
requêtes similaires qui pourraient être prélevée dans une fonction,
et c'est l'idée derrière les modèles et les contrôleurs,
l'avoir dans une fonction distincte que vous pouvez réutiliser dans différents endroits de votre projet.
Et enfin, que c'est lié à la dessiccation votre code,
ou pas de vous répéter, ne vous répétez pas.
Ceci est très compréhensible dans le développement.
Chaque fois que vous pouvez, vous ne voulez pas vous répéter, parce que si vous vous répétez,
il est beaucoup plus coûteux à entretenir.
Si vous voulez changer une chose, vous devez le changer partout,
et qui conduit à des bogues, et c'est horrible.
>> Tous droite.
Des questions jusqu'ici sur Kohana du tout?
Grand.
Maintenant, nous allons plonger dans la session de codage en direct,
et j'espère que tout va bien.
Je vais construire essentiellement ce site
sur un de mes serveurs distants, et de cette façon vous les gars peuvent également
voir le site et accéder au site Web,
et aussi l'environnement est mieux configuré que ma machine distante,
parce qu'il est sous Linux à la place de OS X.
Nous littéralement va commencer.
KohanaFramework.org.
Je vais télécharger le code du site.
Je vais copier l'adresse du lien,
aller à mon serveur, télécharger,
et je vais extraire.
>> [Étudiants] Quel est le plus grand, vous pouvez rendre le texte?
[Brandon Liu] Est-ce mieux?
[Étudiants] Est-ce faisable? >> [Brandon Liu] Oui, c'est très bien.
J'ai téléchargé un fichier ZIP décompressé et que dans un répertoire nommé Kohana,
et nous allons renommer cette CS50-Kohana,
et allons po
Impressionnant.
Ici vous voyez un tas de fichiers différents.
La plupart d'entre vous peut ignorer - We ne va parcourir chaque fichier unique qui est ici
en raison de contraintes de temps,
mais généralement lorsque vous installez Kohana, la première chose que vous faites
est que vous allez dans le répertoire,
et vous faites essentiellement des tests d'environnement et autres joyeusetés
pour s'assurer que l'environnement est correctement configuré pour exécuter Kohana
et assurez-vous que tout va bien.
Vous pouvez voir la plupart des choses passées, mais généralement, vous exécutez toujours dans ce 1 problème
où elle se plaint que certains répertoire n'est pas accessible en écriture,
et c'est à cause de certaines autorisations.
Je ne sais pas combien vous les gars ont appris sur les autorisations de fichiers dans CS50,
mais si vous faites le développement web, vous allez courir dans cette question beaucoup.
Je vais faire en écriture
et je pense que je dois aussi - là nous allons.
>> Bon, alors maintenant vous pouvez voir tout ce passé,
et maintenant il vous dira de renommer le fichier install.php.
Je vais passer le fichier install.php à installed.php,
et maintenant, si je vous rafraîchir,
il me donne une erreur, et c'est là que le débogage entre en jeu.
C'est là que vous pouvez voir ce qui va se passer réellement.
La chose est, par défaut, Kohana suppose que
votre projet est à la racine de votre domaine,
il est donc attendu que vous soyez à demo.brandonkliu.com.
Nous devons lui dire que c'est en fait dans un sous-dossier.
C'est dans un sous-dossier appelé CS50 Kohana.
La chose est, il est mal interprété CS50-Kohana
comme quelque chose d'autre, que je vais vous expliquer en une seconde.
Mais je dois vous dire que c'est quelque chose qui est à prévoir.
Ce que nous allons faire, c'est que nous allons aller dans ce dossier appelé bootstrap.php,
qui est le dossier de configuration où beaucoup de choses différentes sont mis en place.
J'ouvre cela.
Alors peut-être l'une des premières choses que je vais faire est de changer le fuseau horaire.
>> Et puis nous allons voir.
Aha! Juste ici.
Il ya un tas de différentes énonciations de configuration ici,
mais celui que je suis à la recherche de cette chose appelée URL de base,
et par défaut je comprends la valeur Kohana,
mais je vais changer que pour CS50-Kohana,
et je pense que cela devrait régler le problème.
Oui, très bien.
Par défaut, pour voir que ça marche, il dit: «Bonjour tout le monde."
Où cela vient-il? Comment sommes-nous arrivés à Bonjour tout le monde?
Est où exactement le code qui a réellement écrit ça?
Pour comprendre cela, je vais vous présenter ce concept appelé routage.
Quasiment tous les frameworks web ont le concept appelé routage,
qui est le morceau de logiciel qui permettra de cartographier un certain URL
à un certain morceau de code dans votre cadre.
Par exemple, si vous avez une URL et que vous allez vers une URL comme foo.com / blog / all
alors que le cadre va faire - ou du moins ce Kohana va faire -
est il va trouver une classe appelée blog contrôleur,
et il va courir la fonction nommée l'action tout.
Je sais que je parle de la classe et les fonctions,
et je sais que vous n'avez pas couverte classes et fonctions
en encore CS50, mais pour l'instant,
vous pouvez penser de classes comme un simple groupe de fonctions,
un moyen de regrouper les fonctions ensemble.
C'est vraiment tout ce que vous devez savoir.
>> Maintenant, si nous regardons notre structure de dossiers,
à l'intérieur du dossier de l'application, il est un autre dossier appelé les classes,
et les autres dossiers sont appelés contrôleur et modèle.
Si vous regardez dans le dossier du contrôleur,
nous voyons qu'il ya un fichier appelé Bienvenue,
et vous pouvez voir ici est une classe appelée contrôleur Bienvenue,
et il ya une fonction appelée Index Action,
et ce qu'il fait est qu'il définit le corps de votre réponse à Bonjour tout le monde.
C'est là que le code est écrit.
L'autre question est, bien, je n'ai pas aller à
bla, bla, bla, / welcome / index.
Comment suis-je arrivé ici?
Eh bien, c'est tout simplement parce que
ici au fond de notre fichier d'amorçage
où nous installons nos routes
vous pouvez voir qu'ils mettent des valeurs par défaut pour vous.
Le contrôleur par défaut est la bienvenue. L'action par défaut est l'indice.
C'est pourquoi, lorsque nous mettons rien là-dedans, il a automatiquement le contrôleur Bienvenue
et l'action de l'indice.
>> Tout sens jusqu'ici?
Maintenant, vous pouvez faire plus que simplement aller au contrôleur
et une action spécifique.
Vous pouvez également passer des paramètres à la commande.
À titre d'exemple,
Je vais ajouter une autre action de ce contrôleur à vous montrer.
Appelons cette action Echo, car il va vous dire ce que vous lui donnez,
et si je suis fondamentalement va saisir
un paramètre qui va être envoyé par moi pour le programme de routage,
et comme vous pouvez le voir ici,
cette ligne ici, vous pouvez voir que
Cela signifie essentiellement que vous avez contrôleur, et vous avez un /,
et vous avez l'action, et vous avez un autre /,
et que ça va être des paramètres, et parce que nous avons ce nom ID
dans les crochets, ce qui signifie que nous nommer ce paramètre ID.
Plus tard dans mon code de contrôleur si je veux saisir une prise de ce paramètre,
Je peux utiliser le code que j'ai écrit, trouver le paramètre nommé ID.
C'est ce que j'ai fait ici, et je vais revenir et dire,
"Vous avez dit" que.
Et maintenant si je vais à notre site Web,
Je vais à cs50-kohana/welcome/echo/Helloooo--
oh, c'est vrai.
Il est une étape j'ai laissé de côté.
Cela fait partie de l'idée de codage direct.
>> Voici une chose. Voyons.
Donc, normalement, par défaut avec un grand nombre de ces applications Web
vous devez inclure cette chose index.php dans votre URL,
parce que l'idée est index.php est en quelque sorte le point d'entrée
de votre application, mais bien sûr,
c'est une sorte de gênant d'avoir.
Vous ne voulez pas avoir index.php apparaissent dans votre URL,
et à peu près tous les framework web de la boîte
a ce problème index.php,
et si vous avez à prendre des mesures pour être en mesure de retirer cela.
Et dans ce cas,
ce que nous allons faire, c'est que nous allons utiliser un fichier nommé. htaccess,
et c'est quelque chose qui est spécifique au serveur Web Apache,
et il peut faire des choses comme la réécriture des URL
et URL de redirection et ainsi de suite et ainsi de suite,
et Kohana est assez gentil pour fournir un fichier htaccess modèle. que nous pouvons utiliser.
>> Comme vous pouvez le voir, il ya un fichier nommé example.htaccess,
et nous allons copier ce fichier. htaccess.
Je vais ouvrir cette et le modifier,
et fondamentalement, il fait un tas de choses différentes.
La touche de ligne vous pouvez regarder, c'est ici.
L'idée est que cela crée une règle qui dit:
«D'accord, ce que vous tapez dans, préfixez index.php à cela."
Vous pouvez voir que.
L'. * Se tient pour rien, correspond tout,
puis la deuxième partie est index.php / $ 0,
et $ 0 correspond à tout ce qui a été identifié auparavant.
Cela fait-il sens?
Mais la chose vraiment touche je veux changer est de changer cette base de réécriture,
qui est la base de l'URL.
Il sorte de suppose où vous travaillez.
Je vais ajouter CS50 Kohana pour que,
et de cette façon maintenant, si je supprimer le index.php,
il doit travailler, et je vais ajouter quelques chiffres
pour vous montrer que ce bien a fait un travail.
Ça sonne bien.
>> Vous avez des questions à ce jour?
[Étudiants] Comment at-il savoir faire le 123?
Est-ce un argument?
Exactement. Vous pouvez penser que c'est juste comme un argument.
Mais la chose étrange, cependant, c'est que la façon dont Kohana le fait
est qu'ils ne font pas exactement comme un argument.
Vous devez saisir comme ça.
Vous devez saisir l'objet de requête et demander pour le paramètre qui est nommé ID,
et ce nom ID vient de ce fichier d'amorçage
que je l'ai montré plus haut, et le nom de l'ID dans ces équerres,
et c'est ainsi que vous prenez ces paramètres.
Impressionnant.
D'autres questions?
Comme je le disais, les contrôleurs, ils gèrent la logique d'application,
si c'est une instance où vous pouvez voir that -
c'est très basique, mais c'est toujours la logique d'application,
l'idée de saisir le paramètre et créer une nouvelle chaîne
qui dit, "Vous avez dit que bla», puis cracher que de nouveau à vous.
Et généralement ce que vous faites est de créer différents contrôleurs.
Vous créez des contrôleurs séparés pour les différentes parties de votre site web.
>> Aujourd'hui, nous allons faire un site très simple,
et ça va être un blog très basique.
Nous allons faire une nouvelle commande juste pour les messages dans un blog.
Mais alors, si je devais également ajouter des commentaires à l'article du blog,
alors je voudrais probablement de faire un nouveau contrôleur pour ces commentaires.
Si je voulais ajouter des utilisateurs, je serais probablement ajouter un nouveau contrôleur pour les utilisateurs,
et en général, l'idée est que chaque fois que vous avez un nouveau modèle,
un nouvel objet de données que vous avez affaire,
vous avez un contrôleur unique pour cet objet de données.
Aujourd'hui, nous allons seulement de travailler avec une objet de données,
et que ça va être les messages,
et vous pouvez également penser à des objets de données comme correspondant aux tables.
En général, chaque tableau correspond à 1 type d'objet de données,
si la table de poste aura 1 modèle de poste,
qui aura 1 contrôleur de poste correspondant à celui,
et de même pour les observations, la même pour les utilisateurs, et ainsi de suite et ainsi de suite.
Et c'est une règle générale.
Il va y avoir des cas particuliers où vous pouvez différer de ce que,
mais 90% du temps c'est ce que vous allez faire,
et je vais vous montrer ce que c'est ce que nous allons faire aujourd'hui.
1 concept plus avant de nous plonger de nouveau dans le code,
cette idée de mapping objet relationnel.
>> Les gars, vous avez déjà fait un développement pset web,
et vous avez vu que vous faites une requête SQL,
et tout ce qu'il vous revient sont rangées.
Vous obtenez ces lignes, et vous les indexer par un nom,
le nom de la colonne et la table,
et c'est comme ça que vous travaillez avec elle,
et il peut être un peu encombrant.
Mais en outre, si vous avez des relations au sein de votre base de données,
comme par exemple si j'ai des commentaires et des messages,
alors peut-être que je veux prendre le poste de parent d'un commentaire.
Si j'utilise seulement des lignes dans SQL, alors tout ce que je peux obtenir est l'ID
du poste de parent et pas le poste lui-même.
Mais quand nous sommes codage, ce que nous voulons réellement, c'est de réellement saisir
la mère elle-même poster parfois.
Qu'est-ce mapping objet relationnel fait est
elle reprend les résultats de la requête de base de données
et le met dans des objets pour vous, qui sont beaucoup plus agréable de travailler avec
que les tableaux et les lignes simples.
>> Par exemple, maintenant, quand je n'ai peut-être un commentaire,
et je veux saisir son poste de parent,
et peut-être je ne commente flèche poste,
alors il va vraiment me donner l'objet de poste
correspondant à l'emploi réel de parent, pas seulement une pièce d'identité,
que je autrement à utiliser et faire une autre requête SQL pour récupérer le poste,
qui est encombrant et inutile.
Et d'ailleurs, en associant toutes ces lignes de données dans des objets,
vous pouvez également joindre plusieurs fonctions à des objets,
Ainsi, par exemple, j'ai parlé de la façon dont les classes sont essentiellement des groupes de fonctions.
Vous pouvez penser que c'est comme ça.
Par exemple, j'ai peut-être cet objet de poste,
et peut-être je voudrais avoir une sorte de fonction attachée à elle
qui me dit essentiellement été récemment posté?
At-il été publié dans la dernière semaine, vrai ou faux?
Et c'est une fonction que je peux fixer sur cet objet,
et c'est vraiment pratique d'avoir dans le même endroit,
et il existe une multitude de fonctions différentes que vous pouvez créer
pour ces objets, et c'est vraiment agréable d'être en mesure de le joindre à une classe,
à un objet, alors que si vous venez d'avoir des lignes en provenance de votre base de données,
alors vous ne pouvez pas vraiment attacher aucune fonctionnalité pour cela.
Il est littéralement juste des données.
Vous avez des questions à ce sujet à tous?
ORM sont le développement web très commun,
et il existe un grand nombre de différents types de ORM,
et Kohana a son propre ORM.
C'est très basique, mais vous aurez un avant-goût de ce que cela ressemble.
>> Créons un modèle pour nos messages de blog,
et la première chose que nous devons évidemment faire est de créer une table réelle
dans notre base de données pour stocker nos données effectivement pour ces postes.
La première chose que je vais faire est d'aller à phpMyAdmin.
Avez-vous les gars utilisé phpMyAdmin avant?
Ok, génial, si vous les gars savent déjà ce que c'est,
et je vais créer une nouvelle table appelée Kohana messages,
et ça va être très simple.
Je vais devoir vous connecter Dans
Tout ce que nous allons faire aujourd'hui est d'avoir un auteur et un corps,
juste garder les choses simples.
Je vais créer cette table,
et maintenant nous avons juste un tableau représentant nos messages
avec 2 champs pour notre auteur et notre corps.
L'autre chose que je vais faire maintenant est
configurer mon application Web afin de savoir comment se connecter à la base de données,
et ce, encore une fois, c'est quelque chose que vous avez à faire avec toutes les applications Web.
Vous devez indiquer le nom d'utilisateur et le mot de passe
et le nom de la base de données et ainsi de suite et ainsi de suite
à comprendre comment effectivement se connecter à votre base de données.
>> Dans Kohana, nous avons quelque chose qui s'appelle un module de base de données,
et dans le dossier de configuration que nous avons ce dossier appelé Base de données,
et comme vous pouvez le voir, il ya un tas de paramètres que vous devez définir ici
pour lui dire ce qui est le nom d'utilisateur et le mot de passe
pour la base de données pour que je puisse s'y connecter.
Et comme je ne veux pas vous les gars pour réellement savoir
le nom d'utilisateur et mot de passe de ma base de données,
J'ai un fichier où je l'ai déjà mis tout cela, et je vais copier et le coller sur.
Impressionnant.
Très bien. Je pense que c'est toute la configuration que je dois faire,
mais nous allons voir.
Nous allons continuer de travailler en elle, et si quelque chose se bloque,
puis nous fixerons.
Maintenant ce que je vais faire, c'est que je vais créer un nouveau contrôleur.
Ou fait, désolé.
Je dois d'abord créer un nouveau modèle.
Je vais créer un nouveau modèle appelé Post.php,
et ce que nous allons faire, c'est que nous allons appeler la classe Model_Post.
Obtenir un peu de coloration syntaxique,
et quand je dis, "s'étend ORM," c'est essentiellement
une programmation plus orientée objet,
qui, malheureusement, vous les gars n'ont pas encore appris à CS50,
mais il est assez facile à ramasser.
Il me donne toutes ces fonctionnalités supplémentaires qui vient dans ce package de ORM,
et si je reçois un tas de fonctions supplémentaires et autres joyeusetés gratuitement,
que vous verrez un peu de dans une seconde.
>> À l'heure actuelle fait tout ce que je dois faire est de créer cette classe.
Je n'ai même pas besoin de faire toute fonction ou autre chose,
mais j'ai créé une classe qui représente la table,
et parce que j'ai étendu cette classe d'ORM,
Je obtenir un tas de choses gratuitement, donc pour l'instant vous n'avez pas de mettre quelque chose de plus haut.
Et maintenant, ce que je vais faire, c'est que je vais créer un nouveau contrôleur,
que je vais nommer blog.php,
et je vais copier sur le contrôleur Bienvenue
donc je n'ai pas à retaper des trucs,
et maintenant je dois renommer.
Maintenant ce que je vais faire pour tester pour s'assurer que tout fonctionne sur,
Je vais prendre le premier post de ma base de données
et imprimer le corps du message sur l'écran.
Pour ce faire, ce que je vais faire en premier, c'est que je vais enregistrer les messages
à une variable si ce que nous allons faire est de -
dans Kohana ce que vous faites est de saisir l'objet de poste
c'est un peu lourd, mais vous avez à faire cette chose appelée ORM :: factory,
puis vous passez le nom du modèle que vous souhaitez,
et il renvoie l'objet ORM qui représente ce modèle.
Et puis, comme je l'ai dit, lorsque nous étendons l'objet ORM,
nous obtenons toutes ces méthodes pour libre, ainsi, par exemple,
nous obtenons cette nouvelle fonction appelée "trouver tous»
qui renvoie automatiquement chaque poste dans la base de données,
ce qui est assez pratique.
>> Et maintenant dans le corps, je vais revenir
le premier poste et retourne son corps.
Et bien sûr, j'ai besoin de créer un poste,
nous allons donc insérer un nouveau poste.
Je dis, "Brandon, mon tout premier post."
Impressionnant.
Et maintenant, nous allons passer aux blogs
et si tout fonctionne bien - oh, c'est encore autre chose d'autorisation de fichier muet.
Tenir sur 1 seconde. C'est une sorte de absurde.
Nous y voilà. Très bien.
J'ai corrigé ce problème d'autorisation.
Il essayait de créer des fichiers et un log,
et les autorisations, encore une fois, ne sont pas correctement réglés, donc je l'ai fait
de sorte que ces fichiers étaient inscriptible et exécutable
il pourrait effectivement vous connecter à des choses.
Maintenant, il me donne une autre exception dicton, "ORM classe pas trouvé,"
et c'est parce que j'ai oublié une autre étape.
C'est dommage.
Dans le fichier de dossiers d'amorçage, il ya ces modules ici,
que vous pouvez choisir d'activer ou désactiver.
Il s'agit d'un groupe de différentes fonctionnalités que vous pouvez choisir d'utiliser
dans Kohana, qui est une sorte de gentil.
>> Par exemple, ils ont un module d'authentification
que vous pouvez utiliser pour authentifier les utilisateurs.
Ils ont un module de mise en cache si vous souhaitez mettre en œuvre
une sorte de mise en cache arrière fin de rendre le travail de l'application plus rapide et ainsi de suite.
Nous devons permettre à la base de données et le module ORM,
parce que, comme je l'ai dit, nous utilisons la base de données, de toute évidence,
et nous avons aussi besoin d'activer le module ORM,
parce que nous aimerions avoir les fonctionnalités supplémentaires, ce qui est agréable à avoir.
Tout ce que j'ai à faire est de décommenter ces deux lignes,
et maintenant, si je vous rafraîchir, il m'a donné une autre erreur.
Il dit, "Classe Model_Post pas été trouvé."
Maintenant, c'est un bon problème à avoir.
Voyons.
Rendre public.
N ° Attendez.
Oh, ma chérie.
Je ne sais pas pourquoi il n'est pas en mesure de trouver qui.
C'est vraiment étrange.
J'ai cette classe ici.
Je suppose que je pourrais avoir à - oh.
Je suis tellement stupide. J'ai oublié d'ajouter une balise PHP.
C'est pourquoi.
Maintenant, je dois annuler que 1 changement que je vient de faire.
>> Okay. Nous y voilà.
C'était vraiment stupide. Je n'ai pas eu une balise PHP d'ouverture.
Mais comme vous pouvez le voir, maintenant il fonctionne correctement, non?
Nous avons 1 poste.
Nous avons pris le premier poste, et maintenant nous avons imprimé son corps.
Grand. Fantastique.
Vous avez des questions à ce jour?
Nan? Vous avez des questions?
D'accord, nous venons de créer le modèle de poste, très basique,
et nous allons ajouter quelques fonctions plus tard.
Nous pouvons ajouter des validations et filtrage.
Validations sont l'une des choses
que les cadres de résoudre pour vous vraiment, vraiment bien,
et je ne pense pas que vous avez eu à faire pour votre CS50 pset,
mais si vous faites du développement web pour votre projet final,
vous allez probablement vouloir faire une sorte de validation,
comme ne pas avoir les noms d'utilisateur vierges,
peut-être avoir un mot de passe avec au moins une longueur, des choses comme ça.
Et c'est vraiment lourd à mettre en œuvre ces choses par nous-mêmes,
et à peu près tous les framework web unique fait pour vous
et vous permet de faire d'une manière très propre.
Et le modèle est que vous exprimez généralement ces règles de validation,
car il est de valider si un modèle est valide ou non.
>> Mais pour l'instant, nous allons mettre cela à plus tard,
et pour l'instant nous allons travailler sur une autre partie,
et nous allons essayer de faire un nouveau point de vue
qui répertorie tous les postes.
Les étapes de la création d'une nouvelle action pour la liste de tous les postes
est de saisir une liste de tous les postes
puis de rendre la liste de tous les messages à travers une vue.
Ici, heureusement assez, nous avons déjà attrapé tous les messages
en utilisant cette première ligne, la trouver toutes les fonctions,
et maintenant ce que nous allons faire est si loin
J'ai été directement mise le corps de la réponse
en transmettant la chaîne, mais maintenant je veux utiliser une vue,
et la différence entre une vue et juste faire ce
C'est avec une vue que je peux avoir une belle grosse modèle, HTML,
et ce que je peux faire est de le transmettre certaines variables
puis ont la vue remplir automatiquement son modèle
utilisant ces variables.
Qu'est-ce que je vais faire, c'est que je vais créer un nouveau point de vue,
et je vais nommer le point de vue quelque chose comme "blog / index"
et je vais lier essentiellement ce - oh, ce que j'écris?
Mon cerveau est ailleurs.
Je vais lier les messages variables à la vue,
si cette façon le point de vue a accès à cette variable de poste.
>> Et maintenant j'ai besoin de créer ce point de vue,
Nous avons donc ici ce dossier "Vues"
et d'abord, je vais créer un nouveau dossier en vertu de cette appelé "Blog".
C'est gentil. De cette façon, nous pouvons avoir une belle hiérarchie de nos vues.
Et puis je vais créer un autre fichier là appelé "index.php".
Impressionnant.
En fait, nous allons avoir les deux ici.
Création d'un fichier de vue est probablement la partie la plus simple de tout cela,
et ce sont probablement des choses que vous connaissez déjà.
Nous allons faire quelque chose de vraiment simple,
commencer à dire: «Ma liste de blog."
Ensuite, nous pouvons passer,
et nous pouvons parcourir le tableau des messages,
saisir chaque poste et dire quelque chose comme -
peut-être ajouter une ligne
puis imprimer l'auteur et le corps.
Qui font sens si loin?
Et nous allons voir si cela fonctionne.
Rien ne s'est passé.
Je me demande pourquoi.
Oh, j'ai raté une étape. Très stupide de ma part.
J'ai créé un point de vue, mais je n'ai pas mis la vue comme la réponse,
de sorte que vous avez à faire une chose.
Vous avez à faire "ce corps de la réponse" et le mettre à la vue.
Nous y voilà.
Nous avons notre position, et nous avons un poste,
et juste pour le plaisir, nous allons insérer un autre poste
afin que nous puissions voir une liste.
Et insérer ces deux postes,
et maintenant si je rafraîchir la page,
nous voyons tous ces messages ici.
>> Est-ce que donner un sens à ce jour?
Ouais, une question? Oh, d'accord.
Comme vous pouvez le voir, nous avons été en mesure de séparer tous ces codes sur
en différentes sections, et vous pouvez voir que c'est plus clair avec le code de la vue.
Ce fichier ici qui représente la vue,
il ne se soucie que représentant des données, l'affichage des données.
Il se passa quelque sorte de données, et tout ce qu'il fait est juste vous le montrer.
Dans tous les autres parties de votre code, vous n'aurez pas à vous soucier de tout cela,
et de même, le code de votre vue n'a pas à se soucier rien
la façon d'accéder à la base de données et ainsi de suite et ainsi de suite,
qui est vraiment bon et rend votre code beaucoup plus maintenable.
Comme je le disais, points de vue, ils sont dynamiques en ce que
c'est 1 fichier, mais il serait de générer des vues différentes
sur la base des variables que vous passez en fait,
et en outre, il ya beaucoup de différentes fonctions d'aide
que vous pouvez utiliser pour vous aider à écrire votre code plus rapide,
que je vais vous montrer dans un instant.
Ouais.
>> [Étudiants] Donc $ 0 est un contrôleur, non?
Ce deuxième chose.
La question est de 0 $ un contrôleur?
$ 0 est une variable que j'ai créé ici.
J'ai créé une vue à la première. J'ai assigné à une variable.
Puis je suis passé dans cette fonction, la définir comme le corps de la réponse.
Cela fait-il sens?
[Étudiants] est donc vue :: factory, est vue comme une classe
ou un [inaudible] fonction de l'usine de la bibliothèque?
La question est sur la fonction vue :: factory,
et c'est en substance ce une programmation plus orientée objet essentiel.
Voir est la classe de vue, et il a une méthode appelée «l'usine»,
et c'est un moyen de récupérer l'objet qui est nommé "blog / index."
Et c'est un peu plus de choses de la programmation orientée objet
que je ne vais pas aller dans trop ici.
Maintenant, évidemment, nous voulons créer de nouveaux postes,
mais nous ne voulons pas avoir à le faire à travers une base de données,
donc nous allons créer une nouvelle action pour la création d'un nouveau poste,
et il ya beaucoup de choses que nous avons à faire.
>> La première chose que nous allons faire - nous allons aborder ces choses une par une.
La première chose que nous allons faire, c'est que nous avons à créer un formulaire
pour l'insertion d'un nouveau poste,
mais je vais aussi ajouter une nouvelle action à la première,
afin d'ajouter une nouvelle action est tout aussi facile que
l'ajout d'une nouvelle fonction avec votre contrôleur,
et pour l'instant je vais faire quelque chose de très simple,
il suffit de prendre ce point de vue et l'afficher, il suffit de l'afficher pour vous.
Et puis maintenant, je vais créer un nouveau fichier de vue,
et je vais commencer à écrire des trucs.
Ce qui est bien Kohana est qu'ils fournissent un grand nombre de différentes fonctions d'aide
pour que vous écriviez voir code plus facilement,
et une de ces fonctions d'assistance ou de modules d'aide
est autour de formes d'écriture.
Pour écrire les formes, je n'ai pas vraiment d'écrire directement du code HTML moi-même.
Les gars, vous avez écrit des formulaires HTML.
Vous savez comment il peut être vraiment, vraiment pénible et fastidieux à écrire formes.
Ce n'est pas drôle, si heureusement,
nous pouvons fondamentalement écrire un formulaire à l'aide de Kohana
former des fonctions d'aide à le faire pour nous.
Nous allons avoir fondamentalement champs pour chaque chose que nous avons,
si un des auteurs et un autre pour les organismes.
Nous allons avoir une étiquette, et nous allons avoir une entrée.
>> Et puis enfin, nous allons avoir une soumission.
Et comme vous pouvez le voir, c'est beaucoup plus propre à écrire
que tout ce que HTML désordonné, ce qui est plutôt agréable.
Certes, il existe d'autres frameworks web qui ont encore plus propre que celle,
mais au moins c'est mieux que d'écrire le code HTML vous-même.
Impressionnant, si c'est ce que vous voyez.
C'est le genre de désordre,
donc je vais ajouter un saut de ligne, il
à faire que de regarder un peu plus agréable.
Bien sûr, il a toujours l'air vraiment, vraiment mauvais, mais nous sommes juste concentré
sur la fonctionnalité pour le moment et pas sur l'esthétique.
Pas le temps de tout faire.
Et comme vous pouvez le voir, nous avons maintenant une super forme de base,
qui est plutôt agréable.
Ce code que je dirais est plus propre que d'essayer d'écrire un formulaire HTML vous-même,
donc c'est agréable.
Quelle est la prochaine?
Maintenant, nous devons faire des choses avec l'action.
Normalement, lorsque vous écrivez des formulaires HTML,
vous avez à lui dire où il va soumettre le formulaire.
Par défaut dans la plupart des frameworks web,
il soumet à exactement la même URL, si la chose est,
si vous envoyez une demande d'obtention d'/ blog / nouveau,
il devrait vous afficher le formulaire,
mais si vous envoyez une demande de poste à / blog / nouveau avec les données,
il devrait en fait essayer de sauver ce poste
et faire quelque chose avec elle.
>> Ce que nous allons faire est
fondamentalement tout ce que nous avons à faire pour vérifier s'il s'agit d'une demande de poste ou une demande d'obtention
est de vérifier quelles sont les variables de poste que vous pouvez définir.
Et si la variable de poste est fixé, alors nous allons essayer de créer un nouveau poste.
Encore une fois, nous faisons juste cela,
et qui crée un nouveau poste, et nous sommes littéralement aller
définir ses champs de ce genre,
et puis nous allons enregistrer.
Et puis je vais réorienter
à la page d'index afin qu'ils puissent voir notre liste des postes à nouveau.
Essayons.
Je dis, "Brandon"
puis soumettre le poste, et si tout va bien,
comme vous pouvez le voir, il m'a redirigé vers la page d'index,
et si je fais défiler vers le bas, nous avons un poste nouvellement inséré.
Yay!
Ouais, question.
>> [Étudiants] Que faire si vous aviez entré exactement la même chose
vous avez entré avant?
Est-il vérifier pour s'assurer que vous n'avez pas dupliqué
la même demande?
Soyez défaut, non, car par défaut -
désolé, la question est de savoir si vous entrez dans exactement les mêmes données sous la forme
et soumettre ce, il va vous permettre d'insérer un objet dupliqué,
une double saisie, essentiellement?
En ce moment, oui, il vous permettra de le faire,
parce que dans les bases de données, il est parfaitement valable à avoir des lignes complètement en double,
mais si c'est une préoccupation, alors vous pouvez ajouter des validations, par exemple,
pour s'assurer que si c'est exactement la même chose que ce qui existe déjà,
alors dire que c'est un objet non valide,
et puis vous pouvez même spécifier votre message d'erreur
et dire, "non valide car cela existe déjà" ou quelque chose comme ça.
Mais dans ce cas, je ne pouvais créer quelque chose en double.
Maintenant, nous allons essayer et d'ajouter quelques validations.
Le problème est maintenant que
Je pouvais littéralement présenter un poteau complètement vide.
Je peux cliquer sur ce bouton à l'heure actuelle, et il nous aller.
Vous ne pouvez pas vraiment voir, mais cette ligne supplémentaire ici
indique que j'ai littéralement un nouveau poste.
Il a juste un auteur blanc et un corps blanc,
et nous ne voulons pas permettre aux gens de le faire.
C'est là qu'intervient la validation
>> Je peux aller à mon modèle objet,
et maintenant je peux ajouter une nouvelle fonction qui spécifie
quelles sont les règles de validation que je dois ajouter à ce modèle
pour s'assurer qu'il est valide ou de préciser ce que cela signifie d'être un message valide?
Et je tiens à dire que c'est seulement un poste valable si l'auteur et corps
ne sont pas blanc, et c'est ainsi que vous le faites dans Kohana.
Vous créez une nouvelle fonction appelée «Règles»
et puis vous revenez essentiellement un tableau associatif
qui définit les règles de validation pour cet objet.
Nous allons retourner le tableau, puis ce que nous allons faire, c'est
dire «auteur», il va à un tableau,
qui va à un autre tableau appelé "pas vide."
Et puis je vais dire «corps».
Bon, et la syntaxe de cette structure et pour cette
peut sembler un peu lourd et un peu compliqué.
Si vous lisez la documentation, il est assez simple à comprendre,
Mais l'essentiel c'est ce que vous devez faire pour spécifier
des règles de validation, et il ya beaucoup de règles différentes
que Kohana vous donnera gratuitement, comme vous pouvez ajouter des règles à dire
il doit être au moins de cette longueur.
Peut-être qu'il doit être numérique. Peut-être qu'il doit être numérique alpha.
Peut-être qu'il doit être au plus de longueur, ainsi de suite et ainsi de suite.
Il ya beaucoup de règles différentes que Kohana fournit pour vous,
et vous pouvez aller sur leur site web, regarder la documentation,
et vous pouvez voir toutes les différentes choses que vous pouvez faire.
>> Mais c'est tout ce que j'ai à faire,
et maintenant nous allons voir ce qui se passe
si je soumets un poste vide.
Qu'est-ce qui va se passer? Oh, non, je reçois une erreur.
Je reçois une exception de validation.
Eh bien, c'est bon.
Il m'a dit que mon modèle est invalide,
mais je ne veux pas voir une exception
à mes utilisateurs quand ils essaient de présenter quelque chose d'invalide, non?
Je veux leur donner une sorte de message d'erreur convivial
quand quelque chose va mal.
Ce que nous allons faire, c'est que nous allons
envelopper le tout dans une boucle essai de capture.
En fait, je pense que c'est aussi quelque chose que vous n'avez pas encore appris
dans CS50, parce que C, le langage de programmation C,
ne pas avoir des exceptions, mais presque tous les autres une seule langue
a des exceptions, si vraiment, vraiment brièvement,
une exception est quelque chose qui un morceau de code peut
lever une exception quand quelque chose va mal,
mais alors peut-être un autre morceau de code plus haut
peut attraper cette exception et en faire quelque chose.
>> Par exemple, dans ce cas,
le morceau de code qui essaie de sauver un modèle,
il valide le modèle, et si elle dit, "Ok, ce modèle est invalide,"
il va lever une exception, et c'est un peu l'équivalent de
en C vous pourriez vous retourner un -1 ou quelque chose comme ça.
Et puis pour moi, cette fonction, mon code
à un niveau supérieur, je peux essayer d'attraper cette exception
et dire essentiellement: «Bon, si je prends l'exception, que vais-je faire?"
Ou je pourrais choisir de ne pas attraper cette exception et laisser quelqu'un de plus haut
attraper l'exception, ou si personne ne l'attrape,
puis l'ensemble du programme se bloque et dit,
"Quelque chose s'est mal passé, et je ne pouvais pas le supporter."
>> Mais ce que nous faisons est que vous enroulez un morceau de code dans un bloc try,
et puis vous ajoutez aussi quelque chose appelé un bloc catch,
qui est le genre de code qui va essayer d'attraper les exceptions qui peuvent se produire.
Et si je prends cette exception particulière
ou invalidation exception, alors ce que je vais faire est
Je vais régler les erreurs - je pense que c'est la façon dont je le fais -
et je vais régler les erreurs à un objet.
Et puis ce que je vais faire, c'est si elle frappe cette exception,
ça ne va pas à rediriger, et si elle ne redirige pas,
il va sortir de la si le blog
et frappé ce blog / nouvelle, qui est veux que je veux faire.
S'il ya une erreur, je veux revenir à la forme
et afficher les erreurs.
Maintenant, ce que je veux faire, c'est que je veux transmettre à ces erreurs
à la vue.
Bon, je crois que j'ai la vue de droite ici,
et fondamentalement, je veux afficher ces erreurs, si elles existent.
Avant d'écrire le code HTML pour cela, je vais très rapidement
vous montrer ce que la structure de ces erreurs regards variables comme,
et c'est une bonne pratique en général.
Un grand nombre de fois que vous obtenez quelque chose de certaine méthode,
une fonction dans le cadre de web,
et vous ne savez pas ce que la variable ressemble,
si vous ne savez pas comment travailler avec elle.
Je vais utiliser une méthode d'impression pour imprimer r fondamentalement dehors.
>> Et comme vous pouvez le voir, il me dit que c'est un tableau associé,
et vous avez une clé, auteur, les points de cette chaîne,
auteur ne doit pas être vide, et une autre touche, corps,
des points à une autre chaîne, le corps ne doit pas être vide.
Je suis comme, ok, cool.
Ensuite, je peux parcourir le tableau et imprimer chaque message.
Il est fondamentalement comme un tableau associatif avec un tas de messages.
Ce que je vais faire est "si des erreurs»,
et je vais créer une liste non ordonnée,
et je vais pour parcourir toutes les erreurs.
Et ce, et maintenant je vais essayer de soumettre ce nouveau,
et voyons ce que nous obtenons.
Maintenant, nous obtenons cette belle liste d'erreurs,
et cela est encore assez laid, mais cela peut évidemment être formaté à l'air agréable,
mais l'idée de base est juste à quelques lignes de code,
nous avons pu valider notre modèle,
assurez-vous que certains champs ne sont pas vides,
et si quelque chose n'allait pas, puis revenir une sorte de message d'erreur
Je pourrais alors présenter à l'utilisateur.
Vous pouvez également personnaliser votre validation
de sorte que vous pouvez en fait avoir un message d'erreur
qui est plus spécifique à votre application ou quelque chose comme ça.
Tout ce qui est généralement personnalisable.
>> Malheureusement, nous manquons de temps,
donc je vais devoir couper la session de codage en direct ici.
Il ya un tas d'autres fonctionnalités que je veux démontrer pour vous
dans cet exemple.
Par exemple, vous pouvez ajouter des modèles à votre site,
alors peut-être il ya une sorte de code HTML que vous souhaitez appliquer
à chaque page de votre site, et au lieu de le coller
dans chaque fichier de vue unique que vous avez, ce qui serait évidemment une mauvaise pratique,
vous pouvez en principe définir ces modèles,
puis dans votre contrôleur dis: «Bon, je suis en utilisant ce modèle."
"Ce que toutes mes vues utiliser ce modèle."
Et une dernière chose que je veux vous démontrer ainsi
que nous n'avons pas le temps pour est cross-site scripting,
et fondamentalement, je pense que vous avez probablement vu dans CS50 -
Je pense que David Malan probablement parlé de la façon dont vous pouvez généralement injecter
Le code JavaScript dans - avez-vous parlé de cela?
Peut-être? Peut-être pas?
>> Mais un grand nombre de fois, vous pouvez injecter du code JavaScript malveillant
dans la base de données de quelqu'un, et si elles n'échappent pas correctement,
puis quand ils présentent que des données à l'utilisateur,
alors il peut exécuter une sorte de code JavaScript hasard vous ne voulez pas arriver,
et j'allais montrer comment vous feriez que dans Kohana.
C'est en fait vraiment, vraiment facile.
Je pourrais le faire dès maintenant en 2 secondes littéralement.
Tout ce que vous avez à faire est essentiellement envelopper ces choses
dans ce qu'on appelle les entités HTML.
Et qui va échapper automatiquement tous les caractères correctement
et assurez-vous n'obtenez pas ce problème.
[Étudiants] Vous orthographié le premier test de manière incorrecte.
[Brandon Liu] Oh, oh là là.
>> D'accord, c'est tout ce que je devais partager avec vous aujourd'hui.
Ces diapositives vont être posté, mais ceux-ci sont généralement
les seules ressources que vous devriez vraiment besoin de commencer avec Kohana.
Vous pouvez aller sur le site. Ils ont un mode d'emploi, et ils ont aussi un explorateur de l'API.
Nous pouvons explorer toutes les différentes fonctions et les fonctions d'assistance qu'ils ont pour vous.
Ils ont généralement suffisamment d'informations sur le site Web
que vous pouvez utiliser pour démarrer et y aller avec Kohana.
Il n'y a pas que de nombreux tutoriels, je pense, pour Kohana, en dehors de
ce qu'ils ont sur le site ici, donc c'est probablement votre meilleur choix.
Mais si vous voulez aller avec le framework web
et vous ne voulez pas avoir à chercher une nouvelle langue,
et vous voulez quelque chose qui est relativement léger et a une courbe d'apprentissage facile,
Je vous conseille vraiment Kohana.
C'est probablement la meilleure offre pour cela.
Le plus drôle, cependant, est de savoir si nous utilisions Ruby on Rails,
nous aurions reproduit ce que nous venons de faire
et probablement plus en moins de 3 minutes.
Pas de blague, mais l'apprentissage Ruby on Rails prend beaucoup plus de temps
qu'il n'en faudrait pour apprendre Kohana.
Il s'agit essentiellement de votre choix sur ce que vous voulez choisir d'apprendre,
mais si vous voulez obtenir rapidement opérationnel,
Kohana est certainement un très bon choix.
>> Toutes les dernières questions avant de terminer? Oui.
[Étudiants] Comment pourrions-nous intégrer cette
dans un cadre de CSS comme vous utilisiez lorsque vous instruisez?
La question est comment pourrions-nous intégrer que d'un cadre de CSS?
Qu'est-ce que nous serions probablement faire est de nous aurions probablement inclure
un nouveau dossier où nous vider tous nos fichiers CSS,
et puis nous aimerions également ajouter un nouveau modèle.
Dans le modèle que nous avions incluons ces fichiers CSS
pour s'assurer qu'ils sont référencées sur chaque page,
et puis quand vous êtes réellement écrivez du HTML,
vous ajoutez simplement les classes et autres joyeusetés appropriées,
et par exemple, lorsque vous utilisez quelque chose comme la forme
fonction d'aide, vous pouvez ajouter plusieurs paramètres après
de spécifier quelles classes vous souhaitez être relié à diverses choses
afin qu'ils puissent coiffer correctement, et c'est essentiellement la façon dont vous souhaitez aller.
>> D'autres questions?
Impressionnant.
Merci pour votre temps, et vous remercier d'être venus.
Je n'allais pas ajouter grand-chose d'autre,
mais une chose vraiment rapide, c'est que nous n'avons pas de lien
à la forme.
Vraiment stupide.
Ajoutons un - en fait dans la vue, blog, index,
nous allons très rapidement ajouter un lien qui mène à la nouvelle page,
la page où l'on peut insérer un nouveau poste.
Nous allons pour ce faire.
Ce qui est bien est qu'il ya tout ce groupe de fonctions d'aide HTML
qui faire des choses différentes pour vous, si vous avez déjà vu les entités
fonctionner ici, mais ils ont aussi une fonction appelée «point d'ancrage»,
laquelle vous pouvez taper dans le blog / nouvelle
et dire, "Poster un nouveau blog."
Et ce serait créer ce lien pour vous,
et cela semble vraiment trivial à faire, mais cela est beau,
car supposons que vous transférez votre site à partir de 1 domaine à l'autre.
Et si vous venez d'écrire les URL vous-même,
alors vous auriez à changer toutes les URL.
Ou peut-être vous l'avez déplacé de 1 sous-dossier à un autre sous-dossier.
Vous n'avez pas à changer toutes les URL vous-même,
et ce n'est pas amusant.
Vous pouvez utiliser cette ancre ici,
et vous pouvez changer le nom de domaine ou le préfixe de sous-dossier
dans le fichier de configuration une fois,
et alors il s'applique que partout, et c'est, encore une fois,
un excellent exemple de ne pas répéter vous-même, le séchage de votre code sur.
Où que vous vous répétez, essayer et extraire en quelque sorte de fichier de configuration
ou à une autre fonction et le faire gérer pour vous.
>> Et la dernière chose que je voulais vous montrer était
supposons que nous sommes de retour à ce poste, et j'avais composé quelques très long essai,
mais j'ai oublié d'inclure mon auteur.
Maintenant, quand je clique sur "Envoyer Post"
Je viens de perdre tout.
Non! Vraiment triste.
Alors, comment gérez-vous cela?
C'est ce que nous faisons.
Ce que nous faisons est là pour ces fonctions d'entrée et la zone de texte,
si nous incluons un second paramètre, alors la valeur de ce second paramètre
va être ce que le domaine va être d'abord rempli avec.
Ce que nous pourrions faire, c'est dans notre contrôleur de blog,
nous pourrions engager une autre variable.
Appelez-le "valeurs" peut-être.
Et passer dans le tableau de poste, littéralement.
Cela signifie que si la validation n'a pas réussi,
me passer le poste tableau que j'ai présenté à la dernière demande,
et de cette façon je peux utiliser les valeurs de ma dernière présentation
pour repeupler les champs.
Maintenant, je peux faire quelque chose comme valeurs auteur
et valeurs corps, et de cette façon maintenant, si je fais un peu de choses au hasard
et cliquez sur «Soumettre Post," alors il y reste.
Mais nous allons courir à un autre problème.
Cela fonctionne, mais si je vais à la page la première fois,
il va tomber en panne, et c'est parce que la première fois
nous passons à la page, cette variable de poste n'a pas encore été défini.
C'est nul. Il n'existe pas.
>> Et ce que nous voulons dire, c'est que si cette clé existe,
alors retourner la valeur de ce tableau,
mais si la clé n'existe pas, alors retourner une chaîne vide.
C'est la fonctionnalité que nous voulons ici.
Nous voulons vérifier si la clé existe avant d'essayer d'accéder au réseau,
et assez heureusement,
Kohana nous donne aussi une fonction d'aide pour cela.
Ils ont toute cette suite de fonctions
sous le nom ARR, court pour tableau,
et ils ont une fonction appelée «obtenir»,
et vous pouvez passer dans le tableau,
et vous pouvez passer dans le nom de la clé.
Puis essentiellement ce qu'il va faire, c'est qu'il va essayer d'obtenir cette clé,
mais si la clé n'existe pas dans le tableau,
il sera de retour vierge, ou nous pouvons également spécifier une valeur par défaut, je crois,
ce qui est agréable.
Maintenant, si nous faisons la même chose de nouveau,
alors vous voyez cela fonctionne la première fois,
et encore, si on tape dans des trucs au hasard
et essayer de présenter, il y reste.
>> Et je suppose que je peux aussi vous montrer comment ajouter un modèle très rapidement.
Ce que nous pouvons faire en premier, c'est que nous pouvons ajouter une nouvelle vue appelée "template.php"
dans le dossier Vues,
et ce que je vais faire, c'est que je vais imprimer quelque chose appelé «contenu»
qui va être ma page principale.
Et peut-être tout en bas, je vais ajouter, par exemple,
le droit d'auteur.
[Question des étudiants inaudible]
[Brandon Liu] Peut-être que c'est un modèle vraiment de base que je veux utiliser.
Je veux avoir un dossier avec mes droits d'auteur sur chaque page,
et maintenant ce que je vais faire dans mon contrôleur
est maintenant au lieu de dire, "s'étend Controller"
Je vais vous dire, "s'étend Controller_Template"
et maintenant au lieu de dire, «corps de la réponse est égale à ce point de vue,"
Je vais vous dire, "le contenu de ce modèle est -"
et je pense - que je mets un signe égal?
J'oublie. Ouais, je pensais.
Et maintenant, je mets cette variable contenu d'égaler la vue.
Je peux faire la même chose ici.
Et maintenant, si je vous rafraîchir, vous pouvez voir maintenant ce droit d'auteur, il est ajouté,
et juste faire quelque poste aléatoire,
puis, à nouveau, vous devriez voir que le droit d'auteur est en bas de la page.
>> Grand. C'est tout ce que je voulais vous montrer les gars.
[Applaudissements]
Vous avez des questions?
[CS50.TV]