[Seminar] [Kohana: Ein Leichtgewicht PHP Framework] [Brandon Liu] [Harvard University] [Dies ist CS50.] [CS50.TV] Hallo allerseits. Mein Name ist Brandon. Ich bin hier in der Junior-College Informatik, und heute werden wir, darüber zu sprechen Kohana, die ein PHP-Web-Entwicklungs-Framework ist. Heute wird ein Live-Codierung Seminar sein, so bin ich im Grunde geht auf 5-10 Minuten Zeit zu erklären, was Kohana ist, und dann bin ich buchstäblich werde ein super einfaches Blog bauen für Sie gleich hier buchstäblich von Grund auf. Wir werden den Code aus dem Kohana Website herunterladen, und wir werden beginnen, eine Blog, und hoffentlich ist das dann sehr aufschlussreich sein, vielleicht, weil Sie vielleicht sehen, werde ich einige Fehler machen, und Sie werden sehen, mich von ihnen zu erholen, oder du wirst mein Gedankengang zu sehen, wie baue ich durch diesen Blog, und in der Zwischenzeit, dann erhalten Sie auch mit dem Framework selbst vertraut. Hoffentlich wird es ein sehr lehr Übung sein. Erstens, was genau ist ein Framework? Wenn du genommen hast CS50 so weit, du nicht wirklich mit jedem gearbeitet haben Rahmenbedingungen noch nicht, und die Sache ist diese. Sie haben wahrscheinlich ein Web-Entwicklung getan pset bereits, und sagen wir, Sie auch weiterhin um Websites zu bauen und halten den Aufbau von Webseiten. Sie beginnen, ein paar Dinge zu bemerken. Das erste, was Sie bemerken ist, dass Sie wahrscheinlich die gleichen Dinge tun immer wieder die ganze Zeit, Dinge wie Reinigungsbenutzereingabedaten, Dinge wie die Organisation Ihrer Dateien in einer bestimmten Weise. Die andere Sache, die Sie wahrscheinlich auch auffällt, ist, dass der Code kann beginnen, sehr, sehr chaotisch, und Sie können es zu verlassen chaotisch und nur noch eine sehr harte Zeit Aufrechterhaltung es, oder Sie können beginnen, Ihren Code zu strukturieren und es modular in gewisser Weise es besser verwaltbar zu machen. Dies ist, wo Web-Frameworks im Grunde kam herein Diese Leute, die eine Vielzahl von Websites gebaut hatte, sagten sie, "Wir brauchen nicht diese wiederholen jedes einzelne Mal, wenn wir eine Website zu bauen." "Warum gehen wir nicht einfach ein Paket, das alle diese Dinge für Sie macht jedes einzelne Mal, wenn Sie wollen, eine Website zu bauen? " Und so, dass, wenn Sie eine neue Website zu machen, Sie nur darauf konzentrieren, was genau diese besondere Website geht. Sie brauchen nicht, um alle verschiedenen Konfigurations wiederholen und die Trennung von Codes und Code neu zu schreiben Sie haben oft zu tun, wenn Sie die Erstellung von Webseiten sind. Die Idee ist, dass ein Rahmen können Sie einen übergeordneten Code schreiben ohne sich um untergeordnete Details kümmern. Ein niedrigerer Ebene Detail könnte so etwas wie sein Umgang mit Reinigungsbenutzereingabedaten. Das ist etwas, dass Sie nicht wirklich brauchen, zu kümmern. Sie sollten auf das, was Ihre Web-Allokation ist tatsächlich etwa zu konzentrieren. Es beseitigt eine Menge Standardcode. Es ist eine Architektur für Ihr Projekt. Die beliebteste man Model-View-Controller sein die werde ich über in einem zweiten, zu sprechen. Und viele Male diese Rahmenbedingungen verkörpern eine Reihe von Verfahren, Regeln und Best Practices für Sie zu nutzen so dass, wenn Sie das Web-Framework übernehmen müssen Sie Ihren Code in einer bestimmten Art und Weise zu schreiben, und es ist in der Regel eine Reihe von Grundsätzen, nach vereinbarten von der Gemeinde, die allgemein akzeptiert wird, zu sein eine gute Möglichkeit, das Schreiben von Code. Es macht den Code wartbar mehr nutzbar, so weiter und so fort. Und schließlich ist das, was ich möchte über Rahmenbedingungen betonen gegenüber Bibliotheken ist diese Idee über Inversion of Control, und die Sache ist diese. Der Unterschied zwischen einer Bibliothek und einem Rahmen ist, dass mit einer Bibliothek Sie schreibt immer noch das Hauptprogramm, und du bist Art von Aufrufen der Bibliothek und der Aufforderung an die Bibliothek, um etwas für Sie zu tun. Der Unterschied zwischen einer Bibliothek und einer Rahmen ist, dass der Rahmen beginnt mit der Steuerung, und es Ihren Code aufruft, so dass Sie es als denken können - das ist, warum es heißt ein Rahmen - das Framework diesen Rahmen und Struktur für den Code, und Sie in die Löcher zu füllen, und dies wird sich in einem zweiten deutlicher wenn Sie sehen mich beginnen, um Code im Kontext des Rahmen schreiben. Du wirst sehen, dass ich in die Lücken füllt, und der Rahmen Art von Steuerung aller beweglichen Teile, und ich habe die Stücke an den richtigen Stellen setzen. Heute werden wir über Kohana zu sprechen, Das ist eine von vielen PHP-Frameworks. Es gibt Web-Frameworks, und es gibt diejenigen, in praktisch jeder einzelnen Sprache, und ich bin Kommissionierung Kohana weil Kohana ist wohl und in der Regel als die einfachste PHP-Framework zu holen anerkannt. Es ist das leicht. Es gibt andere, die da draußen, die mit vielen, vielen mehr Features kommen, aber sie sind eher schwer zu holen. Und schließlich nutzt Kohana das MVC-Architektur. Es ist leicht genug, dass wir buchstäblich ein Projekt erstellen hier direkt vor deinen Augen, und man kann ziemlich viel folgen ziemlich leicht. Was ist der MVC-Architektur? Es steht für Model-View-Controller und vielleicht, wenn Sie über den Code denken, Sie haben bisher schriftlich für einige Ihrer Web-Entwicklung psets Sie kann in der Lage, einige davon zu sehen sein, aber in der Regel, wenn Sie mit dem Schreiben beginnen eine komplexe Web-Anwendung, die Teilung zwischen den Segmenten 3 wird mehr und mehr offensichtlich. Ich legte hier das MVC-Art als Stapel, und oft werden Sie hören die Menschen über Stapel sprechen in Web-Entwicklung, und dies ist die Idee verdeutlichen, dass jede Schicht, jedes Bauteil wirklich versucht, nur zu kommunizieren zwischen zwei anderen Komponenten. Jemand greift auf Ihre Website als Client oder einem Browser. Sie interagieren mit Ihrem Programm über die Sicht-Code. Die Aussicht Code interagiert mit dem Controller. Der Controller mit dem Modell, und das Modell interagiert mit der SQL-Datenbank. Und es gibt keine Hopping zwischen, wenn Sie Ihren Code richtig schreiben. Was haben diese Dinge zu tun? Das Modell ist im Wesentlichen das Stück Code, mit Ihren Daten befasst. Alles, was mit der Datenbank beschäftigt, mit den Objekten, die Sie speichern, oder Abrufen dieser Objekte in der Datenbank, das ist alles durch das Modell abgewickelt. Vielleicht haben Sie Objekte in der Datenbank. Wir werden ein Modell mit, um mit zu tun Beiträge zu erstellen, so ein Post kann einige Attribute, die es haben. Sie können Funktionen rund um die Speicherung dieser Beiträge oder Abrufen Beiträge haben oder Filtern der Beiträge und so weiter und so fort, und das ist alles, der Code, der durch das Modell behandelt ist. Der Controller ist eine Art der Anwendungslogik, und eine Menge verschiedener Dinge können in der Anwendungslogik zu gehen. Wenn Sie zu einer anderen API sprechen, das sein kann, wo man mit der Anwendungslogik zu tun. Wenn Sie versuchen, Daten aus mehreren verschiedenen Modellen bringen zu haben sind und müssen sie in irgendeiner Weise zu kombinieren, dass häufig durch die Steuereinrichtung verarbeitet werden. Zum Beispiel auf Facebook, wenn Sie Freund jemand, dann vielleicht, dass Akt der Gründung diese Beziehung kann durch die Steuerung erfolgen. Und schließlich, ist die Ansicht der Code, der Erzeugung ist, was Sie wirklich sehen. Eine Menge Zeit, ich denke, in den CS50 psets sie nicht wirklich ermutigen euch, diese drei Dinge zu trennen. Sie werden wahrscheinlich haben diese große, lange Datei, in der an der Spitze Sie einige SQL-Abfrage machen und vielleicht tun einige Verarbeitungs auf die Daten aus der Datenbank abgerufen, und dann haben Sie alle Ihre HTML an der Unterseite. Und Sie können feststellen, dass Sie mehr und mehr Seiten zu erstellen dass Sie gehen, um etwas Code Wiederholung zu haben, und auch, die Sache ist, die Datei wird wirklich große und lange und unhandlich zu verwalten. Der Grund, warum MVC ist so gut angesehen ist für eine Reihe von Gründen. Das erste, was ist die so genannte Trennung von Bedenken welche die Idee, dass, wenn Sie haben, ist - idealerweise ein Stück Code sollte 1, was zu tun und es ist wirklich gut, und Sie sollten nicht Teile des Codes, unterschiedliche Dinge zu tun, zu kombinieren. Zum Beispiel sehen Code und Modellcode, sie haben nicht wirklich verwandt werden. Sie müssen nicht in den gleichen Dateien sein, damit Sie, wenn Sie möchten, trennen Sie sie so ist es leicht zu pflegen. Die andere Sache ist die Wiederverwendung von Code. Vielleicht finden Sie das Schreiben der gleichen SQL-Abfrage oder tun ähnliche Abfragen, die in 1-Funktion abstrahiert werden könnte, und das ist die Idee hinter Modelle und Controller , es in eine separate Funktion, die Sie in verschiedenen Orten in Ihrem Projekt wiederverwenden können. Und schließlich, das ist, um das Trocknen der Code gebunden, oder sich nicht wiederholen, Sie sich nicht zu wiederholen. Das ist sehr verständlich in der Entwicklung. Wann immer Sie können, Sie wollen nicht, sich zu wiederholen, denn wenn man sich zu wiederholen,  es ist viel teurer zu erhalten. Wenn Sie ein etwas ändern wollen, müssen Sie es überall zu ändern, und das führt zu Fehlern, und es ist schrecklich. Alles klar. Alle Fragen, die bisher über Kohana überhaupt? Große. Jetzt werden wir in den Live-Codierung Sitzung tauchen, und hoffentlich alles gut geht. Ich werde im Grunde bauen diese Website auf einem meiner Remote-Servern, und auf diese Weise ihr Jungs können auch finden Sie auf der Website und auf die Website zugreifen, und auch die Umwelt ist besser als meine konfigurierten Remote-Maschine, weil es läuft Linux anstelle von OS X. Wir gehen buchstäblich zu starten. KohanaFramework.org. Ich werde den Code von der Website herunterladen. Ich werde die Link-Adresse kopieren, gehen, um meine Server, laden Sie es, und ich werde sie zu extrahieren. [Student] Was ist die größte können Sie den Text zu machen? [Brandon Liu] Ist das besser? [Schüler] Ist das machbar? [Brandon Liu] Ja, das ist in Ordnung. Ich habe einen ZIP-Datei entpackt und dass in ein Verzeichnis namens Kohana, und wir werden diese CS50-Kohana umbenennen, und wir gehen in. Ehrfürchtig. Hier sehen Sie eine Reihe von verschiedenen Dateien. Die meisten können Sie ignorieren - We werden nicht gehen, um durch jede einzelne Datei, die in hier gehen wegen unserer Zeitgründen aber in der Regel, wenn Sie Kohana, das erste, was Sie tun, installieren Sie wird in das Verzeichnis, und Sie werden im Grunde tun einige Umgebungstests und so weiter um sicherzustellen, dass Ihre Umgebung richtig eingestellt zu Kohana laufen und stellen Sie sicher, dass alles in Ordnung ist. Sie können sehen, die meisten Dinge passiert, aber in der Regel immer in diese ein Problem stoßen wo er beklagt, dass einige Verzeichnis ist nicht beschreibbar, und das ist, weil einige Berechtigungen. Ich weiß nicht, wie viel Sie Jungs haben über die Dateiberechtigungen in CS50 gelernt, aber wenn Sie Web-Entwicklung zu tun, sind Sie werde in dieser Frage viel laufen. Ich werde es beschreibbar zu machen und ich denke, ich muss auch - da gehen wir. Okay, jetzt können Sie sehen, alles, was passiert, und jetzt wird es Ihnen sagen, die install.php Datei umzubenennen. Ich werde die install.php Datei zu bewegen, um installed.php, und jetzt, wenn ich zu aktualisieren, es gibt mir einige Fehler, und das ist, wo das Debugging kommt in. Dies ist, wo man sehen kann, was tatsächlich passieren wird. Die Sache ist, standardmäßig wird davon ausgegangen, dass Kohana Ihr Projekt ist das Stammverzeichnis Ihrer Domain, so dass es erwartet, dass Sie bei demo.brandonkliu.com sein. Wir müssen es sagen, dass es eigentlich in einem Unterordner. Es ist in einem Unterordner namens CS50 Kohana. Die Sache ist, es ist falsch interpretiert CS50-Kohana als etwas anderes, das werde ich Ihnen in einem zweiten zu erklären. Aber ich muss Ihnen sagen, dass ist etwas, was zu erwarten ist. Was wir tun werden, ist, wir werden in diesem Ordner namens bootstrap.php gehen, Das ist die Konfiguration ein Ordner, in dem viele verschiedene Dinge sind eingerichtet. Ich öffne das auf. Dann vielleicht eines der ersten Dinge, die ich tun werde, ist die Zeitzone ändern. Und dann wollen wir mal sehen. Aha! Genau hier. Es gibt eine Reihe von verschiedenen Konfigurations Sprüche hier, aber die, die ich bin auf der Suche nach ist dieses Ding namens Basis-URL, und standardmäßig ich es zu Kohana gesetzt, aber ich werde das auf CS50-Kohana zu ändern, und ich denke, das sollte es zu beheben. Ja, toll. Standardmäßig ist zu sehen, dass es funktioniert, heißt es, "Hallo Welt". Wo kommt das her? Wie sind wir zu Hallo Welt zu bekommen? Wo genau ist der Code, tatsächlich hat das geschrieben? Um das zu verstehen, werde ich dieses Konzept namens Routing einzuführen. So gut wie alle Web-Frameworks haben das Konzept namens Routing, die das Stück von der Software, die eine bestimmte URL-Karte wird, ist bis zu einem gewissen Stück Code in Ihrem Rahmen. Zum Beispiel, wenn Sie einige URL und Sie zu einem gewissen URL wie foo.com / Blog / alle gehen was der Rahmen tun wird dann - oder zumindest das, was Kohana tun wird - wird, es wird eine Klasse namens Controller Blog zu finden, und es geht um die Funktion benannte Aktion laufen alle. Ich weiß, ich bin über Klasse und Funktionen sprechen, und ich weiß, ihr Jungs haben nicht abgedeckt Klassen und Funktionen in noch CS50, aber für jetzt, Sie von Klassen als nur eine Gruppe von Funktionen denken kann, eine Möglichkeit der Gruppierung von Funktionen zusammen. Das ist wirklich alles, was Sie wissen müssen. Nun, wenn wir auf unsere Ordnerstruktur, innerhalb des Ordners gibt es eine weitere Ordner namens Klassen, und die anderen Ordner sind Steuerung und Modell genannt. Wenn Sie in das Controller-Ordner schauen, wir sehen, dass es eine Datei namens Willkommen, und die Sie hier sehen können, ist ein Controller-Klasse namens Willkommen, und es gibt eine Funktion, die aufgerufen Aktionsindex, und was es tut, ist es, den Körper Ihrer Antwort auf Hallo Welt setzt. Das ist, wo der Code geschrieben wird. Die andere Frage ist, gut, ich habe nicht zu gehen blah, blah, blah, / welcome / index. Wie bin ich hier gelandet? Nun, das ist einfach, weil hier an der Unterseite unserer Bootstrap-Datei wo wir unsere Routen Sie sehen, dass sie für Sie ein paar Standardwerte. Die Standard-Controller ist Willkommen. Die Standardaktion ist Index. Das ist, warum, wenn wir nichts drin ging es automatisch auf die Willkommen-Controller und der Index-Aktion. Alles Sinn so weit? Jetzt können Sie mehr als nur um Steuer gehen tun können und eine bestimmte Aktion. Sie können auch in den Parametern an die Steuerung übergeben. Nur als Beispiel, Ich werde eine andere Aktion an diesen Controller hinzufügen, um Ihnen zu zeigen. Nennen wir diese Aktion Echo, denn es wird Ihnen sagen, was Sie ihm geben, und so bin ich im Grunde geht zu greifen ein Parameter, der geht, um durch mich zu der Routing-Programm gesendet werden, und wie Sie hier sehen können, diese Linie hier, können Sie sehen, dass dies bedeutet im Grunde haben Sie Controller, und Sie haben einen / haben, und Sie haben Handlung, und Sie haben eine andere /, und das wird, um Parameter zu sein, und weil wir diesen Namen ID in spitzen Klammern, bedeutet das, dass wir die Benennung dieser Parameter ID. Später in meinem Controller-Code, wenn ich einen Einfluß dieser Parameter zu packen, Ich kann den Code schrieb ich verwenden, finden Sie die Parameter namens ID. Das ist, was ich hier tat, und ich werde zurückkehren und sagen, "Du hast gesagt," dass. Und jetzt, wenn ich Sie auf unserer Website, Ich gehe in cs50-kohana/welcome/echo/Helloooo-- oh, das ist richtig. Es ist ein Schritt, den ich ausgelassen. Dies ist Teil der Live-Codierung Idee. Hier ist ein Ding. Mal sehen. Also normalerweise standardmäßig mit einer Menge von diesen Web-Anwendungen Sie müssen diese Sache index.php in der URL enthalten, denn die Idee ist index.php ist eine Art Einstiegspunkt der Anwendung, aber natürlich, dass ist irgendwie ärgerlich, haben. Sie wollen nicht index.php in der URL zu haben scheinen, und so ziemlich jeder Web-Framework aus der Box hat diese index.php Problem, und so müssen Sie einige Maßnahmen, um der Lage, das zu entfernen, zu nehmen. Und so dass in diesem Fall, was wir zu tun ist, werden wir eine Datei namens. htaccess zu verwenden, und das ist etwas, das spezifisch für den Apache Web-Server ist, und es können Dinge wie Rewrite-URLs machen und Weiterleitungs-URLs und so weiter und so fort, und Kohana ist schön genug, um eine Vorlage. htaccess-Datei, die wir verwenden können. Wie Sie sehen können, gibt es eine Datei namens example.htaccess es, und wir werden, dass zu. htaccess kopieren. Ich werde diese zu öffnen und zu bearbeiten, und im Grunde ist es tut ein paar verschiedene Dinge. Der Schlüssel Linie möchten Sie vielleicht zu sehen ist hier richtig. Die Idee ist, dass dadurch eine Regel, die sagt, "Okay, was auch immer Sie eingeben, prepend index.php darauf." Sie können das sehen. Die. * Steht für alles, alles passen, und dann der zweite Teil ist index.php / $ 0, und $ 0 bezieht sich auch immer vorher abgestimmt wurde. Heißt das Sinn? Aber die wirklich wichtige Sache, die ich ändern will, ist dieses zu ändern Rewrite Basis, die URL der Basis ist. Es Art übernimmt, wo Sie gerade arbeiten. Ich werde CS50 Kohana hinzufügen, dass und auf diese Weise jetzt, wenn ich den index.php, es sollte funktionieren, und ich werde ein paar Zahlen zu addieren um Ihnen zu zeigen, dass es tatsächlich funktioniert hat. Klingt gut. Haben Sie Fragen so weit? [Schüler] Wie ist es zu wissen, die 123 zu machen? Ist das ein Argument? Genau. Sie können es wie ein Argument zu denken. Aber die seltsame Sache ist jedoch, dass der Weg Kohana tut es wird sie nicht tun, genau wie es ein Argument. Sie müssen es so zu greifen. Sie müssen das Request-Objekt zu greifen und fragen Sie nach dem Parameter mit dem Namen ID ist, und dieser Name ID, kommt aus dieser Bootstrap-Datei zeigte, dass ich früher, und der Name ID war in diesen spitzen Klammern, und das ist, wie Sie die Parameter greifen. Ehrfürchtig. Noch Fragen? Wie ich schon sagte, Controller, behandeln sie die Anwendungslogik, so das ist ein Beispiel, wo man sehen that - es ist sehr einfach, aber es ist immer noch die Anwendungslogik, die Idee, packte die Parameter und die Schaffung eines neuen String die sagt: "Du hast gesagt, blah" und dann spucken, dass an Sie zurück. Und in der Regel, was Sie tun, ist, dass Sie verschiedene Controller erstellen. Sie erstellen getrennte Regler für verschiedene Teile Ihrer Website. Heute werden wir eine sehr einfache Website zu machen, und es geht um ein sehr einfaches Blog. Wir werden einen neuen Controller nur für die Beiträge in einem Blog zu machen. Aber dann, wenn ich auch Kommentare zu den Blog-Post hinzuzufügen, dann würde ich wahrscheinlich wollen einen neuen Controller für die Anmerkungen machen. Wenn ich wollte, um Benutzer hinzuzufügen, würde ich wahrscheinlich einen neuen Controller für die Benutzer, und im allgemeinen, ist die Idee, dass, wenn Sie ein neues Modell haben, ein neues Datenobjekt, das Sie zu tun haben, Sie haben einen einzigen Controller dieses Datenobjekt. Heute sind wir nur gehen, um mit ein Datenobjekt arbeiten, und das wird sein, Beiträge, und auch Sie von Datenobjekten, wie die entsprechenden Tabellen denken können. Generell jede Tabelle entspricht 1 Typ des Datenobjekts, so die Post Tabelle 1 post Modell haben, haben wird, die ein Post Controller entspricht, dass und die gleichen Kommentare, die gleiche für die Benutzer, und so weiter und so fort. Und das ist eine Faustregel. Es gehen auf Sonderfälle, wo man kann sich von der unterscheiden können, aber 90% der Zeit, die ist, was wirst du tun, und ich werde Ihnen zeigen, das ist, was wir zu tun heute. 1 mehr Konzept, bevor wir wieder in den Code einzutauchen, diese Idee der objektrelationale Mapping. Jungs Sie haben bereits eine Web-Entwicklung pset getan, und haben Sie gesehen, dass Sie eine SQL-Abfrage zu machen, und was es für Sie gibt es Zeilen. Sie erhalten diese Zeilen, und Sie indizieren sie durch einige Namen, den Namen der Spalte und dem Tisch, und das ist, wie Sie mit ihm arbeiten, und es kann ein wenig umständlich. Aber darüber hinaus, wenn man die Beziehungen innerhalb der Datenbank, wie zum Beispiel, wenn ich Kommentare und Beiträge, dann vielleicht möchte ich die Eltern Post von einem Kommentar zu greifen. Wenn ich nur Zeilen in SQL, dann alles, was ich bekommen kann, ist die ID der Mutter Post und nicht die tatsächliche Beitrag selber. Aber wenn wir Codierung, was wir eigentlich wollen, ist tatsächlich greifen  die Eltern sich manchmal von selbst zu schreiben. Welche objektrelationale Mapping tut, ist es nimmt die Ergebnisse der Datenbankabfrage und legt sie in Objekte für Sie, das viel schöner, mit zu arbeiten als einfache Arrays und-Zeilen. Zum Beispiel jetzt, wenn ich einen Kommentar vielleicht und ich möchte an ihre Mutter Beitrag zu packen, und ich weiß vielleicht Kommentar Pfeil Post, dann wird es tatsächlich geben mir die Post-Objekt entsprechend der tatsächlichen Mutter Post, nicht nur einige ID, was ich sonst verwenden müssen und einen anderen SQL-Abfrage, um die Post zu packen, was umständlich und unnötig ist. Und ferner durch Abbilden alle diese Datenzeilen in Objekte, Sie können auch mehr Funktionen, um Objekte anzuhängen, so zum Beispiel, habe ich darüber gesprochen, wie Klassen sind im Wesentlichen Gruppierungen von Funktionen. Man kann sich das so denken. Zum Beispiel, vielleicht habe ich diesen Post Objekt, und vielleicht möchte ich eine Funktion auf, um sie angebracht haben dass im Grunde sagt mir wurde vor kurzem gepostet? War es geschrieben in der letzten Woche, wahr oder falsch? Und das ist eine Funktion, die ich kann, auf dieses Objekt zu befestigen, und es ist wirklich praktisch, um es an der gleichen Stelle zu haben, und es gibt eine Vielzahl von verschiedenen Funktionen, die Sie erstellen können für diese Objekte, und es ist wirklich schön zu können, um es in einer Klasse anschließen zu können, auf ein Objekt, während, wenn Sie gerade Zeilen aus der Datenbank, dann kann man nicht wirklich keine Funktionalität legen zu. Es ist buchstäblich nur Daten. Haben Sie Fragen zu, dass überhaupt? ORMs sind sehr häufig, Web-Entwicklung, und es gibt viele verschiedene Arten von ORMs, Kohana und hat seine eigene ORM. Es ist sehr einfach, aber Sie werden einen Vorgeschmack, wie es aussieht bekommen. Lassen Sie uns ein Vorbild für unsere Blog-Einträge, und das erste, was wir natürlich tun müssen, ist, um eine tatsächliche Tabelle erstellen in unserer Datenbank, um tatsächlich unsere Daten für die Beiträge zu speichern. Das erste, was ich zu tun ist, gehen Sie zu phpMyAdmin. Habt ihr verwendet phpMyAdmin vor? Okay, super, so euch bereits wissen, was das ist, und ich werde eine neue Tabelle namens Kohana Beiträge zu erstellen, und es wird wirklich einfach zu sein. Ich werde in. melden Sie sich wieder haben Alles, was wir heute tun ist einen Autor und einen Körper, nur halten sie einfach. Ich werde diese Tabelle zu erstellen, und jetzt müssen wir nur eine Tabelle, die unsere Beiträge mit 2 Felder für unser Autor und unser Körper. Die andere Sache, ich werde jetzt zu tun ist meine Web-Anwendung zu konfigurieren, damit sie weiß, wie man die Verbindung zur Datenbank, und dies wiederum ist etwas, das Sie mit allen Web-Anwendungen zu tun haben. Man muss es sagen, den Benutzernamen und das Passwort und der Name der Datenbank, und so weiter und so fort um herauszufinden, wie man tatsächlich auf Ihre Datenbank zu verbinden. In Kohana, haben wir so etwas wie eine Datenbankmodul, und in der Konfigurationsordner haben wir diesen Ordner Database, und wie Sie sehen können, gibt es eine Reihe von Einstellungen, die Sie hier eingestellt haben um es zu sagen, was den Benutzernamen und das Passwort für die Datenbank, so kann ich tatsächlich eine Verbindung zu ihm. Und da will ich nicht euch tatsächlich zu wissen, der Benutzername und das Passwort meiner Datenbank, Ich habe eine Datei, in der ich schon legen Sie sie alle, und ich werde zu kopieren und es ist vorbei. Ehrfürchtig. Okay. Ich denke, das ist alles, die Konfiguration, die ich tun müssen, aber mal sehen. Wir halten es in der Arbeit, und wenn etwas abstürzt, dann werden wir es beheben können. Nun, was ich zu tun ist, werde ich einen neuen Controller zu erstellen. Oder eigentlich, sorry. Zuerst muss ich ein neues Modell zu erstellen. Ich werde ein neues Modell namens Post.php zu erstellen, und was wir zu tun ist, werden wir es nennen Klasse Model_Post. Holen Sie sich einige Syntax-Hervorhebung auf, und so, wenn ich sage: "erstreckt ORM", das ist im Grunde einige weitere objektorientierte Programmierung, die leider euch nicht in CS50 noch nicht gelernt, aber es ist ziemlich leicht zu erlernen. Es gibt mir all diese zusätzliche Funktionalität, die in dieser ORM-Paket kommt, und so bekomme ich eine Reihe von zusätzlichen Funktionen und was nicht alles kostenlos, Sie finden das ein bisschen in einem zweiten zu sehen. Gerade jetzt eigentlich alles, was ich tun müssen, ist diese Klasse zu erstellen. Ich weiß gar nicht brauchen, um jede Funktion oder irgendetwas zu machen, aber ich habe eine Klasse, die die Tabelle darstellt erstellt, und weil ich diese ORM-Klasse erweitert, Ich bekomme einen Haufen Dinge kostenlos, so jetzt müssen Sie nicht haben, etwas mehr aufgebaut. Und jetzt, was ich zu tun ist, werde ich einen neuen Controller zu erstellen, das werde ich nennen blog.php, und ich werde über das Willkommen-Controller kopieren so dass ich nicht haben, um ein paar Sachen neu eingeben, und jetzt habe ich, dies zu benennen. Nun, was ich tun werde, um zu testen, um sicherzustellen, dass alles der Arbeit aus, Ich werde den ersten Beitrag aus meiner Datenbank zu packen und drucken Sie den Körper von der Post auf dem Bildschirm. Um das zu tun, was ich zuerst tun ist werde ich die Beiträge sparen auf eine Variable so, was wir zu tun ist - in Kohana, was Sie tun, ist, den Posten Objekt greifen es ist irgendwie umständlich, aber man muss dieses Ding namens ORM :: factory zu tun haben, und dann auf den Namen des gewünschten Modell übergeben, und es hat die ORM-Objekt, das das Modell repräsentiert zurück. Und dann, wie ich schon sagte, wenn wir die ORM-Objekt zu erweitern, wir alle diese Methoden für frei, so zum Beispiel bekommen wir diese neue Funktion namens "finden alle", die jeden einzelnen Beitrag in der Datenbank automatisch zurückkehrt, das ist ziemlich praktisch. Und jetzt in den Körper werde ich zurückkehren der erste Post-und Rück seinen Körper. Und natürlich muss ich einen Beitrag erstellen, also lasst uns einen neuen Beitrag einfügen. Ich werde sagen, "Brandon, mein erster Beitrag." Ehrfürchtig. Und jetzt werden wir auf Blogs gehen und wenn alles gut funktioniert - oh, das ist wieder eine andere Sache dumm Dateiberechtigung. Halten Sie auf 1 Sekunde. Es ist irgendwie absurd. Dort gehen wir. Okay. Ich reparierte diese Berechtigung Problem. Es wurde versucht, einige Dateien und einige Protokoll erstellen, und die Berechtigungen wieder wurden nicht richtig eingestellt, so dass ich es gemacht so waren diese Dateien schreibbar und ausführbar so ist es tatsächlich, die Dinge einloggen konnte. Jetzt ist es, mir eine weitere Ausnahme Sprichwort, "Klasse ORM nicht gefunden" und das ist, weil ich noch einen Schritt vergessen. Das ist schade. In der Bootstrap-Ordner-Datei gibt es diese Module hier die Sie wählen können, zu aktivieren oder zu deaktivieren. Diese sind eine Reihe von verschiedenen Funktionen, die Sie wählen, zu verwenden innerhalb Kohana, die Art schön. Beispielsweise ein Authentifizierungsmodul müssen sie der Sie zur Authentifizierung von Benutzern verwenden können. Sie haben eine Caching-Modul, wenn Sie implementieren möchten eine Art von Caching-Backend, um die Anwendung schneller arbeiten und so weiter zu machen. Wir müssen die Datenbank und die ORM-Modul zu aktivieren, denn wie ich schon sagte, sind wir mit Hilfe der Datenbank, natürlich, und wir müssen auch die ORM-Modul zu aktivieren, weil wir möchten, dass die zusätzliche Funktionalität, die schön zu haben, ist zu haben. Alles, was ich zu tun ist, kommentieren Sie diese 2 Zeilen und jetzt, wenn ich aktualisieren, es gab mir einen anderen Fehler. Es sagt, "Klasse Model_Post nicht gefunden." Nun, das ist ein gutes Problem zu haben. Mal sehen. Machen Sie es öffentlich. Nr. Halt. Oh, meine Liebe. Ich weiß nicht, warum es nicht in der Lage, das zu finden. Das ist wirklich seltsam. Ich habe diese Klasse hier richtig. Ich glaube, ich könnte zu haben - oh. Ich bin so dumm. Ich habe vergessen, eine PHP-Tag hinzuzufügen. Das ist, warum. Jetzt habe ich rückgängig zu machen, dass ein Änderung, die ich gerade getan. Ok. Dort gehen wir. Das war wirklich dumm. Ich hatte nicht eine Öffnung PHP-Tag. Aber wie Sie sehen können, jetzt ist es richtig funktioniert, oder? Wir haben 1 Post. Wir holten uns den ersten Beitrag, und jetzt ausgedruckt wir seinen Körper. Große. Fantastic. Haben Sie Fragen so weit? Nö? Haben Sie Fragen? Okay, so dass wir gerade erstellt die Post-Modell, sehr einfach, und wir werden einige Funktionen später hinzufügen. Wir können Validierungen und Filtern hinzufügen. Validierungen sind eines der Dinge dass Frameworks lösen für Sie wirklich, wirklich gut, und ich glaube nicht, dass euch diese für Ihre CS50 pset zu tun hatte, aber wenn Sie Web-Entwicklung für das endgültige Projekt zu tun, Sie wahrscheinlich werde eine Art von Validierung zu wollen, wie nicht mit leeren Benutzernamen, vielleicht mit ein Passwort mit mindestens etwas Länge, solche Dinge. Und es ist wirklich umständlich, diese Dinge von uns selbst zu implementieren, und so ziemlich jede einzelne Web-Framework bedeutet es für Sie und Sie können es in einem sehr saubere Art und Weise zu tun. Und das Modell ist, wo Sie in der Regel diese Validierungsregeln zu äußern, weil es die Validierung, ob ein Modell gültig ist oder nicht. Aber jetzt werden wir später zu setzen, bis, und jetzt werden wir auf einem anderen Teil zu arbeiten, und wir werden eine neue Sicht versuchen und machen dass alle Beiträge auflistet. Die bei der Herstellung einer neuen Aktion für die Auflistung alle Beiträge beteiligten Schritte ist es, eine Liste aller Beiträge greifen und dann machen die Liste aller Beiträge über eine Sicht. Genau hier, zum Glück genug, bereits alle Beiträge packte wir mit dieser ersten Zeile, die finden alle Funktion, und jetzt, was wir tun werden, ist so weit Ich habe direkt die Einstellung der Hauptteil der Antwort indem Sie die Zeichenfolge, aber jetzt möchte ich einen Blick zu verwenden, und die Differenz zwischen dem Ziel und gerade dabei ist mit einem Blick kann ich eine schöne, große HTML-Vorlage zu haben, und was ich tun kann, ist geben sie bestimmte Variablen und dann haben die Ansicht automatisch seine Vorlage bevöl Verwendung dieser Variablen. Was ich tun werde, ist, werde ich eine neue Ansicht erstellen, und ich werde die Ansicht, so etwas wie den Namen "blog / index" und ich werde grundsätzlich binden, das - oh, was soll ich schreiben? Mein Gehirn ist woanders. Ich werde die Beiträge variabel zu der Ansicht zu binden, so dass Art und Weise der Blick hat Zugang zu diesem Post variabel. Und so jetzt brauche ich, um diese Ansicht zu erstellen, so hier haben wir diese Ordner "Ansichten" und die erste, ich werde um einen neuen Ordner unter diesem namens "Blog". Das ist schön. So können wir einen schönen Hierarchie für unsere Ansichten haben. Und dann werde ich in eine andere Datei gibt namens "index.php". Ehrfürchtig. Eigentlich wollen wir beide hier. Einen View-Datei ist wahrscheinlich die einfachste Teil von all dem, und das sind wohl Dinge, die Sie mit vertraut sind. Wir werden etwas wirklich einfach zu tun, anfangen zu sagen: "Meine Liste der Blog-Posts." Dann können wir durch, und wir können durch die Beiträge Array durchlaufen, greifen jeden einzelnen Beitrag und etwas sagen wie - vielleicht eine Zeile und dann drucken Sie den Autor und den Körper. Das sinnvoll so weit? Und mal sehen, ob es funktioniert. Nichts ist passiert. Ich frage mich, warum. Oh, vermisste ich ein Schritt. Sehr dumm von mir. Ich habe einen Blick, aber ich habe nicht die Ansicht der Antwort gesetzt, so haben Sie ein mehr tun. Sie müssen "diese Antwort Körper" zu tun, und stellen Sie die Ansicht sein. Dort gehen wir. Wir haben unsere Position, und dann haben wir einen Beitrag, und nur zum Spaß, mal eine andere Stelle einfügen so können wir eine Liste zu sehen. Und legen Sie diese 2 Beiträge, und jetzt, wenn ich die Seite aktualisieren, wir sehen alle diese Beiträge hier. Heißt das Sinn machen, so weit? Ja, eine Frage? Oh, okay. Wie Sie sehen können, haben wir in der Lage gewesen, alle diese Codes trennen in verschiedene Abschnitte, und dann können Sie sehen, es ist den meisten klar, mit der Ansicht Code. Diese Datei hier, die die Ansicht vertritt, es kümmert sich nur um die Daten repräsentieren, die Anzeige von Daten. Es wird geleitet irgendeine Art von Daten, und alles was man tut, ist nur zeigen es Ihnen. In allen anderen Teilen des Codes, werden Sie nicht haben, um über all das nicht kümmern, und in ähnlicher Weise ist Ihre Ansicht Code nichts zu befürchten wie die Datenbank zuzugreifen und so weiter und so fort, das ist wirklich gut und macht den Code viel mehr wartbar. Wie ich schon sagte, Ansichten, sie sind dynamisch, es ist 1 Datei, aber es würde verschiedene Ansichten erzeugen auf der Basis der Variablen, die Sie tatsächlich in übergeben, und darüber hinaus gibt es eine Vielzahl von unterschiedlichen Hilfsfunktionen dass Sie verwenden können, um Ihnen helfen, Ihren Code schneller schreiben, denen ich Ihnen in nur einer Sekunde zu zeigen. Ja. [Student] Also $ 0 ist ein Controller, oder? Das zweite, was. Die Frage ist, wird $ 0 ein Controller? $ 0 ist eine Variable ich hier richtig erstellt. Ich habe zuerst eine Ansicht. I zugeordnet es bis zu einem gewissen variabel. Dann legte ich sie in dieser Funktion legen Sie es als den Körper der Antwort. Heißt das Sinn? [Schüler] Also ist Ansicht :: Fabrik, ist Blick wie eine Klasse oder eine Bibliothek [unverständlich] Factory-Funktion? Die Frage ist, über die Ansicht :: factory-Funktion, und im Grunde ist dies etwas mehr objektorientierten Programmierung im Wesentlichen. Ansicht ist die Ansicht Klasse, und es hat eine Methode namens "Fabrik" und das ist ein Weg, um das Objekt mit dem Namen ist zu packen "blog / index." Und das ist etwas mehr objektorientierten Programmierung Zeug dass ich nicht gehen, um hier zu viel zu gehen. Jetzt offensichtlich, wollen wir neue Stellen zu schaffen, aber wir wollen nicht, dass es durch eine Datenbank zu tun zu haben, so werden wir eine neue Aktion für die Schaffung einer neuen Beitrag zu erstellen, und es gibt eine Menge Sachen, die wir zu tun haben. Das erste, was wir tun werden - wir bekämpfen diese Dinge eins nach dem anderen. Das erste, was wir tun ist, wir müssen ein Formular erstellen zum Einfügen eines neuen Beitrag, aber ich werde auch eine neue Aktion erst hinzufügen, so das Hinzufügen einer neuen Aktion ist so einfach wie Hinzufügen einer neuen Funktion mit dem Controller, und jetzt werde ich etwas sehr Grundlegendes zu tun, nur greifen diese Ansicht und per Post, sondern es einfach für Sie. Und dann jetzt werde ich eine neue Sicht-Datei zu erstellen, und ich werde ein paar Sachen zu schreiben, um zu starten. Was ist schön zu Kohana ist, dass sie eine Menge von verschiedenen Hilfsfunktionen für Sie zu View-Code leichter zu schreiben, und 1 dieser Hilfsfunktionen oder Helfer-Module Schreiben ist um Formen. Zum Schreiben von Formen, weiß ich nicht wirklich, mich direkt schreiben keine HTML. Ihr habt HTML-Formulare geschrieben. Sie wissen, wie es wirklich sehr, sehr schmerzhaft und lästig, Formen zu schreiben. Es macht keinen Spaß, so zum Glück können wir im Grunde einen Formular mit der Kohana bilden Hilfsfunktionen, um es für uns zu tun. Wir werden grundsätzlich Felder für jede einzelne Sache, die wir haben, so dass man für die Autoren und eine für den Körper. Wir werden, um ein Etikett zu haben, und wir werden einen Eingang haben. Und dann endlich, wir werden eine Vorlage zu haben. Und wie Sie sehen können, ist dies viel sauberer zu schreiben als alles, was chaotisch HTML, die ganz nett ist. Zugegeben, es gibt auch andere Web-Frameworks, die es noch sauberer als die haben, aber das ist zumindest besser als das Schreiben von HTML selber. Awesome, so ist dies, was Sie sehen. Das ist irgendwie chaotisch, so werde ich einen Zeilenumbruch dort hinzufügen zu machen, dass uns ein wenig schöner. Nun, natürlich, es sieht immer noch sehr, sehr schlecht, aber wir sind nur konzentriert auf die Funktionalität für jetzt und nicht auf die Ästhetik. Keine Zeit, um alles zu tun. Und wie Sie sehen können, haben wir nun ein super Grundform Das ist ganz nett. Dieser Code würde ich sagen, ist sauberer als zu versuchen, eine HTML schreiben, bilden sich selbst, so das ist schön. Was kommt als nächstes? Jetzt müssen wir die Dinge mit der Aktion zu tun. Normalerweise, wenn Sie HTML-Formulare schreiben, man muss es sagen, wo es geht, um die Form zu übermitteln. Standardmäßig in den meisten Web-Frameworks, es legt auf die exakt gleiche URL, also die Sache ist, wenn Sie eine Anfrage senden, um get / blog / new, es sollte Ihnen das Formular anzuzeigen, aber wenn Sie einen Beitrag Anfrage senden / blog / new mit den Daten, sollte es tatsächlich versuchen, diesen Posten zu retten und etwas zu tun mit ihm. Was wir tun werden, ist im Grunde alles, was wir tun müssen, um zu überprüfen, ob es ein Post-Anforderung oder einen GET-Request haben ist zu prüfen, was sind die Postvariablen definiert werden. Und wenn die Post Variable gesetzt ist, dann werden wir versuchen, und erstellen einen neuen Beitrag. Auch hier haben wir nur das tun, und das schafft einen neuen Beitrag, und wir sind buchstäblich werde legen Sie die Felder wie dieses, und dann werden wir es retten. Und dann werde ich umleiten auf der Index-Seite, so dass sie unsere Liste der Beiträge wieder zu sehen. Lassen Sie uns versuchen, die. Ich werde sagen, "Brandon" und dann legt die Post, und wenn alles gut geht, wie Sie sehen können, umgeleitet, es mich in die Index-Seite, und wenn ich scrollen Sie nach unten, wir haben eine neu eingefügte Post. Yay! Ja, Frage. [Student] Was, wenn Sie genau dasselbe eingetreten war Sie zuvor eingegeben? Ist es zu überprüfen, um sicherzustellen, dass Sie nicht dupliziert haben die gleiche Vorlage? Seien Standard, nein, da standardmäßig - sorry, ist die Frage, ob Sie in der exakt gleichen Daten in das Formular eingeben und machen geltend, wird er Ihnen, einen doppelten Objekt einfügen, einen doppelten Eintrag Wesentlichen? Gerade jetzt, ja, wird er Ihnen, das zu tun, weil in Datenbanken, es ist durchaus möglich, komplett doppelte Zeilen haben, aber wenn das ein Problem ist, dann können Sie Validierungen hinzufügen, zum Beispiel, um sicherzustellen, dass, wenn dies genau das gleiche wie etwas, das bereits vorhanden ist, dann sagen, dass es ein ungültiges Objekt, und dann können Sie auch angeben, Ihre Fehlermeldung und sagen: "Ungültig, weil diese bereits vorhanden" oder so ähnlich. Aber in diesem Fall konnte ich einfach etwas schaffen Duplikat. Jetzt wollen wir versuchen, und fügen Sie einige Validierungen. Das Problem dabei ist, dass gerade jetzt Ich konnte buchstäblich senden Sie eine völlig leere Post. Ich kann jetzt auf diese Schaltfläche klicken, und wir gehen. Man kann nicht wirklich sehen, aber diese zusätzliche Zeile hier zeigt an, dass ich buchstäblich einen neuen Beitrag. Es hat nur eine leere Autor und eine leere Körper, und wir wollen nicht, damit die Menschen zu tun. Dies ist, wo die Validierung kommt in. Ich kann auf meine Model-Objekt zu gehen, und jetzt kann ich eine neue Funktion, die angibt, hinzufügen welche Validierungsregeln sollte ich auf dieses Modell hinzufügen um sicherzustellen, dass sie gültig ist oder angeben, was bedeutet es, ein gültiger Beitrag sein? Und ich möchte sagen, es ist nur eine gültige Post, wenn sowohl der Autor und Körper sind nicht leer ist, und das ist, wie Sie es in Kohana zu tun. Sie erstellen eine neue Funktion namens "Regeln" und dann kannst du im Grunde ein assoziatives Array zurück definiert, dass die Validierungsregeln für dieses Objekt. Wir werden das Array zurück, und dann, was wir tun werden, ist sagen, "Autor", es geht in ein Array, die an einem anderen Array namens geht "nicht leer ist." Und dann werde ich sagen: "Körper". Okay, und die Syntax für diese und die Struktur für diese kann ein wenig schwerfällig und ein wenig kompliziert aussehen. Wenn Sie die Dokumentation lesen, ist es ziemlich einfach, herauszufinden, Aber im Grunde ist es das, was Sie tun müssen, um festzulegen, müssen einige Validierungsregeln, und es gibt eine Menge von verschiedenen Regeln dass Kohana werden Sie kostenlos zu geben, wie Sie können Regeln hinzufügen, zu sagen, es muss mindestens diese Länge. Vielleicht hat es numerisch sein. Vielleicht hat es alpha numerisch sein. Vielleicht hat es diese Länge höchstens so weiter und so fort sein. Es gibt eine Menge von verschiedenen Regeln, die Kohana bietet für Sie, und Sie können auf die Webseite gehen, schauen Sie in die Dokumentation, und Sie können all die verschiedenen Dinge, die Sie tun können. Aber das ist alles, was ich zu tun habe, und jetzt sehen, was passiert, lassen wenn ich eine leere Post. Was wird passieren? Oh, nein, ich bekomme eine Fehlermeldung. Ich bekomme eine Validierung Ausnahme. Nun, es ist gut. Er erzählte mir, dass mein Modell ist ungültig, aber ich möchte nicht eine Ausnahme angezeigt meine Benutzer, wenn sie versuchen, etwas ungültig einreichen, oder? Ich will, dass sie eine Art von freundlicher Fehlermeldung zu geben, wenn etwas schief geht. Was wir tun werden ist, dass wir zu gehen wickeln alles in einen Try-Catch-Schleife. Eigentlich, denke ich, das ist auch etwas, das Sie noch nicht gelernt haben, in CS50, weil C, der Programmiersprache C, keine Ausnahmen, aber fast jeder anderen Sprache Ausnahmen hat, so wirklich, wirklich kurz, eine Ausnahme ist etwas, das ein Stück Code können eine Ausnahme, wenn etwas schief geht, aber dann vielleicht noch einige andere Stück Code höher kann diese Ausnahme abfangen und etwas zu tun mit ihm. Beispielsweise in diesem Fall, das Stück Code, der versucht, ein Modell zu retten ist, Es bestätigt das Modell, und wenn es sagt: "Okay, dieses Modell ist ungültig" es wird eine Ausnahme ausgelöst, und das ist eine Art entspricht in C Sie vielleicht eine -1 oder so etwas zurückzugeben. Und dann für mich, ist diese Funktion, meinen Code auf einer höheren Ebene, kann ich versuchen und fangen diese Ausnahme und im Grunde sagen: "Okay, wenn ich die Ausnahme abfangen, was soll ich tun?" Oder ich könnte wählen, nicht zu, dass die Ausnahme abfangen und lassen Sie jemand höher die Ausnahme abfangen, oder wenn niemand fängt, dann das ganze Programm stürzt und sagt: "Etwas ist schief gelaufen, und ich konnte damit nicht umgehen." Aber was wir tun, ist, dass Sie ein Stück Code in einem Try-Block ein, und dann können Sie auch einen so genannten Catch-Block hinzuzufügen, Das ist die Art von Code, die versuchen, zu fangen und Ausnahmen, die auftreten können. Und so, wenn ich fangen diese besondere Ausnahme oder Ungültig Ausnahme, dann, was ich tun werde, ist Ich werde die Fehler gesetzt - ich glaube, das ist, wie ich es tun - und ich werde die Fehler auf ein Objekt einzustellen. Und dann, was ich tun werde, ist, wenn es diese Ausnahme trifft, es wird nicht umgeleitet werden, und wenn es nicht umzuleiten, es wird aus dem Blog zu kommen, wenn und schlug dieses Blog / neu, die wollen, ist was ich tun möchte. Wenn es ein Fehler ist, dann will ich gehen zurück zum Formular und zeigen Sie diese Fehler. Nun, was ich tun möchte, ist möchte ich in dieser Fehler passieren zur Ansicht. Okay, ich glaube, ich habe die Ansicht, genau hier, und im Grunde möchte ich diese Fehler anzeigen, wenn sie vorhanden sind. Bevor ich schreiben die HTML für das, bin ich ganz schnell gehen zeigen, was die Struktur dieser Fehler variable aussieht, und das ist eine gute Praxis im Allgemeinen. Eine Menge Zeit, Sie etwas von einem gewissen Verfahren zurück, eine Funktion in der Web-Framework, und Sie nicht wissen, was die Variable aussieht, so dass Sie nicht wissen, wie man damit arbeitet. Ich werde einen Druck r Methode verwenden, um im Grunde ausdrucken. Und wie Sie sehen können, es sagt mir, es ist ein assoziatives Array, und Sie haben eine Taste, Autor, Punkte zu dieser Zeichenfolge Autor darf nicht leer sein, und eine andere Taste, Körper, Punkte auf einer anderen Zeichenfolge Körper darf nicht leer sein. Ich bin wie, okay, cool. Dann kann ich durch das Array durchlaufen und ausdrucken, jede einzelne Nachricht. Es ist im Grunde wie ein assoziatives Array mit einer Reihe von Nachrichten. Was ich zu tun ist, "wenn Fehler" und ich werde eine ungeordnete Liste zu erstellen, und ich bin dabei, um durch alle Fehler durchlaufen. Und dies, und jetzt werde ich versuchen, diese Vorlage wieder und mal sehen, was wir bekommen. Jetzt bekommen wir diese schöne Liste von Fehlern, und das ist immer noch ziemlich hässlich, aber das kann natürlich formatiert werden schön aussehen, aber die Grundidee ist nur in ein paar Zeilen Code, wir waren in der Lage, unser Modell zu validieren, stellen Sie sicher, dass bestimmte Felder nicht leer waren, und wenn etwas schief ging, dann wieder eine Art von Fehlermeldung Ich konnte dann präsentieren an den Benutzer zurück. Sie können auch Ihre Validierung anpassen so dass Sie tatsächlich eine Fehlermeldung das ist mehr, speziell auf Ihre Anwendung oder so ähnlich. Alle, die es in der Regel kundengerecht. Leider haben wir aus der Zeit laufen, so werde ich hier schneiden Sie die Live-Session-Codierung haben. Es gibt eine Reihe von anderen Funktionen, die ich will, um für Sie demonstrieren in diesem Beispiel. Zum Beispiel können Sie Vorlagen zu Ihrer Website hinzufügen, vielleicht gibt es eine Art von HTML-Code, den Sie anwenden möchten auf jeder einzelnen Seite in Ihrer Website, und anstelle von Einfügen, dass in jeder einzelnen View-Datei haben, die würde natürlich eine schlechte Praxis zu sein, Sie kann grundsätzlich definieren diese Vorlagen, und dann in Ihrem Controller sagen: "Okay, ich bin mit dieser Vorlage." "Habe alle meine Ansichten verwenden Sie diese Vorlage." Und der letzte, was ich möchte Ihnen zeigen, wie auch dass wir keine Zeit haben, ist für Cross-Site-Scripting, und im Grunde denke ich euch haben wahrscheinlich in CS50 gesehen - Ich denke, David Malan gesprochen wahrscheinlich darüber, wie Sie in der Regel spritzen JavaScript-Code in - haben Sie darüber gesprochen? Vielleicht? Vielleicht nicht? Aber viele Male Sie können böswillige JavaScript-Code zu injizieren in jemandes Datenbank, und wenn sie nicht entkommen, dass richtig, dann, wenn sie diese Daten zurück an den Benutzer zu präsentieren, dann kann es eine Art von Zufalls JavaScript Code, den Sie wollen nicht passieren, laufen, und ich wollte zeigen, wie Sie möchten, dass innerhalb von Kohana zu tun. Es ist eigentlich wirklich, wirklich einfach. Ich es jetzt in 2 Sekunden buchstäblich tun konnte. Alles, was Sie tun müssen, ist im Grunde nur diese Dinge in diesem Ding namens HTML-Entitäten. Und das wird automatisch alle Zeichen richtig zu entkommen und stellen Sie sicher, dass Sie dieses Problem nicht bekommen. [Schüler] Sie buchstabiert den ersten Test falsch. [Brandon Liu] Oh, hoppla. Okay, das ist alles, was ich hatte, mit Ihnen für heute zu teilen. Diese Folien gehen zu geschrieben werden, aber diese sind in der Regel die einzigen Ressourcen, sollten Sie wirklich brauchen, um mit Kohana loszulegen. Sie können auf die Website gehen. Sie haben eine Gebrauchsanweisung, und sie haben auch eine API Explorer. Wir können all die verschiedenen Funktionen und Hilfsfunktionen, die sie für Sie zu erkunden. Sie haben im Allgemeinen genug Informationen auf der Website die Sie verwenden können, um loszulegen und loslegen mit Kohana. Es gibt nicht so viele Tutorials, denke ich, für Kohana, außerhalb des was sie auf der Website haben hier, so ist dies wohl die beste Wahl. Aber wenn Sie mit dem Web-Framework gehen wollen und Sie wollen nicht zu holen, eine neue Sprache zu haben, und Sie etwas, das relativ leicht ist und eine einfache Lernkurve möchten, Ich würde definitiv empfehlen Kohana. Das ist wahrscheinlich das beste Angebot dafür. Die lustige Sache ist aber, wenn wir mit Ruby on Rails, wir konnten repliziert haben, was wir gerade getan und wahrscheinlich in unter 3 Minuten. Kein Witz, sondern das Lernen Ruby on Rails dauert viel länger als es dauern würde, Kohana lernen. Es ist im Grunde Ihre Wahl, was Sie wählen, die lernen wollen, aber wenn Sie aufstehen und schnell zum Laufen möchten, Kohana ist definitiv eine sehr gute Wahl. Irgendwelche letzten Fragen, bevor wir am Ende? Ja. [Schüler] Wie würden wir integrieren, dass in einem CSS-Framework wie Sie waren, als Sie angewiesen wurden? Die Frage ist, wie würden wir integrieren, dass mit einem CSS-Framework? Was wir tun, ist wahrscheinlich wir wahrscheinlich umfassen würde einen neuen Ordner, in dem wir alle CSS-Dateien-Dump, und dann würden wir auch eine neue Vorlage. In der Vorlage würden wir die CSS-Dateien enthalten um sicherzustellen, dass sie auf jeder einzelnen Seite verwiesen, und dann, wenn Sie tatsächlich das Schreiben von HTML, fügen Sie einfach entsprechenden Klassen und so weiter, und beispielsweise, wenn man mit so etwas sind wie die Form Hilfsfunktion, können Sie weitere Parameter nachträglich hinzufügen angeben, welche Klassen, die Sie, um verschiedene Dinge befestigt werden wollen so dass sie es richtig stylen konnte, und das ist im Grunde, wie Sie gehen würde. Noch Fragen? Ehrfürchtig. Vielen Dank für Ihre Zeit, und ich danke Ihnen für Ihr Kommen. Ich war nicht dabei, sehr viel mehr hinzufügen, aber ein wirklich schnell ist, dass wir nicht einen Link auf das Formular. Wirklich dumm. Fügen wir ein - tatsächlich in der Ansicht, Blog-, Index-, Lassen Sie uns ganz schnell einen Link, der auf die neue Seite geht, die Seite, wo wir einen neuen Beitrag einfügen. Wir werden dies tun. Was ist schön ist, gibt es diese ganze Gruppe von HTML-Hilfefunktionen die verschiedenen Dinge für dich tun, so dass Sie bereits die Entitäten sah hier funktionieren, aber sie haben auch eine Funktion namens "Anker" die Sie eingeben können, in Blog / new und sagen: "Neue Blog." Und es würde den Link für Sie zu erstellen, und das scheint wirklich trivial zu tun, aber das ist schön, da nehme an, dass Sie sich bewegen Sie Ihre Website von 1 Domain zu einem anderen. Und wenn Sie gerade schrieb die URLs sich selbst, dann müssten Sie alle URLs ändern. Oder vielleicht haben Sie es zog aus ein Unterordner zu einem anderen Unterordner. Sie müssten alle, die URLs selbst ändern, und das ist kein Spaß. Sie können diese Anker hier zu verwenden, und Sie können die Domain oder den Unterordner Präfix ändern in der Konfigurationsdatei einmal, und dann wird es, daß überall anwenden, und dies ist wiederum ein großes Beispiel der Sie sich nicht wiederholen, Trocknen Sie den Code aus. Wo auch immer Sie wiederholst dich, versuchen Sie und extrahieren in eine Art von Konfigurationsdatei oder an eine andere Funktion haben und damit umgehen, dass für Sie. Und die letzte Sache, die ich dir zeigen wollte war Angenommen, wir sind zurück auf diesem Posten, und ich hatte ein paar wirklich langen Essay besteht, aber ich habe vergessen, mein Autor enthalten. Jetzt, wenn ich auf "Submit Post" Ich habe alles verloren. Nein! Wirklich traurig. So, wie Sie damit umgehen? Dies ist, was wir tun. Was wir tun, ist hier für diese Ein-und Textbereich Funktionen, wenn wir einen zweiten Parameter, dann den Wert dieser zweiten Parameter sein wird, was das Feld wird sich zunächst mit füllt werden. Was wir tun können, ist in unserem Blog-Controller, wir eine weitere Variable binden konnte. Nennen Sie es "Werte" vielleicht. Und passieren in der Post-Array, buchstäblich. Das bedeutet, dass, wenn die Überprüfung fehlschlägt, Pass mir die Post-Array, das ich von der letzten Anfrage eingereicht, und so kann ich die Werte aus meinem letzten Vorlage verwenden , um die Felder zu füllen. Jetzt kann ich so etwas wie Werte Autor tun und Werte nun Körper und so, wenn ich etwas tun random stuff und klicken Sie auf "Beitrag abschicken", dann bleibt es dort. Aber wir werden, um in einem weiteren Problem führen. Das funktioniert, aber wenn ich auf die Seite das erste Mal, es wird abstürzen, und das ist, weil das erste Mal, gehen wir in die Seite hat dieser Beitrag Variable noch nicht definiert worden. Es ist null. Es ist nicht vorhanden. Und was wir sagen wollen, ist, wenn dieser Schlüssel vorhanden ist, dann den Wert dieser Reihe, aber wenn der Schlüssel nicht vorhanden ist, dann ist eine leere Zeichenfolge. Das ist die Funktionalität, die wir hier wollen. Wir wollen prüfen, ob der Schlüssel, bevor Sie auf das Array zugreifen existiert, und zum Glück genug, Kohana gibt uns auch eine Hilfsfunktion für die. Sie haben diese ganze Reihe von Funktionen unter dem Namen ARR, kurz für Array und sie haben 1 Funktion "bekommen" und Sie können im Array übergeben, und Sie können den Namen des Schlüssels übergeben. Dann, was sie tun werden, ist im Grunde wird es versuchen, diesen Schlüssel zu bekommen, aber wenn das Schlüssel nicht im Array vorhanden ist, dann wird es leer zurück, oder wir können auch eine Standard angeben, glaube ich, Das ist schön. Nun, wenn wir das Gleiche noch einmal zu tun, dann sehen Sie, jetzt funktioniert es beim ersten Mal, und wieder, wenn wir in irgendeiner random stuff geben und versuchen Sie es und senden, dann ist es dort bleibt. Und ich glaube, ich kann auch zeigen, wie Sie eine Vorlage wirklich schnell. Was wir tun können, ist zunächst können wir eine neue Ansicht namens "template.php" hinzufügen im Ordner Views, und was ich zu tun ist, werde ich ausdrucken etwas namens "Content" die gehen, um meine wichtigsten Inhalte. Und vielleicht ganz am Ende werde ich hinzufügen, sagen wir, Urheberrecht. [Unverständlich Student Frage] [Brandon Liu] Vielleicht ist das ein super grundlegende Vorlage ich verwenden möchte. Ich möchte einen Ordner mit meinem Copyright auf jeder einzelnen Seite zu haben, und jetzt, was ich zu tun in meinem Controller ist jetzt anstatt zu sagen ", erstreckt Controller" Ich werde sagen: "erstreckt Controller_Template" und jetzt, anstatt zu sagen, "Antworttext ist gleich dieser Ansicht" Ich werde sagen: "Diese Vorlage ist Inhalt -" und ich denke, - lege ich ein Gleichheitszeichen? Ich vergesse. Ja, dachte ich mir. Und jetzt habe ich eingestellt, dass variable Inhalte die Ansicht entsprechen. Ich kann hier das gleiche tun. Und jetzt, wenn ich zu aktualisieren, sehen Sie nun diese Copyright dort aufgenommen, und so stellen einige zufällige Post, und dann wieder, sollten Sie sehen, dass das Urheberrecht steht ganz unten auf der Seite. Great. Das ist alles, ich wollte euch zeigen. [Applaus] Haben Sie Fragen? [CS50.TV]