>> Pour commencer à combler ce pourrait être votre seule expérience
avec la programmation web, ce que je pensé que je ferais est de voler un couple
des exemples que vous peut-être vu dans 50
si vous l'avez pris le passé an ou deux ou peuvent ne pas avoir
si vous avez pris il ya quelques années
qui sont des mesures de bébé vers une pyridine savoir MBC,
Model View Controller, et ce que cela signifie?
C'est nous reverrons peut-être est juste une façon de départ
pour nettoyer la conception de certains logiciel basé sur le Web,
ou il peut s'agir côté client basés aussi bien, mais nous allons l'utiliser
dans le contexte de PHP, afin que nous puissions commencer
de rendre plus complexe projets et de tri
de séparer les différents types de code dans l'application;
en particulier de sorte que lorsque nous avoir plusieurs personnes qui travaillent
sur un projet, il est beaucoup plus facile de tracer des lignes.
Alors d'abord, jetons un trouver un moyen sous-optimale
de mettre en œuvre quelque chose.
Supposons que je voulais faire un super- simple site Web de cours pour 50
ou toute autre classe, et cette classe a des choses
comme des conférences et un programme.
Je pouvais faire quelque chose comme un balise h1 en haut de ma page
et une liste non ordonnée avec Liste des li éléments dans l'ordre
d'avoir juste une liste à puces de options de menu, donc super simple.
Alors, comment pouvons-nous faire cela?
Eh bien, laissez-moi aller dans mon fenêtre de terminal ici,
et remarque que j'ai une lecture moi et nous relions à ce code
sur le site Web du cours dans un bit,
et remarque que j'ai indice du point htm - indice du point php.
Alors laissez-moi aller de l'avant et ouvrir que, et bien sûr c'est un peu
idiot que cette même appelé php
car tout ce que j'ai est un commentaire de php
et puis tout le reste est juste le code html brut.
Mais là encore, c'est la version zéro,
donc une étape vers quelque chose de plus intéressant,
mais remarque que j'ai codé en dur CS50 comme le titre, CS50 dans le h1,
et maintenant j'ai l' conférences lien,
maintenant, j'ai le lien de programme.
Tout droit, de sorte que ne semble tout ce déraisonnable
jusqu'à ce que vous suivez un lien comme conférences, et vous vous rendez compte
que tous les droits, c'est différent contenu, mais c'est le genre
de la même chose; c'est un titre de la page et liste non ordonnée.
Je clique semaine zéro de l'année dernière, et c'est le genre
de la même chose, un h1 tag et une liste non ordonnée
et puis finalement je clique , et je reçois une certaine feuille,
qui est des diapositives à partir d' cette conférence particulier.
Donc, quelque chose me dit Je suis sur le point de grincer des dents.
Si j'ouvre conférences point php avis
que c'est à peu près la copie et coller à partir du fichier précédent;
J'ai juste changé le titre de h1, et ce que ces liens sont.
Pire encore, si je vais en semaine zéro point php,
c'est le même travail copier coller
avec un peu de contenu tordu.
Donc, il ya sûrement une possibilité ici d'améliorer,
et sûrement ce doit être une bonne règle de base;
lorsque vous vous sentez vous la copie
et coller quelque chose plus peut-être une,
drapeaux rouges devraient nous espérons commencer à s'éteindre.
Mais comment allons-nous d'améliorer cela?
Eh bien, il ya quelques façons, et les techniques que vous pouvez utiliser
en php ont évolué au fil temps, mais nous allons essayer celui-ci.
Laissez-moi aller dans la version un, Ainsi, la prochaine itération de cette,
et je vais essayer de nettoyer un peu.
À droite, un de php de mécanismes les plus simples
pour résoudre ce problème est l' vieille école nécessite la fonction,
qui fait à peu près une copie et coller du contenu
de certains fichiers ici, comme c est forte inclure,
et d'autres langues ont constructions très similaires.
Ainsi, il semble un peu étrange maintenant,
ce n'est certainement pas un compléter consultant la page Web,
mais sans doute ce qui est l'intérieur de tête point php.
Toutes les autres choses, à droite, la balise html, la balise de la tête,
la balise de titre, tous les trucs qui était au-dessus de l'essence principale
de la page, ce qui est sans doute juste la liste non ordonnée,
et dans le pied de page est probablement comme la balise body fermé,
la balise html fermé; assez inintéressante
mais des choses redondantes.
Très bien, et vous suffisant si je vais
en tête dot php c'est juste nature du fragment d'orphelin
par le haut, et si je aller en bas de page php dot,
c'est la orphelin fragment à partir du fond,
et je suis en utilisant les mêmes fragments dans mes autres fichiers,
comme des conférences parsèment php.
Très bien, alors quoi de mieux à ceci vous dire?
Ouais?
>> Simplicité.
>> Simplicité?
Je ne sais pas ce genre de regards beaucoup plus effrayant pour moi maintenant, non?
>> Si je voulais changer votre tête, vous n'auriez pas
à changer dans tous les précédente comme les fichiers.
Vous venez de le changer dans votre tête.
>> Exactement, alors peut-être en ce sens, il est plus simple,
je serais peut l'encadrer comme il est juste que c'est plus facile à mettre à jour.
C'est peut-être un peu plus propre
parce que vous mettez à jour dans un seul endroit.
Donc c'est assez convaincante; ce qui est un inconvénient
de cette approche ou ce qui reste problème
que nous n'avons pas vraiment résolu?
Ouais?
[Off Mic commentaire]
Oui, exactement, je veux dire, je suis encore copier-coller;
c'est un peu moins, mais je ne tiré vers le haut deux de ces dossiers,
et ils ont pas mal encore regardé identique.
Il y avait un besoin à l' haut, un besoin au fond,
et un non ordonnée liste dans le milieu
qui lui-même était encore la même structure.
De plus, remarquez, si je voir effectivement cet exemple,
laissez-moi aller à la version One maintenant,
et remarque que j'ai CS50 Conférence Syllabus.
Uh oh, Semaine zéro CS50 Semaine Un et CS50, Mercredi, Vendredi,
J'ai sorte de coupé un coin.
Ce qui était - ce qui était ces titres auparavant?
[Off Mic commentaire]
Ils étaient comme des conférences dans Semaine zéro, comme si c'était genre
de plus sexy, et elle a effectivement eu un certain dynamisme à elle,
et c'est un peu - je suis juste un peu de barque maintenant
et juste en supposant que tout le site est CS50
et bien ça marche, mais c'est certainement pas aussi élégant
ou comme une sorte de droit transmettre que par le passé,
mais cela fait sens, parce si vous regardez à l'index point php
et conférences ponctuent php et la semaine zéro point php,
ils sont tous compris le même fichier,
comment pouvons-nous améliorer?
Quelle est la prochaine itération de ce code va probablement faire?
[Off Mic commentaire]
Oui, exactement, si - et permettez-moi de résumer
avec nous voulons essentiellement de paramétrer cet en-tête
de sorte que oui, il ya toujours un balise h1 codé en dur, mais la substance
entre les deux, l'ouvert et la balise de fermeture,
est probablement dynamique, et venant de quelque chose d'autre.
Peut-être que la "obtenir chaîne» ou la chose après le point d'interrogation
dans l'URL sont quelque part autre, nous allons donc jeter un coup d'oeil.
Donc, si je vais dans la version deux,
Maintenant, remarquez que je n'ai obtenu un fichier supplémentaire,
il ressemble aides parsèment php.
Je ne sais pas vraiment où commencer, donc je vais commencer juste
à l'index comme comme toujours, et maintenant remarquez c'est un peu différent,
donc j'ai besoin d'une ligne
au sommet exigeant aides parsèment php,
mais je peux l'appeler ce que je veux,
mais remarquez maintenant la troisième ligne il ya un appel de fonction
à rendre en-tête, qui est intéressante que dans la mesure
que ce qui est passé dans apparemment, le titre personnalisé
pour cette page particulière.
Pendant ce temps, il ya rendu footer en bas,
et je n'ai pas besoin de paramétrage il c'est juste
un pied de page, mais maintenant il semble
être une étape vers une meilleure solution, rendez-tête prend,
et qu'est-ce que la place parenthèses indiquent pour ceux
qui n'ont pas vu php jamais ou à un moment?
[Off Mic commentaire]
Ouais, c'est un tableau.
C'est un tableau associatif ou une table de hachage qui associe les touches
avec des valeurs; c'est comme Java Scripts, notation d'opposition,
ou d'autres langues, syntaxs similaires.
Très bien, alors ce qui est en aides dot php?
Dans aides parsèment php c'est juste un couple de fonctions,
rendre en-tête et pied de page rendre.
Ainsi, un couple de détails si moins familiers,
donc tout d'abord le fait
cet en-tête de rendu prend une argument data c'est apparemment
attribué à vide tableau, il veut dire quoi?
Qu'est-ce que cela signifie de faire des égaux parenthèse ouverte support fermé
en tant que paramètre dans php?
C'est la valeur par défaut.
Donc, si je ne passe pas dans le tableau ou moindre argument
à l'en-tête ou rendre la rendre la fonction de pied de page,
Je peux au moins la confiance que le auteur de ces fonctions
que les données fera que très peu être un tableau vide;
il ne sera pas indéfini ou faux, ou quelque chose comme ça,
il sera exactement ce que Je lui ai donné comme un défaut.
Maintenant, c'est un peu une sorte de un moyen hackers de symboles de chargement
dans votre espace de nom pour ainsi dire,
mais il fonctionne assez bien à cette fin
de mettre en œuvre notre propre sorte de Le moteur de gabarits de l'homme pauvre.
Très bien, il ya beaucoup de outils là pour Python Ruby
php et qui vous donnent capacités de création de modèles
et c'est exactement ce que nous voulons.
Nous voulons un modèle qui a une tag ouvert h1, un h1 fermé tag,
et une sorte de lieu support dans le milieu,
et nous voulons remplir les lieu titulaires par voie de cette fonction,
si cette fonction extrait se trouve juste
pour vous donner la suite capacités.
Si vous avez une associatif de tableau de paires clé-valeur
foo est égal bar, extrait va créer une variable locale
appelé signe efficace dollar foo et lui donner une valeur de bar
il explose votre associative tableau de paires clé-valeur
dans de nouvelles variables avec les valeurs correspondantes.
Et puis exiger tête dot php point est le même que précédemment,
donc ce que nous allons probablement à voir à l'intérieur de tête point php?
Il a probablement eu que balise h1 et la balise de fermeture; ce qui se passe
être à l'intérieur de celui-ci probablement entre elle?
[Off Mic commentaire]
Exactement, il ya probablement une certaine mention de signe dollar titre
et bien sûr si je zoome sur ce qu'il ya ma balise de titre,
il ya ma balise h1, et à l'intérieur il est d'une insertion dynamique
de signe dollar titre, mais pour faire bonne mesure,
Je fais cela html spéciale charger atrocement nommé
fonction, mais il est utile; que fait-il
ou qu'est-ce que la protection contre?
Il s'agit en fait d'une solution à une menace que vous faites allusion;
vous nous avez permis.
[Off Mic commentaire]
Exactement, donc si un malveillant utilisateur ou une victime sans méfiance
d'une attaque de phishing cliqué sur un lien
que l'auto avait un point d'interrogation et quelque chose comme foo est égal,
puis la valeur de foo était en fait
comme support ouvert écriture, support fermé,
et puis un peu de code JavaScript;
si vous n'avez pas appelé ce longue fonction principale,
vous fait infectent html brut dans votre page Web,
le résultat de ce qui est que vous pourriez être trompé.
Vous pourriez être dupez l'utilisateur dans l'exécution de code JavaScript
qu'il ou elle a fait pas vraiment l'intention.
Et même si en général vous ne vous blesser,
comme vous seul connaissez une imbécile va taper
dans le script de support ouvert, support fermé, et dire alerte
ou quelque chose comme ça et lui-même faire
avec certains résultats étranges, si vous ne vous séduise
en cliquant sur un lien qui a JavaScript cru noyé dans la masse
que la valeur de cet attribut,
vous pouvez entre autres voler les cookies de quelqu'un
parce qu'il ya une propriété document dit point biscuit
en JavaScript qui vous permet de saisir cookie de session de l'utilisateur,
et si vous vous rappelez ce qu'est un le détournement de session attaque est,
Bref, c'est une façon de tromper quelqu'un fait
en vous donnant que virtuelle Timbre à main, puis en prenant
sur leur compte Facebook ou un autre type de compte.
Très bien, alors ce est un peu long,
mais c'est juste à l'aide code html brut.
C'est l'équivalent d'appeler écho
ou imprimer efficacement, et nous essentiellement l'insertion
que dynamiquement.
Alors, que reste plus ici?
Eh bien, laissez-moi aller dans Version trois ici,
et nous verrons un peu différent -
même disposition de fichier exact mais avis
que cette fois nous allons généraliser l'en-tête et pied de page
comme modèles, si ce que je veux dire par là?
Quelle est la seule chose c'est différent ici?
Qu'est-ce qui a changé depuis la dernière version?
Subtil, mais c'est sans doute juste une meilleure conception propre.
Ouais?
[Off Mic commentaire]
Oui, il ya juste un fonction standard de rendu;
Je n'ai pas rends cas particulier header ou rendre pied de page,
tous deux si vous rappel des aides dot php,
nous sommes à peu près identique l'exception de leurs noms
et les modèles qu'ils comprenaient.
Pourquoi ne pas simplement paramétrer la fonction render
et prendre un argument, c'est le nom du modèle,
et un deuxième argument optionnel qui sont des paires de valeurs clés
que vous souhaitez brancher po
Donc, si je regarde maintenant aides parsèment avis de php
que je suis un peu amateur maintenant.
Je suis en train de vérifier le fait fichier existe et si oui aller de l'avant
et exiger; juste au cas où l'utilisateur accidentellement types
dans un nom de modèle faux vous ne veulent pas de jeter une erreur
dans le programme afin que nous puissions peu leur faire
favoriser ici.
Très bien, mais pouvons-nous prendre un peu plus loin?
Dans cette version ici Notez les points suivants.
Je viens de tapé ls, et Ce qui saute immédiatement
Out est quelque peu différente.
Donc, il ya deux répertoires, droite,
et c'est donc maintenant un pas vers ce sera finalement un plus
cadre approprié.
C'est une sorte de bâclé de me jeter à tous
de mon contenu à l'intérieur d'un répertoire accessible au public
qui, littéralement, est appelé publique.
Et même si, malheureusement, un grand nombre de cadres,
les plus âgés en particulier, et même des messages Internet,
Rêve hôte parmi eux, les forces vous mettez tous vos fichiers
dans l'équivalent d'un répertoire public même
si vos fichiers pourraient inclure les mots de passe de base de données
et les noms d'utilisateur ou autres ces pouvoirs,
ce n'est pas du tout une bonne conception.
Beaucoup mieux est seulement mis
dans le répertoire public ce qui n'a absolument
être accessible à l'utilisateur, et tout le reste
que vous y compris comme aides parsèment php,
il n'ya aucune raison que ce devrait être accessible sur le Web via un
navigateur avec une url.
Il pourrait être totalement inoffensif si l'utilisateur veut voir peut-être
qui paires, mais c'est juste le principe de celle-ci,
et Dieu ne plaise, il ne fait avoir un nom ou mot de passe;
vous ne voulez pas l' utilisateur accidentellement
ou être volontairement mesure d'y accéder.
Donc, nous ne sommes pas tout à fait à un approche parfaite ici,
de remarquer ce qui suit maintenant.
Dans index point php, vous remarquerez que Je suis toujours exigeant des aides,
mais je le fais de manière que je suis une sorte d'organiser tous
des fichiers qui sera incluse
dans un sous-répertoire appelé comprend classiquement,
puis j'appelle rendre pour tête et le pied comme avant.
Donc la seule chose J'ai fait est une sorte
de réorganiser mes répertoires à être un peu plus anal
sur la structure de fichier.
Mais si nous passons maintenant à ce cinquième exemple,
remarquer ici que nous maintenant un trio de dossiers,
et il s'agit d'un bit trompeuse au moment
en raison de la simplicité pour le bien de la classe,
Je viens jeté tout
dans John Harvard Répertoire public juste
afin que nous puissions naviguer via un navigateur, mais attention -
ignorer cette partie pour un instant,
le fait que je suis là.
Notez que j'ai trois sous-répertoires: public,
modèles, et comprend.
L'idée est maintenant que dans un correctement configuré serveur web je
dirait Apache que cette site accessible au public
fichiers ici, et nulle part ailleurs.
Donc ce fichier pensez-vous Je vais voir à l'intérieur
de public si je tape ls?
Qu'est-ce que c'est au moins un fichier c'est sans doute là-dedans?
[Off Mic commentaire]
Bon point index php, et ce fichier n'est évidemment pas
là parmi d'autres?
Comme aides parsèment php, tête point php, php footer point;
tous les fragments, toutes les fonctionnalités
qui n'a pas vraiment besoin être accessibles au public,
il doit être utilisable par les fichiers
qui sont accessibles au public, mais eux-mêmes,
sans besoin de voir ou cahier une URL aides dot php.
Notez que la place si je vais
en comprend, il ya aides parsèment php,
et si je vais dans les modèles,
il ya le pied et header point php.
Franchement, j'aurais pu mettre dans le même répertoire,
mais j'essaie d'être encore plus anal sur la tenue des dossiers
qui sont en quelque sorte des modèles statiques différente
à partir de fichiers fonctionnels comme aides parsèment php,
et je suis juste en adhérant à certains conventions assez communs
appelant les répertoires comprend et modèles.
Donc, la seule chose qui changé alors c'est à nouveau le chemin.
Si nous montons ici remarquer que je dois maintenant juste
d'inclure un répertoire relatif,
dot dot slash comprend aides parsèment php,
ou je peux être un peu plus bon et effectivement faire quelque chose
comme ça, php et beaucoup
de langues ont ces symboles spéciaux
qui représentent la le répertoire de fichier actuel,
afin de souligner soulignement dir souligner soulignement représente
n'importe quel répertoire est de ce fichier,
et si vous venez de concaténer avec l'opérateur point, que,
qui permettrait d'atteindre le même résultat,
et a tendance à être un peu plus robuste parce que vous pouvez obtenir
dans des situations avec rapport répertoires ont été juste disent point
ou dot dot peut effectivement vous apportez à la mauvaise place,
si cela tend à être un peu plus robuste.
Très bien, alors ce même s'il reste?
Que faites-vous encore ne pas aimer à ce sujet?
Qu'est-ce qui pourrait être amélioré et vous commenté plus tôt je pense
qu'il ya encore des questions?
[Off Mic commentaire]
Droite, sûrement, nous n'avons pas pour commencer à écrire comme les sites
qui ressemblent à cela, non?
Cela ne se sentent pas tout ce que beaucoup mieux,
il ya encore de copier-coller.
J'ai encore la exiger ligne en haut.
J'ai encore rendu tête rendre footer.
Il ya beaucoup de duplication.
Ouais?
[Off Mic commentaire]
Oui, exactement, donc nous avons pris un étape vers sorte de division
le "c" de la "v", afin MVC est Model View Controller;
contrôleur est en quelque sorte le cerveaux de l'application.
Modèle tendance à être les données ou certaines fonctionnalités en commun,
et vue tend à être le esthétique, le modèle,
donc nous avons fait un pas vers séparer le "c" de la "v"
parce que nous avons maintenant au moins Le répertoire de ce modèle,
mais même là, nous avons essentiellement avoir un contrôleur par fichier.
Il ne ressemble pas il ya beaucoup de logique qui se passe ici,
mais index point php est un contrôleur efficace.
Lorsque vous visitez un URL et se terminant dans l'index point php,
l'ensemble de la logique qui met en œuvre cette page est bonne
l'indice point php, et même pour des conférences dot php.
La même semaine pour zéro point php.
Donc, nous avons sorte de STRONE notre logique partout,
et il se sent comme cela ne va pas
à l'échelle très bien une fois que nous n'ont pas quatre mais une quarantaine de pages
si chaque page commence par moi la copie d'une ancienne version
du fichier et juste peaufiner certains
du contenu à l'intérieur de celui-ci.
Donc, nous avons seulement pris une étape vers cela,
et l'un des outils nous allons présenter
le mercredi est un encadreur appelé "Laravel"
et cela est très cadre de php populaire,
d'autres comprennent "Fuelphp."
Il ya un un plus appelé "CodeIgniter."
Il ya un appelé «gâteau».
Il ya un appelé «Symphonie».
Je veux dire si vous Google frameworks PHP,
il ya une atroce nombre de cadres comme
que les gens que mis en œuvre.
Laravel est l'un des plus et venus;
c'est l'un des plus propres ceux, et vous trouverez
qu'en fin de compte elle aide vous faire économiser un peu
de temps même s'il n'existe un peu d'une courbe d'apprentissage,
mais que nous allons guider vous sur le mercredi.
En outre, nous introduisons ce qui est appelé un "ORM."
Dans ce cas, nous allons utiliser quelque chose qui vient
à ce cadre appelé Laravel.
C'est ce qu'on appelle «éloquent» et c'est juste une couche de Code
qui vous permet entre autres les choses parlent aux bases de données.
Et ici aussi, permettez-moi de voler une exemple récent qui est soit
ou un retour de certains d'entre vous à partir de 50.
Si vous avez pris 50, et vous l'avez fait "CS50 Finances,"
vous souvenez peut-être que les fichiers vous écrivez ou réécrit que regarder
comme ça, ce n'était connexion php dot, et à ce moment,
d'autant plus que nous ne pas passer beaucoup de temps
sur les fondamentaux de PHP dès le début,
cela pourrait se faire été assez difficile,
et nous avons, en fait, essayer de simplifier la conception.
Nous n'avons pas vraiment séparer "M" de "V" de "C" tant que ça
pour les problèmes que "Seven CS50 Finances,"
mais remarquez la seule chose qui devrait, espérons commencer
de vous frotter le mauvais bientôt Ainsi, quelque chose comme ça.
Je veux dire, pas seulement ce identifier php point un contrôleur.
Il parlait aussi directement
d'une base de données spécifique suite à l'aide, ce qui ne va pas
à l'échelle très bien quand vous commencez à travailler avec un
ou deux ou trois partenaires.
Par exemple, si l'un des les partenaires est responsable
pour la création de votre tables de base de données et à venir
avec vos index et à trouver
ce qui la touche devrait être, la les clés primaires, clés étrangères,
et tout cela, décider de les noms de table et tout cela.
Maintenant, vous l'autre personne en le groupe a besoin de tout savoir
des décisions de conception, il ou elle a fait, et vous devez maintenant
de coder en dur ces décisions dans votre fichier, et maintenant, il
ou elle est jolie beaucoup contrainte
de ne jamais changer de nouveau les noms de table.
Plus jamais de changer ces noms déposés
sans vous en informer.
En outre, vous ne pouvez pas vraiment de travailler facilement sur le même fichier
sans entrer en collision unes avec les autres s'il
ou elle est constamment changer les noms,
et vous avez l'ancienne versions et ainsi de suite,
si c'est juste invite beaucoup, beaucoup de maux de tête.
En outre, comme nous allons voir avant longtemps,
même si vous n'avez pas besoin
faire particulier les requêtes élaborées ici,
une fois que vous commencez à avoir des multiples tables, deux tables, trois, cinq,
dix tables dans une MySql ou généralement une base de données relationnelle,
vous devez joindre les tables souvent si familier, et vous avez
de combiner les données de l'une avec l'autre,
et franchement vos questions sequel commencer à obtenir plus, et plus,
et plus, et plus complexe, et il commence juste
d'obtenir beaucoup plus facile de faire des erreurs
et beaucoup plus difficile à bien faire les choses.
Et donc des outils comme Eloquent et ORM va
pour nous aider à modéliser des données et il va aussi efficace
pour générer le code qui nous besoin pour commencer l'interrogation des bases de données
dans des moyens plus sophistiqués.
Donc, si vous avez une clé primaire ici et une clé étrangère
ici, tout ce que vous avez besoin à faire est d'enseigner que ORM,
Objet Relation Mapper, ce qui est relation
et il comprendre ce que requêtes à exécuter pour vous.
Et seulement dans de rares cas avez-vous besoin
pour écrire nécessairement Code de suite vous.
Si vous voulez vraiment quelque chose de peaufiner,
mais la plupart du temps, vous pouvez juste commencer à traiter les entités
dans vos bases de données comme vrai objets et non pas ces lignes plates
que vous avez besoin d'une certaine manière à reconstruire et de normaliser.