hallo und willkommen bei einem weiteren video heute möchte ich dir mal zeigen wie man ein gästebuch im jahr will framework programmiert für diejenigen die nicht wissen was ein gästebuch ist in den neunzigerjahren anfang 2000 da gab es die gästebücher auf allen unsere webseiten und da konnte man halt eben einen kommentar zu der webseite hinterlassen heutzutage haben die gästebücher natürlich keine große relevanz mehr aber ich finde diese technisch spannend denn du kannst mit einem gästebuch die fast alle grundlegenden inhalte einer webseite schon mal abdecken wenn du ein gästebuch programmiert hast bei einem gästebuch da gehören jetzt zum beispiel ein formular dazu die daten die datenbank abzuspeichern das formular validieren und so weiter also quasi alle grundlegenden dinge die du sonst auch benötigt bei einer normalen website und deshalb für dich persönlich gästebücher als ein sehr spannendes projekt weil du damit eben ein framework kennenlernen kannst mit seinen grundlegenden dingen und da das gästebuch ist halt eben klein genug um damit schnell was umzusetzen und auch groß genug weil es eben viele features abdeckt die man sonst in einer normalen website braucht am ende des tutorials gebe ich dir noch eine kleine hausaufgabe auf damit du eben dein wissen ein wenig vervollständigen kannst und ein bisschen mal um experimentieren kannst den quellcode zu dem tutorial dem kannst du dir entweder abtippen oder eben gegen eine kleine gebühr unten in der video beschreibung kaufen wenn dir solche tutorials von mir gefallen und falls du noch weitere tutorials sehen möchtest zu einem speziellen thema das schreibt ist mir doch mal unten in die kommentare ansonsten vergessen nicht das video zu liken abonniere main kanal falls du noch weitere tutorials nicht verpassen möchtest und ich wünsche dir viel spaß und so wird das ganze gästebuch ausschauen ihr habt ja ein ganz normales brustkorb formular hier unten sind ein paar einträge ihr habt eine prämierung wenn ihr auf speichern drückt kommen dann ganz viele verschiedene validierungs fehlermeldungen wenn ich ein test eintrages dann jetzt alles rot wenn man alles richtig einträgt mache ich mal schnell dann sieht man anschließend eine flash message und auf der ersten page sieht man dann den eintrag dem ort eben gemacht hat beginnen wir zunächst mit der installation als webserver werde ich hier dfb nutzen falls sie nicht weiss was.de div ist dazu habe ich bereits ein video erstellt wie mandela installiert und konfiguriert dass verlinke ich dir mal oben in der ecke das kannst du mal vorher anschauen als erstes läge ja so einfach mal ein verzeichnis an also ganz die in der kommandozeile npd oder eben einen ordner anlegen ich nenne es mal 11 für lauda will facebook so jetzt gehen wir mal in den projekt verzeichnis hinein und konfigurieren hier in diesem verzeichnis des also rufe ich auf der defcon fick und jetzt werden hier ein paar dinge abgefragt also das projekt name wird lv gästebuch heißen das dokument wird public sein er fragt mich an ob er das auch anlegen möchte sage ich ja und als projekttag schreibe ich leider weil du siehst ja du kannst ja verschiedene tipps vor definieren ich werde hier also langel aus so ist es mein projekt aufgesetzt aber bevor ich das bric staaten muss ich zunächst mal einige dateien im db konzern passen das mache ich mal ich habe jetzt das projekt im visual studio code geöffnet und du siehst hier ein punkt dem verzeichnis das sind die ganzen de wit konfiguration und in der konflikt ja mal da muss ich zunächst mal was anpassen und zwar die php version per default medwedew die php version 8.0 vorinstalliert ich möchte aber die neueste version 8.1 installieren das heißt ich trakte mal kurz ein und wir können jetzt hier weitermachen lasst uns mal als erstes das in die zelle projekt erstellen dazu rufst du den befehl auf ddr composer create laura will lara will der ddr composer create befehl ist im grunde das gleiche wie wenn du jetzt mit composer creed project arbeiten würdest du kannst ja normalerweise ohne delev wenn jetzt lokal ein web-server hättest könntest du composer create projekt das ganze auch verwenden da würde dann composer eben das lager weil projekt vom github klonen und dir das lokal halt auch setzen deswegen wir benutzen hier aber des composer tretlager will leider will müssen hier noch ein paar daten angeben damit ihr ein paar euros angelegt werden wobei unter windows hier noch gar kein host erstellt wurde das kommt gleich im nächsten schritt weil wir ja davor den public verzeichnis angelegt haben haben wir ja ein ein ordner eben drinnen im projekt verzeichnis und das wollen wir jetzt mal kurz löschen und jetzt wird hier leider weil installiert bevor hier weitermachen wir müssen noch mal den einen befehl von ganz oben von ganz am anfang ausführen und zwar diesen hier damit wir eben diesen hostname hier bei uns unter windows haben damit wir eben diese die domain aufrufen können das heißt ich kopiere das ganze hier nochmal erstelle einen neuen tab aber unter windows also windows powershell und führte das ganze haus wurde ihr gesagt wusste wurde hinzugefügt also das heißt die url wurde jetzt in meiner post datei unter windows eingetragen das heißt ich könnte jetzt die domain aufrufen und dann sollte ich eine startseite von lara wird sehen dass teste ich mal aus so und jetzt habe ich die url aufgerufen und besitzt sie die startseite von lauda will das heißt dann leider wurde erfolgreich installiert das ganze hier unten sehen wir haben lara will version 9.2.1 und bhp version 8.1 punkt 5 das heißt wir können jetzt mit unserem gästebuch loslegen bevor wir aber jetzt mit leider will loslegen möchte ich mal kurz sicherstellen dass hier einige spezielle plugins im visual studio code installiert habt denn damit wird man die entwicklung wesentlich leichter sein weil ich da einige dinge vorgeschlagen werden im editor das erste dsd extension die könnt ihr beim klicken hier auf erweiterungen dann installieren wäre la belle plaine snippets ist sehr wichtig weil dann könnt ihr dann die template engine von level benutzen php acht kitas und täter sind wichtig weil dann könnt ihr dann ganz schnell dass uns etwas generieren und bhp intelligenz damit werden dann einige dinge also darüber mit christiane bessere quellcode vervollständigung da sind so die wichtigen plugins die ihr unter visual code verwenden müsst damit ihr einfacher arbeiten können und jetzt kommen wir zum eigentlichen projekt das heißt wir erstellen im ersten moment einen im ersten schritt einen controller unsere ganzen klassen die vioso für die entwicklung benutzen sie legen wir im ordner app an der aufseher haupt ebene eben liegt das heißt ich erstelle vorher hier einen neuen verzeichnis da ist ein controller und ich erstelle einen neuen datei die heißt dann index controller php das wird dann eben eine index controller klasse sein also wieder mal beginnen wir mit einem bhp opened a class index controller und dann haben wir unsere klasse erstellt der index controller der braucht natürlich eine index action mit der wir daneben arbeiten werden also wir brauchen hier noch natürliche namespace alle klassen dem sich map ordner befinden haben einen speziellen namespace den können wir uns ja auch auslesen hier siehst du das ganze maine spacelab / und dann kommt dann der ordner name das heißt in unserem fall wäre das hier namespace controller wenn du halt deine klassen im unterordner anlegen ist dann müsstest du hier quasi ab den kompletten ordner pfad mit angeben also hätten wir hier in unter kontrollen test ordner müsstest du hier controller / test und so weiter verwenden aber weil wir uns im controller befinden heißt es also app controller so und dann erstelle ich mal eine public function index action und die index action die werden wir eben verwenden für unsere startseite in der index action schreiben wir jetzt hier einfach mal ein return hallo welt weil ich möchte im ersten moment einfach nur schauen ob wir den inhalt aus der index action herausbekommen und dann können wir diesen inhalt nach und nach bearbeiten das heißt im ersten schritt einfach mal hier in die turnhalle welt und den index controller den müssen wir natürlich registrieren im rating von lada will im lada will hast doch der höchsten ebene einen orden und der heißt raus und da wird dann hast du verschiedene bhp fassen da kannst du dann verschiedene routen definieren und da gibt es eine der ist web bhp da kommen dann deinen ganzen url hinein die du eben verwenden möchtest für für dein projekt wenn du da mal rein klickt dann siehst du als erstes die route geht und dann wird hier eine anonyme funktion aufgerufen und dann wieder zurück gegeben dass hier alles brauchen wir nicht wir wollen hier die startseite mit unseren eigenen inhalt überschreiben das heißt das alles wird hier entfernt so dass du dich einfach nur wut hass und dann brauchst du hier eine rail rhein und in diesem eric kannst du zwei parameter übergeben einmal den controller namen also kannst dich index controller doppelpunkt glas aufrufen und dann anschließend kannst du dich hier dann den methoden namen aufrufen der benutzt werden soll so index action in zu dem fall und du musst halt darauf achten dass wenn du das so gemacht dass das von diesem index controller auch hier oben der namespace benutzt wird was durch ihr im grunde gemacht hast ist es deinen controller zu der route zu meppen du sagst quasi wenn die url / aufgerufen wurde dann sollte der index controller aufgerufen werden mit der index action was ich noch gerne mache bei solchen routen ist immer einen namen vergeben weil du später damit einfacher urls generieren kannst zu dieser route das heißt du kannst hier noch anschließend in der die methode nahm aufrufen und der route einen namen vergeben also ich schreib dann hier einfach mal index dann weiß ich wenn ich die route index anspreche damit es dann hier gemeint lasst uns mal testen was dann jetzt passiert wenn wir die startseite uns anschauen du siehst hier es steht hier hallo welt also das was wir eben erzeugt haben das heißt das funktioniert soweit lassen uns meinem nächsten schritt uns mal die templates anschauen in lara will hast du den ordner resources und dem resources hast du ein unterordner da heisst deuce und da kommen dann einen ganzen blade templates hinein lasst uns im ersten moment eine index.php anlegen damit wir eben diese für den index controller benutzen also index.php anlegen und wir schreiben erst mal hier hallo welt hinein und dem index kontrolle müssen natürlich sagen wir verwenden jetzt das blade template beziehungsweise damit wir dann sehen dass es auch funktioniert hat lass mal hier schreiben hallo welt aus dem view damit wir halt einen unterschiedlichen text haben und im index in der index action schreibe ich jetzt hier einfach die türen view und hier kann ich dann den namen vergeben einfach index also quasi du kannst mit der funktion view eins von diesen views laden und du über gibt es eben den namen der vorn am anfang steht und weil wir jetzt hier ein view benutzen können wir hier auch ein return type in der index action benutzen der heißt daneben view wenn wir jetzt die startseite aufrufen sollten jetzt den inhalt vom index plate sehen genau das ist hier hallo welt aus dem bio das heißt das funktioniert schon mal das heißt wir können templates benutzen lasst uns mal als erstes mal ein template aufsetzen mit boat trip wir gehen mal kurz auf die seite geht der punkt kommen da gehen wir mal unter die dogs hinein da gibt es so eine quick start anleitung ich kopien mal diesen teil hier übertrage dass wir meine index plate und dann wird hier gesagt im blut css und jazz das machen wir dann auch kopieren mal ding hier bereich und kopieren den skript teil aber hier müsste eigentlich normalerweise vorsichtig sein also dieses cdn so sollte man normalerweise buseck nicht installieren das da gibt es andere wege wie man das macht aber um das tutorial zu vereinfachen mache ich das eben über das cdn wenn ihr das leben hat er dann live benutzt er ließ durch bitte beim gutes treffen also andere anleitungen durch am besten lebt er halt diese minden cs und diese minis datei herunter und verwendet die lokale damit ihr eben nicht die ganzen daten von euren seitenbesucher an das cdn weitergibt es geht schon datenschutz aber jetzt haben wir hier ein kleines woodstock template und das können wir uns mal kurz mal anschauen ob das ganze auch funktioniert hat das ist hier hello world also sprich wir haben unser bub template so und wir wollen ja hier nachher unseren content eintragen ich schreib mal hier in denen die haben schon mal gästebuch hinein und schreibt hier im titel auch erste buch und das ist ja so wir möchten gerne für mehrere seiten das gleiche template wiederverwenden nachher das heißt wir brauchen so genannte layout das heißt im ordner views erstelle ich einen neuen unterordner der rest layout und eigentlich ist das hier das ganze hier ist ja eigentlich ein layout weil hier sind halt die ganzen grundlegenden dingen definiert und ich möchte ja nur den inhalt auf verschiedenen seiten verändern und diese ganzen händler und teilt das ganze soll ja so lassen also das ganze muss ja so bleiben wie es ist das heißt ich erstelle mal neues layout da heißt daneben base blade bhp das wird unser grundlayout seien von dem wir dann die ganze zeit erben und nur den inhalt überschreiben und wir nehmen dann mal das ganze hier mal raus übertragen dass sie in der space hinein und jetzt müssen in der base ein paar platzhalter definieren einen die wir uns dann nachher einhängen das erste wäre zb der titel beim titel können wir hier schreiben enthielt und dann können wir einen namen definieren und zwar heißt der titel damit haben wir quasi gesagt wir können dann nachher vom blade template das ganze erben und den titel ersetzen im vererbten template aber das zeige ich sagen gleich und hier machen wir auch mal erzielt ein body hinein in der welt ist das so dass viele dinge die du in der welt benutzt beginn im template jetzt beginnen mit einem ebt am anfang das ist quasi laves möglichkeit um dinge in einem template zu definieren so schauen wir uns dazu mal noch mal dass index plate an die index.php die wird ja von unserem index controller geändert und zurzeit ist sie leer und wie ich möchte hier gerne dieses base plate verwenden ich kann hier mit einem extens das hatte hier zwei acts eingebaut layout base eintragen das heißt im grunde ich habe jetzt bei der index blade bhp gesagt benutze bitte aus dem ordner layout die base blade php und die wird jetzt quasi abgeleitet und jetzt können wir zum beispiel den titel setzen da kann ich jetzt hier hinschreiben at section habe ich wieder doppelten adds action-titel und da kann ich hier gästebuch reinschreiben was kann ich selber einfachen titel machen und bei größeren titeln wie zum beispiel den body oder wir nehmen wir nennen das ganze mal nicht body sondern eher content das ist der inhalt ist schreibe ich ja auch mal eine weiteres action body ich hab's ja konntet genannt schreibe ich hier noch ein and section und jetzt kann ich hier eine hin inhalt reinschreiben wie zb hallo welt aus dem view und jetzt habe ich quasi folgendes gemacht um das ganze mal noch mal zu verstehen der index controller der rendert jetzt eine index blade bhb die in displays bhp wiederum sagt mir mal bitte den content aus layout base plate in diesem content wird wiederum gesagt achtung ich habe hier ein paar blöcke definiert die heißen titel und content und diese werden dann nachher befüllt von der eigentlichen datei und die befüllen wir halt in unserer index plate und du kannst inhalt ganz viele blöcke in deinem layout definieren und diese dann pro template dann immer wieder befüllen das ist halt sehr sehr praktisch lasst uns mal hier damit wir das blue chip auch funktioniert hier noch einen kleinen div class container verwenden / tisch wir bauen hier nochmal 1 h1 rein und da schreiben wir mal gästebuch hinein und schreiben hier machen nur einen kleinen pc und schreiben eben hallo welt aus dem view und ich möchte mal schauen und das ganze mit dem färben des templates und so weiter funktioniert hat du siehst hier gästebuch wurde zentriert weil wir ja den container stift benutzt haben und wir haben hier nach 1 und es scheint alles zu funktionieren das heißt im nächsten schritt brauchen wir unser formular beginnen wir also mit einem formular wir stellen formular mit der methode post und in der action tragen wir unseren guten namen ein wenn man einen lada welt variablen ausgeben will muss man hier zwei geschäfte klammern benutzen und dann gibt es in zwei lager weil die funktion der ist out und da kannst du hier die index angeben also den namen der route die duh verwendet hast und dann schließen wir das ganze mal ab und haben somit eine kleine form erstellt ich kann mal kurz mal anschauen wie das ganze funktioniert hier siehst du den quellcode davon und du siehst hier bei der action steht eben der pfad zu der router allerdings ist ihr das sind der action eine komplette url drin steht und das möchten wir ja eigentlich nicht haben wir möchten nur den letzten part hinter der url haben das heißt wir müssen hier noch ein paar parameter übergeben wir können hier einen leeren airways übergeben und den letzten parameter hier fonds setzen damit wir keine absolute url haben sondern eine relative url es heißt nämlich dass jetzt aktualisierte sehe ich hier noch und du siehst hier schon das naming von hooters wichtig weil ich kann jetzt im index controller bzw in roths web bhp hier den pfadfindern zu test als de oder sowas und dann würde ich da eine andere route sehen ich kann das aber jetzt hält nicht testen weil das würde wahrscheinlich nicht funktionieren genau weil ich eben mich nicht auf der startseite befinden aber wenn ich hier test asd aufrufe das ist auch dass die action / test als die ist also nur weil wir ja im naming weil wir eine route mit einem namen definiert haben können wir darauf halt immer wieder zugreifen seit sehr sehr praktisch immer einen namen für die route zu definieren jetzt haben wir unser erstes formular und dieses formular müssen mit paar feldern erweitern in gerd butzeck kannst du hier unter phorms vom control hier so ein paar beispiele die rausnehmen und die kannst du einfach rüber kopieren also ich möchte das hier mal einfach wieder verwenden sei es ich gucke mir das mal das wird dann quasi als vorlage für mich dienen das treibe ich jetzt hier mal ein wir werden danach hier ein einen usernamen eine e-mail brauchen einen subtitle und einen body und dann anschließend gibt es dann noch ein button um das ganze ab zu speichern so dass müssen jetzt mal alles hier aufräumen also erstmal hier die id setzen dass das nenne ich mal hier input username vom type text vor input usernamen place hole lasse ich mal kurz weg und usern ich denke mal ich kann das ganze prozess muss kippen weil du weißt er wie html leben funktioniert so sieht jetzt mein html code für das formular aus wir haben hier unsere eingabefelder wir haben unseren button und auf der startseite ist das ganze jetzt so aus jetzt haben wir hier ein gästebuch so als erstes möchte ich dir mal zeigen wie du deine formulare vor cross site request tokens absichert also dass man ein formular nicht wieder verwenden kann über eine externe webseite das geht in lauda will ganz einfach du schreibst here at csrf mit einem ebt natürlich und schon hat leider will ein verstecktes input feld eingebaut wenn wir das ganze uns anschauen seiten quelltext angucken der dann token heißt und der hat dann deinen cross zeit fortschritte quest token diese wird dann auch validiert wenn ich jetzt das formular abspeichern möchte dann kriege ich erstmal eine fehlermeldung weil die methode oder weil ich keine post methode habe für die action das heißt wir müssen in unseren in unserem rauszulassen dass der gleiche controller auch über post aufgerufen werden darf du hast ja in der in der roadmap bhp steht hier braut geht und einfach nur ein / und damit sagst du einfach dass die route nur über geld also einfach nur über den browser aufrufen reich bar werden soll wenn das ganze über post zu lassen möchtest dann musste ich hier die route ein bisschen anpassen du musst hier ein match hinein schreiben da musst du ein r übergeben von welchen methoden das ganze zugelassen werden soll wir wollen ja einmal geld zu lassen und einmal post zu lassen und dann übergibt heute den pfad und den rest kannst dir das heißt wenn ich jetzt die seite aktualisieren und das formular absender sind wir wieder beim gästebuch gelandet also ich kann die ganze team auf speichern drücken und alles scheint zu funktionieren lasst uns im nächsten schritt das formular validieren bevor wir ein eintrag in die datenbank machen für die validierung benötigen wir eine requests variable die müssen wir hier oben definieren und die ist dann eben vom type illuminiert http request und in diesem requests können wir unser formular validieren wir müssen wir dürfen aber nur die validierung dann an stoßen denn wir im post request sind also wenn wir das formular ab gesendet haben du erinnerst dich wir haben in der web php definiert dass wir ein post und dann geht auf die gleiche url haben und auf die gleiche action und das heißt wir dürfen halt ihm nur im post validieren im geht aber nicht weil wir da einfach nur die seite aufrufen das heißt wir fragen im ersten moment ab affleck westgate method damit kriegen wir dann die methode zurück gleich gleich post ist erst dann kommt dann die validierung mit der methode league westwall idate kannst du verschiedene regeln definieren für die validierung des formulars und das ergebnis davon also wenn alles validiert wurde kannst ihn ein re abspeichern den nennen wir mal wally dated und jetzt definieren wir mal ein paar regeln das können wir hier mit einem re machen und in dem schreiben wir vorne erst mal den namen des eingabe feldes also zb usernamen und dann können wir definieren was sollte oder wie soll sich das oder was ist notwendig damit der user name valide ist denn wir können ja gucken ich habe hier bei den inputs keinen namen vergeben ich muss das mal kurz mal nachholen also ich möchte dass der user namen zum beispiel dass er pflicht fällt wird und es soll maximal 255 zeichen lang sein weil wir das nachher in die datenbank abspeichern und wir da ein limit beim feld haben das heißt ich schreibe hier einfach mal bewegen ein required hin und mit seinem pipe kann ich noch hin schreiben max 255 stadt die pipes könnte man auch natürlich einfach eine ray benutzen und das ganze auch so aufrufen also ich jedem so wie er es gerne haben möchte du kannst jetzt wieder einen every mit den regeln definieren oder eben einen text definieren oder einfach alles mit einem pipe zusammenlegt es ist halt dir überlassen wie das gerne haben möchtest dass uns mal die e-mail als nächstes validieren bei der e mail die möchte ich erst mal definieren dass es überhaupt eine e-mail ist das da auf den auf den e mail auf die gültige e mail geprüft werden soll dann setze ich da auch mal ein wachs von 255 und ich möchte aber dass die email optional ist also kannst du hier ein alle bild rein schreiben es ist nicht regiert es ist du kannst also quasi alle bill definieren dass das feld optional ist dann haben wir noch einen subtitle der wird dann bei mir auch pflicht fällt sein required und den gebe ich auch max 255 ich habe hier im comma vergessen deswegen meckert auch das tun genau und body dann will ich eigentlich nur required setzen weil ich möchte da kein limit haben weil mein body ist ja wie du hier sehen kannst ein text area und dass wir doch nachher da ein textfeld seien in der datenbank so lassen es mit dem nächsten schritt uns mal das ganze anschauen und gucken was eigentlich invalidität passiert leider hast du die methode dann die gibt ja eine schönere ausgabe von variablen aus also wenn ich jetzt auf der startseite auch speichern drücke siehst du es ist nichts passiert aber eigentlich ist da einiges im hintergrund passiert erst mal wurde das formular abgesendet dann wurde es validiert und weil die validierung fehlgeschlagen ist gab es dann eine weiterleitung auf die gleiche url und weil wir eben hier keine erfolgreiche validierung hatten haben wir keine ausgabe gesehen du siehst das ganze wenn du erst alle felder eingetragen hast die auch valide sind das heißt wie ich zeige dass man kurz ist schwer man ihren test einen test at test.de noch ein test und noch ein testen wenn ich das auch speichern drücke siehst du erst die ausgabe und wir sind im postreg fest geblieben so dass heißt diesen ganzen bereich hast du also das wollten die validität funktion die hat eben den weg west validiert und wieder auf die stadt seite weitergeleitet weil dann ein paar felder waren die nicht valide sind aber wir haben jetzt keine fehlermeldungen gesehen kein garnichts und das müssen im nächsten schritt ein baum in dem formular schauen wir mal einfach über das über dem form die ganzen errors ein dann sehen wir sie auch beim nächsten mal wenn wir das ganze absenden das heißt du kannst hier ineffektiv benutzen und es gibt eine funktion die heißt eine variable des terrors und dann kannst du mit annie aufrufen abfragen ob es irgendeine fehlermeldung gibt es anschließend und jetzt können wir hier so einen define bauen mit den ganzen albert also div class ist gleich erklärt albert - danger das ist halt dieses typische buseck siw und wir bauen hier einen uli konstrukt auf mit dem ganzen fehlermeldungen bedford kannst du in bled benutzen um durch die ganzen fehlermeldungen durchzugehen das heißt du kannst hier errors aufrufen er ist halt eine global verfügbare klasse innerhalb des templates und die hat methoden die annie und o und bio kriegszeit alle deine fehlermeldungen es terror und die kannst du dann eben ausgeben and for kids und wir brauchen hier eine element rein und wie davor auch erwähnt die variablen gibt man mit geschweißten klammern aus ich sehe noch ich habe hier ein tippfehler das ding die variabler ist errors also plural so in der test mal aus was jetzt passiert wenn ich auf speichern drücke ich habe es oft speichern gedrückt und du siehst hier die ganzen fehler wurden ausgegeben und siehst du wie eben dass das formular validiert wurde so wir können auch diese ganzen arrows von den einzelnen feldern auch hier in an den eingabefeldern einbauen um das ganze ein bisschen sichtbarer für den nutzer zu machen das machen wir mal das nächstes im forum kannst du nämlich eine weitere funktion von lara welt benutzen zwar terror und hier kannst du nach dem namen des eingabefeld es abfragen also in diesem fall wir das username und dann kannst du dich ja abfragen and error und jetzt kannst du hier in diesen in diesem bereich mit klasse reinschreiben ist in welle david hast du quasi gesagt wenn wir von dem wali data eine fehlermeldung zu dem feld usernamen haben dann mach mal irgendwas und in diesem fall eben eine weitere klasse anhängen an formen control ist in wald gibt es auch zum beispiel hier oben drüber ihn schreiben terror und dann könntest du sagen wenn wir in user namen ergo haben dann schreibst du hier dann eine meldung hinein und dieses ganze können wir sie zum beispiel kopieren und in anderen klassen übertragen in diesem fall hier ist haben wir e mail und das ganze jetzt hier für den sap titel und natürlich für den body so und somit müssten die einzelnen eingabefelder auch rot erscheinen wenn wir da ein fehlerhaftes validierung haben das test nimmt man ja speichern und du siehst alle felder sind rot isch mach mal hier eine e mail die keine e-mail ist und das ist jetzt immer noch alles rot das nächste ist was du hier siehst ist dass die ganzen felder beim abspeichern geleert werden und die sind einfach leer und du möchtest ja eigentlich ein formular haben den man beim speichern halt dass die werte drin bestehen bleiben dass man die dann nachträglich geändert das kann man natürlich auch ganz einfach im lager weil umsetzen das zeige ich dir als nächstes und zwar kannst du hier beim value einfach rein schreiben es gibt nur neue variable oder neue funktionen die heißt und hier kommt dann den namen des feldes rainer username sarah will macht das so dass wenn du ein formular absenders die ganzen felder abgespeichert werden in einer session und du kannst die mit der funktion und aus der session wieder auslesen und dieses value verwenden wir jetzt auch mal halt überall also hier für die e-mail- und den subtitle und beim body das müssen wir in das text area benutzen der gibs halt keinen value weil ist eine text area und hirsch einen body hinein so und jetzt wenn ich hier ein body eintrage und 1 ab teilte und ein user namen und e mail auch irgendetwas falsches und auch speichern drücke siehst du dass die ganzen werte bestehen bleiben und wenn nicht dann alles richtig gemacht habe und auf speichern gedrückt habe bin ich dann zum postreg fest gekommen und habe jetzt mein ball der aber jetzt wurden die ganzen felder eben gelehrt weil dann die session eben auch gelehrt wurde jetzt haben wir die wellenformen daten und diese wollen wir jetzt als nächstes in der datenbank abspeichern zunächst müssen in der enev variable nach unseren nach unseren db connection schauen und diese eben anpassen weil weil wir uns ja hier unter deck befinden müssen wir natürlich db host port usw alles ändern in unserem fall heißt das hier der host ist ndb die database heißt auch db username ist db und passwort ist die wm das ist halt eine default einstellung unter der decke das haben wir also quasi jetzt alles konfiguriert wir können auch hier die app url anpassen die wir in unserem fall diese hier genau und jetzt können wir unserem modell erstellen um ein model zu erstellen müssen dafür einige command lions von level benutzen um das ganze jetzt einfacher zu gestalten logan wir uns mal auf unseren web server ein also dfs sh und wir befinden uns jetzt quasi innerhalb des containers und haben hier in nicht das ganze auf liste hier haben wir unseren lara will unterlagen projekt und jetzt kann ich hier den befehl artdesign benutzen und damit kann ich dann eben meine verschiedenen dingen in lara will umsätzen über die kommandozeile also wir wollen ja ein model erstellen das heißt ich benutze hier ph partisan make model das ganz normale guest blog entry und wir möchten auch noch dazu einer migration erstellen also eine datenbank migration damit wird das ganze wenn im migrations aufspielen das heißt ich benutze ich nochmal den fleck migration so wenn ihr wenn wir jetzt in das projekt hineinschauen haben wir unter app models jetzt das modell des book entry und unter database migrations haben wir jetzt eine neue migration erstellt die ihm dieses ges book entries erstellt also die mehrzahl davon und das müssen wir mal im nächsten schritt konfigurieren also lasst uns mal das guinness-buch entry anpassen wir brauchen hier ein paar felder brauchen hier ein protected string username wir setzen auf null also wir wollen ja halb dem gästebuch entweder einen username haben wir wollen eine e mails abteilung und body haben dass sie müssen dafür jetzt ein paar protected eigenschaften definieren die e mail ist ja bei uns optional also nahe will also kann ich hier mit einem fragezeichen das ganze hier vornherein schreiben und sage email ist gleich null so dann brauchen wir den subtitle protected ist auch vom typ string subtitle und protected string body und dann ist das ja so wir wollen ja hier dieses buch erzeugen aus unserem formular und gebrauchen hier eine weitere eigenschaft die heißt dann protected philipp das ist eine sonderheit von levels model und in diesem film können wir ein aero definieren welche felder dürfen denn von außen befüllt werden also welche felder dürfen wir benutzen beim erstellen des models weil es kann sein dass du halt einige felder hast die du nicht wirklich über ein formular befüllen ist wie zum beispiel created und so weiter das heißt hier in diesen schritt schreiben wir einfach mal die ganzen felder rein also usernamen e-mails ableite und body ich muss auch mal kurz prüfen ob ich auch die speziell subtitle auch richtig geschrieben habe und zwar hier doch das sieht richtig aus dann passt es so weit jetzt haben wir unser modell erstellt im nächsten schritt müssen wir die migration anpassen die immigration ist relativ einfach aufgebaut du schreibst hier einfach rein weil welche felder sollen soll die tabelle denn haben also benutzt hier die variable table und sagt zum beispiel es gibt vom typ sting ein weiteres feld da heißt username dann sagst du es gibt in der table einen weiteren stream der heißt daneben email und diese e-mail ist auch neue will dann sagst in der table haben wir noch einen weiteren stream der ist dann vom typ jetta oder vom mit dem namen subtitle und wir haben noch ein in der table einen text diesmal kein string und zwar einen body mit dem string erstellst du halt ein einfaches ein einfacheres eingabefeld du kannst auch in die länge definieren und kann sagen hier maximal 255 zeichen weil wir das auch im bally data definiert haben und auch im sap heute machen wir hier eine maximale länge rein und beim text gibt die glaube ich nicht mehr so und damit haben wir auch die migration erstellt dh lassen uns im nächsten schritt die migration auf spielen dafür gehen wir wieder zurück in unsere command line wo wir uns im lager welt projekt befinden und rufen wir wieder bhp sein auf und diesmal einfach migrate und jetzt sagte hier alles wurde erfolgreich ausgeführt und hier wurden die ganzen migrations eben ausgeführt das heißt wir haben jetzt in der datenbank ein neues eine neue tabelle mit dem gästebuch entries jetzt wurden die ganzen migrations ausgeführt und lass uns mal kurz in die datenbank hineinschauen ich befinde mich jetzt in meinem gdf verzeichnis und ich kann ihn mit df describe mir mal kurz anschauen wie denn der port für die datenbank ist nach außen und zwar diese hier 5104 weil dem brauche ich jetzt um mich mit der datenbank zu verbinden ich rufe mal das programm heidi sql auf kann dann hier eine neue verbindung anlegen die nenne ich habe nochmal die def generic und muss hier eben den port anpassen was hier benutzernamen db passwort dpa port ist jetzt der hier und ich öffne mal die datenbank und du siehst hier das ist jetzt die datenbank von dem land projekt und wir haben hier ein gästebuch entries eine tabelle die hat dann all die user namen e mail also quasi das was hier definiert haben es ist die e mail listen alle bill und wir haben noch einen created und updatet zeitstempel das heißt die migration hat funktioniert das heißt wir können jetzt in unserem index controller unsere gästebucheinträge erstellen und das zeige ich dir mal wie das geht und das ist einfach ganz einfach du benutzt hier unseres unter unser model was wir davor stellt haben des book entry und dann rufst du die methode create auf und übergibt die wally dated parameter und somit wirst du dann die gästebucheinträge erstellen das dank nehmen wir mal kurz raus und testen das ganze mal aus also ich befehle mal das formular mit wichtigen werten test test de sap titel als die und body hallo welt und drücke mal auf speichern jetzt kriege ich hier eine fehlermeldung weil er sagte die variable philipp darf keine keine rey keine ehre definierung definition haben the type of trouble must not be defined das heißt das muss ich mal kurz anpassen aber das machen wir mal schnell das heißt im gästebuch entweder kurz mal hier das herausnehmen und das formular noch mal neu senden so und jetzt war eigentlich alles erfolgreich so dass ich hier keine fehlermeldung und wenn ich jetzt wieder die datenbank mir anschaue und dort kann ich ja jetzt in guest buch endlich die daten angucken und du sitzt hier in der datenbank haben wir jetzt einen eintrag gemacht also mit gästebuch and create kannst du eine irre übergeben und damit dann eben einen eintrag in die datenbank machen als nächstes möchte ich ja eine weiterleitung zu der seite haben mit einer flash message damit ich eben sehr okay mein eintrag wurde erfolgreich gespeichert wir machen hier kurz einen return dann rufen wir die methode redirect auf wir können hier dann die methode ruth benutzen damit wir sagen zu welcher route wir das ganze weiterleiten ich verwende ich eben die den namen index und dann kannst du dich hier mit einem witz angeben ob du irgendwelche werte in die session noch mit speichern möchtest nachdem redirect und gestalten hier eine neue session reihen der ist an sex es und als value wird da stehen erfolgreich gespeichert und somit habe ich quasi gesagt okay wenn das formular abgeschickt wurde wird das ganze validiert wenn es valide wird das abgespeichert und danach wie leid mir wieder zu der index route weiter und haben noch eine variable sex es in der session stehen und diese session die fragen wir jetzt einfach mal in unseren template ab um das ganze mal auch anzuzeigen also gehen wir wieder kurze die index plate bhp und ich möchte mal hier oben über dem formular natürlich das ganze ausgeben und du kannst hier mit einem statement catic abfragen ob in der session ob es eine session gibt die heiß 6 s und wenn das der fall ist dann erstellen wir wieder hier 1 div class mit dem lag mit der klasse alert alexis bleistift und wir geben das ganze land eben aus session saxes das ist das ganze mal ausprobieren also wir sind jetzt hier in unserem gästebuch ich drück erstmal auf speicher und sie denn die ganzen fehlermeldungen jetzt befehle ich die ganzen felder und hat noch weiterhin um befehle und dann fick sich die e mail lücke auf speichern und jetzt habe ich noch einen kleinen fehler dass der return teig nicht mehr view ist sondern redirect response das muss ich mal kurz auch anpassen in dem index controller da siehst du hier das territorien type den muss ich mal kurz entfernen damit das ganze funktioniert so und du siehst hier die message erfolgreich gespeichert und es steht hier auch ein neuer datensatz in der datenbank zwei mal drin weil es einmal erfolgreich gespeichert wurde beim fehler also bei dem bei dem fehlerfall und jetzt nochmal beim refresh irgendwie stimmt aber noch nicht die klassen genau ich habe hier ein tippfehler heißt sex es mit doppel c natürlich wenn ich das ganze aber die frösche wird da muss ich das ganze formular nochmal ein tragen also machen wir das nochmal test 4 [Musik] test so und jetzt siehst du hier erfolgreich gespeichert und alles wurde halt wunderbar gespeichert wenn ich jetzt in die datenbank kleinen schauer kommt ihr unser test 4 eintrag so nachdem wir nun ein paar datensätze abgespeichert haben eine datenbank dass uns diese mal kurz ausgeben das heißt ich erstelle zunächst mal eine neue eine neue variable die entries und diese endlich bei diablo kriegt den wert aus cas book entry und dann kann man hier mit einem krimi ein verschiedene quellen an wänden im level ohren du könntest hier zum beispiel mit einem order by die ganzen einträge aussortieren weil wir möchten ja zum beispiel die neuesten einträge zuerst sehen das heißt ich kann ihr das feld angeben created at und ich kann sagen ich möchte das ganze absteigen sortieren und wir lassen uns mal alle endlich es ausgeben das heißt ich rufe ich hier die methode geht auf damit kriegen wir dann eben alle einträge heraus ich kann dir das ganze mal kurz mal zeigen die mich ein damm ausgebe und dann wie die ganzen entries anzeigen lassen die ausgabe des dampf litern ungefähr so aus du hast dann aber wenn deine collection mit 3 1 teams und das sind dann meine ganzen einträge ich habe jetzt ein paar einträge veränderten einige gelöscht und so weiter das heißt wir haben hier insgesamt nur drei einträge so diese entries die können wir jetzt nämlich an das video übergeben mit einem und dann können wir diese dann anschließend rändern in unserem template gehen wir dafür ein verzeichnis resources und dort gibt es halt in ordner views mit dem templates und in unserer index plate können wir nämlich jetzt unter diesem ganzen formular die einträge ländern wir verwenden dafür die ganz normale falls du kannst hinschreiben at feat und dann kannst du den variablen namen aufrufen also in unserem fall entries entschieden und dann mit einem android schließen wir das ganze mal ab so jetzt können wir hier in dieser schleife einfach entry subtitle verwenden um zum beispiel ins abteil auszugeben oder entry body und so weiter das heißt wenn ich das jetzt so ausgeben würde würde ich die ganzen bodies sehen von den ganzen einträgen denn die würden dann halt nebeneinander aufgelistet werden das möchte ich kann nicht so auf anzeigen sondern natürlich mit einem html code drumherum das heißt wir bauen hier erst mal kurz einen kleinen dvv da ist sein glas card wir verwenden card um das ganze zu stylen geben eine margin bottom von einer em nach oben nach unten und in diesem div definiert ich dann noch eine weitere klasse die heißt dann card body das sind alles definierte klassen aus dem boot striptease s frame blog wenn ich diese klassen benutzt werden die schon automatisch gestylt das ist so in bottrop vordefiniert als nächstes machen wir hier ein h5 mit dem glas card titel und in dem karte geben wir unseren titel aus das heißt entry subtitle als nächstes 90 mal ein haar 6 und nutze hier card subtitle machen wir mal margin-bottom nach unten so einen kleinen und ich definiere die klasse text mutet damit wird dann der ganze text in grau dargestellt in diesen subtitle schreibe ich einfach hier wer hat diesen beitrag verfasst also nutze ich entry username und dann verwenden wir damit ich es eben anzeigen kann an welchem datum das ganze erstellt wurde und hier kann ich dann mit uns einen entry created und jetzt möchte kriege ich hier ein anderes datum format und zwar wie ich hier das was in der datenbank entsteht und ich möchte das ganze um formatieren also kann ich hier die methode format benutzen weil ich hier in daytime objekt bekommen und jetzt kann ich hier das ganz normale format benutzen also das format was ich gerne haben möchte diesen hier zum beispiel und zum schluss natürlich kommt dann der body dafür verwendeten petek geben ihnen die klassik art text und gebe hier den body aus lasst uns mal schauen wie das ganze jetzt aussehen wird ich hatte einen kleinen tipp fehler ich hätte natürlich hier created hinschreiben sollen nicht created das fixen immer schnell also gerettet so heißt auch die spalte und jetzt siehst du hier die drei einträge in unserer datenbank und wenn ich jetzt hier ein neues eintrage test 4 test sap-titel 4 und dann test die vier dann soll das als erstes angezeigt werden das ist die hier oben es wurde am anfang angehängt jetzt ist es ja so die einträge werden zwar hier schön aufgelistet aber irgendwann werden wir zu viele einige haben schafft es nicht mehr die seite des ganze anzuzeigen du kannst nicht unendlich elemente anzeigen auf einer seite das heißt wir brauchen an der stelle eine platzierung die baggerung sitzen wir in unserem index controller mal um für die buggy nahrung muss ich zunächst mal eine variable definieren die heißt daneben limit und als limit setze ich mal hier einfach mal ne eins hin weil wir zurzeit eine datenbank noch nicht so viele einträge haben ich möchte quasi mit dem limit festlegen dass pro seite nur ein einziger eintrag angezeigt wird damit wir eben die parkierung besser umsetzen bzw testen können als nächstes muss ich herausfinden wie viele einige gibt es denn insgesamt in der datenbank von diesen gästebüchern einträgen dafür definiert eine weitere variable die eisbahn max and trees und da verwende ich von dem guest book entry von der us budget von dem model verwende ich die methode kommt mit dem account kannst du dann eben da ein auflisten wie viele eigentlichen gibt es in der datenbank und weil wir jetzt wissen wir haben in der datenbank vier einträge und wir haben ein limit von 1 können wir damit berechnen wie viele seiten gibt es denn insgesamt dafür nutzen eine ganz einfache rechnung wir sagen einfach hier max pages wäre dann in unserem fall max entries geteilt durch die mitte es würde prinzipiell so funktionieren allerdings wenn ich hier ein limit auf zwei sätzen würde oder man sagen wir mal 3 dann hätte ich hier eine komma zahl wir haben bei unseren einträgen und wir müssen ja immer die anzahl der seiten auf runden damit wir eine damit wird der letzten seite eben noch quasi freie einträge anzeigen können wenn ich das ganze abrunden würde dann würde die letzte seite verschwinden das heißt wir müssen hier auf wunden wir verwenden dafür dann die funktion self und bhp damit runden wir immer auf das problem ist aber an sale sale liefert mir hier eine flut zurück das ist doch hier oben also eine gleitkommazahlen und wir wollen dass jeder ganz com als eine ganze zahl sehen das heißt wir müssen dieses float in ein integer umwandeln dafür verwenden wir casting und zwar kannst du vorne einfach hier so hinschreiben in und damit aslan die gleitkommazahlen ein in eine ganze zahl umgewandelt den limit setze ich wieder zurück auf 1 so jetzt weiß ich wie viele seiten wir insgesamt haben werden mit den ganzen einträgen das problem ist aber wir kriegen immer noch alle einträge zurück das heißt hier müssen wir auch mal das ganze limitieren um da ein limit zu setzen brauchen wir noch ein paar weitere variablen wir müssen zunächst einmal auch herausfinden wer auf welcher seite befinden wir uns aktuell das können wir aus dem request auslesen und zwar wird das ganze nachher so funktionieren ich zeig dir das mal kurz wir werden jede einzelne seite über die url hier augen bestimmen also wenn du in der url page ist gleich zwei reihen schreibst dann wirst du auf der seite 2 sein wenn du page gleich einst aufwuchs bis dr seite eins und so weiter das heißt wir wollen im nächsten schritt diese page variable irgendwie in unserem controller auslesen das können wir machen wenn wir indem wir einfach hinschreiben pagewizz gleich rockwest und dann page damit lesen wir das ganze eben aus der url heraus jetzt ist das so wenn page nicht angegeben ist dann kriegen wir per default einfach eine neue zurück weil du kannst hier zweiten parameter an die folgt definieren und dann hätten wir eine neue und miteinander können wir halt schlecht rechnen das heißt wir müssen das ganze so forcieren dass da immer eine zahl rauskommt das heißt ich sage wenn page nicht angegeben ist dann returner hier eine 1 also wir kriegen halt immer mindestens eine eins raus oder eben das was in der url drin steht aber das was in der url drin steht da könnte ja alles mögliche drin stehen wir könnten da zum beispiel auch als der einschreiben oder test 1 23 deshalb müssen wir das ganze noch mal in einen integer umwandeln damit wir eben immer nur zahlen aus geben das heißt wenn jemand hier zum beispiel ein 23 testreihen schreibt dann steht in page wirklich nur ein zwei drei drin aber eben nicht test wenn jemand einfach nur testreihen schreibt dann steht da stattdessen eine null mit einer null können wir aber leider nichts anfangen wir wollen immer das aus page entweder eine 1 rauskommt oder höchstens max pages dafür können wir jetzt ein paar funktion von bhp benutzen zwar die min und max methoden lasst uns mal kurz die page variable überschreiben der scheiben page ist gleich max 1 page das heißt übersetzt wenn wir jetzt in der url für page im text reinschreiben dann kriegen wir hier in page eine null heraus und durch diese max funktion würde dann aber eine eins am ende rauskommen weil eine 1 größer ist als eine null und max liefert immer die größere variable zurück oder die größere zahl das gleiche müssen wir jetzt wiederum auch auf max pages anwenden mit einer anderen funktion und zwar min hier gehen wir einmal mit an als erster parameter wird dann eben das hier übergeben und zwei parameter übergeben wir max pages das hat dann den vorteil dass wir eben die kleinere zahl von diesen beiden parametern zurückbekommen das heißt wenn jemand den page eine million or 1 schreibt wir aber nur 3 max pages haben dann kriegen wir nur drei zurück und somit haben wir quasi page an eingeschränkt mit dieser page können dir jetzt nämlich einen offset ermitteln also ab welchen datensatz sollen wenn die daten angezeigt werden denn wenn du auf der seite 2 bis möchtest du ja halt eben nicht in aller erster beitrag anzeigen sondern erst den ab seite 2 und den offset können wir auch mal kurz berechnen das wäre dann einfach aussieht ist gleich page mal limit allerdings haben wir hier das problem dass wir immer bei page einer 1 zurück kriegen also mindestens eine eins maximal eben die max pages und dann würden wir immer einen falschen offset kriegen wir müssen also die page einmal auf null wieder zurücksetzen das heißt ich setze das ganze in klammern und zieht davon einen eine 1 ab dh wenn wir jetzt in page eine 1 haben wird davon 1 abgezogen sind wir bei null und 0 1 ist eben null auf der seite 2 bin ich dann hätte ich dann hier eine eins raus bekommen und 1 x limit dann hätten wir 1 und somit würden wir dann immer ein offset einen korrekten oft setzen so und jetzt haben wir diese ganzen variablen und die können wir nämlich sitzen das curry übergeben ich bin ich mal hier kurz mal so um damit dass ein bisschen schöner aussieht und wir können als nächstes hier mal den offset setzen indem wir die methode offset aufrufen wir geben ihr offset und natürlich auch den limit das wäre dann so limit und somit würde ich im ersten schritt eben nur gewisse einträge von einer speziellen seite anzeigen das testen ja mal kurz das heißt wir nicht jetzt die startseite aufrufe sollte ich nur einen einzigen eintrag sehen so jetzt bin ich auf der startseite und du siehst es gibt hier nur einen einzigen eintrag und ich kann jetzt hier page ist gleich zwei zum beispiel in schreiben habe ich dann den dritten eintrag das ganze auch mit page 3 page4 und bei page sagen wir mal 10 sehe ich immer noch den letzten eintrag weil das liegt halt in unserem minden wehrt er wird halt eben die max pages nicht überschreiten das heißt prinzipiell funktioniert unsere paketierung schon mal was uns aber jetzt fehlt es eben eine eine eigene kleine juli wo ihr eben verschiedene pages sehen und dann auch sehen können auf welcher befinden wir uns gerade und so weiter und das machen wir dann im nächsten schritt wir benötigen zwei variablen in unserem view damit wir ebenso eine radierung darstellen können als erstes wollen wir die max pages übergeben damit können wir dann ebenso eine packung generieren und wir wollen auch die page übergeben die nenne ich mal in diesem fall carlens page in unserem template damit können wir dann eben die aktive page oder die aktuelle page irgendwie auch mal farblich darstellen also machen wir das mal im nächsten schritt in der index plate bhp baue ich mal die ba die nieren hier unter den ganzen einträgen 1 wir wollen die partie nie rung nur dann anzeigen wenn wir mindestens wenn wir mehr als eine pages überhaupt haben das heißt ich baue hier kurzes statement ein und abfrage ab ist max pages größer 1 erst dann zeigen wir eben die parkierung davor wollen wir die jetzt gar nicht sehen was für ein hat der müll kommt hier rein dem kopiere ich mir einfach mal von busuu.com auf der seite wird bus stop kann ich hier kurz auf die dogs klicken dann suche ich hier nach party nation da gibt es eine übersicht da klicke ich drauf und hier sind so ein paar beispiele für die parkierung und ich finde diese hiermit den icons am schönsten das heißt ich gucke mir diesen ganzen html-code und übertrage das ganze halt ihr meine index blade bhp so und hier müssen wir ein paar sachen anpassen damit das ganze eben funktioniert zunächst mal will ich die erste seite und die letzte seite eben verlinken und zwar verwenden wir hier in dem harry wieder die gleiche funktion die wir hier im forum benutzer mit der route also häufig braut auf übergebe hier den namen index und dann kann ich hier ein paar parameter übergeben und zwar das was per url halt eben mitgeliefert wird und wir wollen hier eine page angeben und wir übergeben mal wir übergeben die kampage - 1 also wir wollen halt eine seite zurück gehen und wir wollen auch natürlich auch wie hier einen dritten parameter sitzen noch fonds damit wir eben eine relative url haben und keine absolute url so bei demnächst da machen wir wieder das gleiche kopieren das einfach mal und hier sagen wir karl page +12 diable die kommt ja daher weil wir die hier definiert haben so und jetzt haben wir quasi das ganze programmiert dass wir 1 weitergehen und 1 vor und einen zurück gehen können in unserer regierung als nächstes wollen wir uns mal diesen mittleren blog generieren lassen dafür verwenden wir eine einfache vor schleife in blade da scheinen wie red vor dann können wir auch sagen page ist gleich 1 page kleiner gleich max pages page + + s halt ganz normale vor schleife machen wir noch ein end vor dahinter um das ganze abzuschließen und kopieren diesen teil wird über den rest hier können wir löschen und auch hier wieder wir erstellen wieder eine route für den link kopieren das ganze hier rein und diesmal verwenden wir hier nicht die kampage seien einfach nur page variable und ohne engen plus dahinter und das was wir hier ausgeben das wird auch dann die page sein ich bringe mal hier auch mal ein bisschen um damit man das ganze besser sehen kann also wer mehr in die unterredung da drin ist ein a so würde das ganze aussehen jetzt haben wir hier einen link testen wir das ganze mal kurz aus du siehst hier unter unseren einkriegen die prämierung und wir können jetzt eine seite zurück gehen wir sind jetzt auch paige 3 page 2 und so weiter also du kannst noch mal zurück springen page 0 da geht es nicht weiter als page 0 und dann können wir wieder auch in die andere richtung und sich bewegen jetzt seid ja so du weißt halt nicht auf welcher seite du dich gerade befindest das wollen wir auch hierbei kurz darstellen dafür gehen wir hier in das in die klasse rein und bauen hier ein kleines statement und so fragen wir ab page ob das die cullens page ist wenn es der fall ist dann setzen wir die klasse active und schließen das ganz mit dementis ab wenn ich jetzt auf der ersten seite bin pages gleich eins dann siehst du eins wurde aktiv gesetzt wenn ich dann weitergeht pack 2 sp2 aktiv und so weiter und du siehst wir haben hier eine prämierung jetzt ist es ja so der limit ist hier im quellcode festgelegt und das ist eigentlich eine nicht schöne sache normalerweise setzt man solche speziellen variablen in weyhe mit variablen 1 das heißt in der endphase sollte eigentlich der limit definiert sein damit man das ganze eben einfach konfigurieren kann und das machen wir jetzt im nächsten schritt wir schreiben jetzt hin die elf variable ganz nach unten hin limit ist gleich 1 und diese entweder lesen wir jetzt in unseren index controller aus das können wir mit der bhp funktion 11 umsetzen wir können die funktion 11 aufrufen hier daneben limit verwenden damit wird dann aus der globalen variable 11 der limit ausgelesen das problem hierbei wäre aber wenn limit zum beispiel den wein und variablen nicht gegeben ist dann hätten wir hier bei den max pages ein problem weil dann würden mitgeteilt durch null rechnen und das würde zu einem fehler führen also division bei zero das heißt wir müssen hier auch mal einen maximalen wert auch ersetzen und zwar eins das heißt wenn limit nicht gesetzt ist dann kommt dann im limit hier immer eine eins heraus ansonsten kommt kommt der größere wert aus limit heraus und somit würde dann max pages immer korrekt berechnet werden testen wir das ganze noch mal kurz aus wir haben immer noch unsere vier seiten ich gehe jetzt sind hier in weimar ii a ble und setzte mal den limit auf zwei und wir müssten jetzt weniger also mehr einträge haben und weniger pages das heißt prinzipiell funktioniert das alles und wir haben unser gästebuch jetzt umgesetzt lasst uns aber noch mal kurz in das template reingehen und das template ein wenig auf folgen denn wenn du dir das template nur anschaust sieht das doch schon unübersichtlich aus das heißt lasst uns mal die ganzen blöcke in einzelne sap templates auslagern und diese dann hier einbinden beginnen wir zunächst mal mit den eros die können wir in einer eigenen datei auslagern wir erstellen eine neue datei die heißt dann arrows blade php und da tragen wir schneiden wir alles raus und übertragen das in die arrows plate hinein und jetzt können wir hier im haupt template einfach hinschreiben at include und hier können wir dann den namen der datei übergeben die wir in klugen möchten dass wir dann in unserem fall heraus das gleiche wollen wir auch für die success messages machen den bezeichnungen flash message das heißt ich erstelle eine weitere datei die nicht flash message blade php schneide wieder hier alles raus übertrage das sind die flash message und in der index plate schreibe ich hier wieder and include flash message dann das formular können wir auch natürlich in einer eigenen datei auslagen das heißt ich erstelle datei die nenne ich mal vorm blade php schneidet das wieder hier alles raus übertrage das ins formular und in kloten wieder die ganzen einträge ich möchte jetzt nicht das komplette feature übertragen sondern einfach nur für den einen einzigen eintrag das heißt ich erstelle ein neue judy heißt dann entry plate bhp da nehme ich einfach nur das alles raus und übertrage das alles sind die entry plate php und kann hier dann ein ebt include aufrufen und zwar entstehen und dann bleibt jetzt nur die paketierung über das heißt dieser stelle noch ein weiteres template das heißt an die nation und den die parkierung übertrage ich das ganze schiff statement eintragen und dann wieder ein add-in klute und wie du jetzt sehen kannst du die index.php wesentlich aufgeräumter weil wie einzelne elemente included haben und wir können zum beispiel arrows und flash messages jetzt auch in anderen templates wiederverwenden das heißt du kannst dann ein einziges mal in deine hose blade das ganze stylen und die ganzen fehlermeldungen werden in allen deinen seiten gleich aussehen als nächstes will ich mal den index controller ein wenig aufholen weil der ist jetzt schon ein bisschen größer geworden und etwas unübersichtlich und es gibt ein paar dinge die man halt besser oder bzw schöner umsetzen kann in lauda will speziell gefällt mir dieser block nicht mit diesen wendekreis gleich post ist dann kommt die ganzen validierungen und so weiter die validierungen die kann man in eine eigene request klasse übertragen und die dann eben wieder verwenden das heißt ich erstelle unter http einen neuen ordner der heißt dann quests und hier stelle ich ein request speziell für diese validierung das heißt ich erstelle neue datei die heißt dann guest book entry request php und hier liegen wir dann eine neue klasse an erst mal das namespace definieren das wäre ja app http weil wir uns im http ordner befinden und requests und die klasse heißt guest book entry request diesen requests können wir von einer speziellen klasse ableiten und zwar vom request durch diese form request klasse haben wir jetzt die möglichkeit eine funktion zu definieren public function rules und hier können wir eben unsere regeln definieren für die validierung das heißt ich kann jetzt hier quasi diesen ganzen ärger übertragen in die hools funktion und das müssen wir natürlich auch zurückgeben also ein return jetzt können wir nämlich diesen rück west in einer weiteren methode wieder verwenden statt dem normalen request können wir es den http book entry quest benutzen und dadurch können die werden dann die ganzen validierungen eben indem requests definiert dann haben wir quasi einen einen kleineren controller mit weniger code drin und ich erstelle zum speichern der einträge am besten einfach eine weitere methode public function safe action und die kriegt dann eben diesen guest book entry request und jetzt kann ich eben diesen ganzen bereich übertragen in die safe action und diese frage die kann ich mir sparen jetzt ist das ja so ich habe ja im quest die ganzen validierungs regeln definiert das heißt ich brauche das hier alles gar nicht mehr zu machen ich kann hier einfach die methode validated aufrufen also mit de ganz hinten und so würde dann eben meine route aussehen und du siehst jetzt haben wir halt wesentlich weniger code in unserem controller die safe action die müssen wir auch natürlich konfigurieren in unseren routen weil sonst kein klarer will diese wut oder eben nicht das heißt wir gehen mal kurz [Musik] ins web bhp und stellen das ganze ein wenig um hier habe ich ja davor gesagt sowohl die jet methode als auch die post methode dürfen auf den index control auf die index action gehen jetzt haben wir nicht mehr den fall sondern jetzt ist das ja so wir wollen dass nur die kette variable auf die index action geht und die postfiliale auf die safe action dass ich kopierte das ganze und übertrage das hier schreibe hier ein poster und schreibe hier die safe action rein und ich muss natürlich einen anderen namen definieren da heißt dann in unserem fall ist safe entry weil ich das ganze jetzt so definiert habe kann ich das ganze noch mal ein wenig abkürzen zwar hier könnte ich hinschreiben klammer auf und hier könnte ich hinschreiben post klammer auf wenn man sage ich quasi die geht anfrage geht dann die index action die post anfrage geht dann die safe action die neu angelegte route die safe entry die müssen jetzt endlich auch im fond template übertragen damit wir eben dahin unseren postreg fest weiter das ist das geht nicht mehr gut index müssen das ganze auf die safe entry übertragen die prämierung die bleibt aber weiterhin weil wir ihr das über gap krieg west anfragen wollen ja nur das formular an die safe entry methode weiterleiten das heißt wenn ich jetzt mir die startseite wieder angucke wieder einen weiteren test eintrag mache wie den sattel und so weiter druck auf speichern alles wurde erfolgreich abgespeichert unser index controller ist wesentlich kleiner geworden und somit hätten wir dann ein gästebuch in lara welt programmiert so ich denke da konnte es jetzt bei diesem tutorial lernen wie man grundlegend mittlerweile arbeitet wie man damit formular darstellt wie man diese validiert und auch in die datenbank abgespeichert und jetzt kommt sie kleine hausaufgabe versucht man das gästebuch zu erweitern ein gästebuch hat einen kleinen nachteil und zwar wird das oft von spam bots ausgenutzt und die schreiben dann ihren sparen da rein erweitert doch mal einen gästebucheintrag mit einem active fleck und setzte diesen daneben auch fonds per default und dann anschließend schaltete eben deine gästebucheinträge frei also das heißt in der datenbank würdest du dann eben den fleck auf true setzen dass es dann aktiv wäre und nur die aktiven beiträge würden auf der webseite angezeigt werden die auflösung zu der hausaufgabe kannst du dir auch gegen eine kleine gebühr erwerben unten in der video beschreibung ansonsten hoffe ich das video hat dir gefallen vergiss nicht in die kommentare seien zu schreiben was du als nächstes sehen möchtest und wir sehen uns beim nächsten video bis dahin tschüss