[Σεμινάριο] [Kohana: Ένα ελαφρύ πλαίσιο PHP] [Brandon Liu] [Πανεπιστήμιο του Χάρβαρντ] [Αυτό είναι CS50.] [CS50.TV] Γεια σε όλους. Το όνομά μου είναι Μπράντον. Είμαι μια junior εδώ στο κολέγιο κάνει επιστήμη των υπολογιστών, και σήμερα θα πάμε να μιλήσουμε για Kohana, το οποίο είναι ένα PHP-πλαίσιο ανάπτυξης ιστοσελίδων. Σήμερα πρόκειται να είναι ένα ζωντανό σεμινάριο κωδικοποίησης, έτσι είμαι βασικά πρόκειται να περάσουν 5-10 λεπτά εξηγώντας τι Kohana είναι, και, στη συνέχεια, είμαι κυριολεκτικά πρόκειται να χτίσει ένα σούπερ απλό blog για σας εδώ κυριολεκτικά από το μηδέν. Εμείς πάμε για να κατεβάσετε τον κώδικα από την ιστοσελίδα Kohana, και θα πάμε για να αρχίσει η δημιουργία ενός blog, και ελπίζω ότι θα είναι πολύ διδακτική, γιατί θα δείτε ίσως ίσως θα κάνουν κάποια λάθη, και θα δεις να ανακάμψει από αυτούς, ή θα δείτε την διαδικασία της σκέψης μου, όπως έχω χτίσει μέσα από αυτό το blog, και εν τω μεταξύ, θα πάρετε επίσης εξοικειωμένοι με το ίδιο το πλαίσιο. Ας ελπίσουμε ότι αυτό θα είναι ένα πολύ διδακτική άσκηση. Πρώτον, τι ακριβώς είναι το πλαίσιο; Εάν έχετε ήδη λάβει CS50 μέχρι στιγμής, δεν έχουν πραγματικά δουλέψει με οποιοδήποτε πλαισίων ακόμα, και το θέμα είναι αυτό. Πιθανόν να έχετε κάνει 1 ανάπτυξης ιστοσελίδων από το chipset ήδη, και ας πούμε ότι θα συνεχίσει να οικοδομήσουμε ιστοσελίδες και να κρατήσει ιστοσελίδες κτίριο. Θα αρχίσετε να παρατηρήσετε μερικά πράγματα. Το πρώτο πράγμα που θα παρατηρήσετε είναι ότι είστε πιθανώς να κάνει τα ίδια πράγματα ξανά και ξανά όλη την ώρα, πράγματα όπως τον καθαρισμό των δεδομένων που εισάγει ο χρήστης, πράγματα όπως την οργάνωση των αρχείων σας σε ένα συγκεκριμένο τρόπο. Το άλλο πράγμα που θα παρατηρήσετε πιθανώς, επίσης, είναι ότι ο κωδικός σας μπορεί να αρχίσει να γίνεται πολύ, πολύ βρώμικο, και μπορείτε να το αφήσετε ακατάστατο και να έχουμε μόνο ένα πολύ σκληρό χρόνο διατηρώντας το, ή μπορείτε να αρχίσετε να δομήσει τον κωδικό σας και καθιστώντας το modular με συγκεκριμένους τρόπους για να καταστεί πιο διατηρήσιμη. Αυτό είναι όπου πλαισίων web ουσιαστικά ήρθε in Αυτοί οι άνθρωποι που έχτισαν πολλές ιστοσελίδες, όπως είπαν, «Δεν πρέπει να επαναλάβετε αυτό κάθε φορά που θα οικοδομήσουμε μια ιστοσελίδα." «Γιατί δεν πρέπει απλά να κάνουμε ένα πακέτο που κάνει όλα αυτά τα πράγματα για εσάς κάθε φορά που θέλετε να οικοδομήσουμε μια ιστοσελίδα; " Και, έτσι ώστε όταν κάνετε μια νέα ιστοσελίδα, μπορείτε απλά να επικεντρωθεί σε αυτό ακριβώς η συγκεκριμένη ιστοσελίδα είναι περίπου. Δεν χρειάζεται να επαναλάβω όλα τα διάφορα διαμόρφωση και ο διαχωρισμός των κωδικών και ξαναγράφοντας κώδικα ότι συχνά πρέπει να κάνετε όταν θέλετε να κάνετε ιστοσελίδες. Η ιδέα είναι ότι ένα πλαίσιο σας επιτρέπει να γράφετε κώδικα υψηλότερου επιπέδου χωρίς να χρειάζεται να ανησυχείτε για τις λεπτομέρειες κατώτερου επιπέδου. Μια λεπτομέρεια χαμηλότερου επιπέδου θα μπορούσε να είναι κάτι σαν που ασχολούνται με τον καθαρισμό των δεδομένων που εισάγει ο χρήστης. Αυτό είναι κάτι που δεν πρέπει να πρέπει πραγματικά να ανησυχούν. Θα πρέπει να επικεντρωθεί σε ό, τι κατανομή ιστοσελίδα σας είναι πραγματικά περίπου. Εξαλείφει πολύ κώδικα στερεότυπο. Πρόκειται για μια αρχιτεκτονική για το έργο σας. Η πιο δημοφιλής θα ήταν Model-View-Controller, που Πάω να μιλήσω για σε ένα δευτερόλεπτο. Και πολλές φορές αυτά τα πλαίσια ενσωματώνουν μια σειρά από διαδικασίες, κανόνες και τις βέλτιστες πρακτικές για να μπορείτε να χρησιμοποιήσετε έτσι ώστε όταν θα εγκρίνει το πλαίσιο web θα πρέπει να γράψετε τον κωδικό σας σε ένα συγκεκριμένο τρόπο, και είναι γενικά ένα συμφωνημένο σύνολο αρχών από την κοινότητα που είναι γενικά αποδεκτό ότι είναι ένας καλός τρόπος συγγραφής κώδικα. Κάνει τον κωδικό σας πιο διατηρήσιμη, πιο εύχρηστο, ούτω καθεξής και ούτω καθεξής. Και τέλος, το πράγμα που θέλω να τονίσω για πλαίσια σε σχέση με τις βιβλιοθήκες είναι η ιδέα για την αντιστροφή του ελέγχου, και το πράγμα είναι αυτό. Η διαφορά μεταξύ ενός βιβλιοθήκη και ένα πλαίσιο είναι ότι με μια βιβλιοθήκη είστε ακόμα γράφει το κύριο πρόγραμμα, και είστε το είδος επίκλησης της βιβλιοθήκης και καλείται η βιβλιοθήκη για να κάνω κάτι για σένα. Η διαφορά μεταξύ ενός βιβλιοθήκη και ένα πλαίσιο είναι ότι το πλαίσιο αρχίζει με τον έλεγχο, και επικαλείται τον κωδικό σας, ώστε να μπορείτε να σκεφτείτε από το ως - γι 'αυτό λέγεται ένα πλαίσιο - το πλαίσιο παρέχει αυτό το πλαίσιο και τη δομή για τον κωδικό σας, και να συμπληρώσετε τις τρύπες, και αυτό θα γίνουν περισσότερο εμφανή σε ένα δευτερόλεπτο όταν με βλέπετε να αρχίσετε να γράφετε κώδικα μέσα στο πλαίσιο της. Θα δείτε ότι είμαι συμπληρώνοντας τα κενά, και το πλαίσιο είναι το είδος του ελέγχου όλα τα κινούμενα κομμάτια, και πρέπει να θέσει τα κομμάτια στις σωστές θέσεις. Σήμερα θα πάμε να μιλήσουμε για Kohana, η οποία είναι μία από τις πολλές PHP πλαισίων. Υπάρχουν πλαίσια web, και υπάρχουν και αυτοί σχεδόν σε κάθε γλώσσα, και είμαι πάρει Kohana επειδή Kohana είναι αναμφισβήτητα και γενικά αναγνωρίζεται ως ο πιο εύκολος πλαίσιο PHP για να πάρει. Είναι το πιο ελαφρύ. Υπάρχουν και άλλοι εκεί έξω που έρχονται με πολλά, πολλά άλλα χαρακτηριστικά, αλλά τείνουν να είναι πιο δύσκολο να πάρει. Και τέλος, Kohana χρησιμοποιεί την αρχιτεκτονική MVC. Είναι αρκετά ελαφρύ ώστε να μπορέσουμε να οικοδομήσουμε κυριολεκτικά ένα έργο ακριβώς εδώ μπροστά από τα μάτια σας, και μπορείτε λίγο πολύ ακολουθήστε κατά μήκος αρκετά εύκολα. Ποια είναι η αρχιτεκτονική MVC; Ξεχωρίζει για Model-View-Controller, και ίσως αν νομίζετε σχετικά με τον κώδικα που έχετε γράψει μέχρι στιγμής για ορισμένες από psets ανάπτυξης ιστοσελίδων σας ενδέχεται να μπορείτε να δείτε μερικά από αυτά, αλλά συνήθως όταν αρχίσετε να γράφετε μια πιο σύνθετη εφαρμογή web, η διαίρεση μεταξύ αυτών των 3 τμημάτων γίνεται όλο και πιο εμφανής. Εγώ που το MVC εδώ είδους, όπως μια στοίβα, και συχνά θα ακούσετε άνθρωποι μιλούν για στοίβες στην ανάπτυξη ιστοσελίδων, και αυτό είναι για να απεικονίσουν την ιδέα ότι κάθε στρώμα, κάθε συστατικό πραγματικά προσπαθεί να επικοινωνεί μόνο μεταξύ 2 άλλα συστατικά. Κάποιος πρόσβαση την ιστοσελίδα σας ως πελάτης ή ένα πρόγραμμα περιήγησης. Αλληλεπιδρούν με το πρόγραμμά σας με τον κωδικό του άποψη. Ο κωδικός θέα αλληλεπιδρά με τον ελεγκτή. Ο ελεγκτής αλληλεπιδρά με το μοντέλο, και το μοντέλο αλληλεπιδρά με τη βάση δεδομένων SQL. Και δεν υπάρχει hopping στο μεταξύ αν γράψετε τον κωδικό σας σωστά. Τι σημαίνουν αυτά τα πράγματα να κάνω; Το μοντέλο είναι ουσιαστικά το κομμάτι του κώδικα που ασχολείται με τα δεδομένα σας. Κάτι που ασχολείται με τη βάση δεδομένων σας, με τα αντικείμενα που μπορείτε να αποθηκεύσετε, ή κατά την ανάκτηση των εν λόγω αντικειμένων στη βάση δεδομένων, ότι είναι όλα από το μοντέλο. Ίσως έχετε αντικείμενα της βάσης δεδομένων σας. Εμείς πάμε για να δημιουργήσει ένα μοντέλο που έχουν να κάνουν με τις θέσεις, έτσι μια θέση μπορεί να έχει κάποια χαρακτηριστικά σε αυτό. Μπορεί να έχετε λειτουργίες γύρω από την αποθήκευση των μηνυμάτων ή κατά την ανάκτηση των μηνυμάτων ή να φιλτράρουν τα μηνύματα και ούτω καθεξής και ούτω καθεξής, και αυτό είναι όλος ο κώδικας που χειρίστηκε από το μοντέλο. Ο ελεγκτής είναι το είδος της λογικής της εφαρμογής, και πολλά διαφορετικά πράγματα μπορούν να πάνε στη λογική της εφαρμογής. Αν μιλάμε για ένα διαφορετικό API, ότι μπορεί να είναι όταν έχεις να κάνεις με την λογική της εφαρμογής. Εάν προσπαθείτε να πρέπει να φέρει σε δεδομένα από πολλαπλές διαφορετικά μοντέλα και πρέπει να τα συνδυάσετε με κάποιο τρόπο, που συχνά μπορεί να γίνεται από τον ελεγκτή. Για παράδειγμα, στο Facebook, αν κάποιος φίλος, τότε ίσως η πράξη της δημιουργίας αυτής της σχέσης μπορεί να γίνει από τον ελεγκτή. Και τέλος, η θέα είναι ο κώδικας που παράγει είναι ό, τι μπορείτε πραγματικά να δείτε. Πολλές φορές νομίζω ότι στα psets CS50 δεν πραγματικά να σας ενθαρρύνουμε τα παιδιά να διαχωρίσετε αυτά τα 3 πράγματα. Θα πρέπει πιθανώς να έχουν αυτό το μεγάλο, μεγάλο αρχείο, όπου στην κορυφή κάνετε κάποιο ερώτημα SQL και ίσως να κάνουμε κάποια επεξεργασία σχετικά με τα δεδομένα που ανακτώνται από τη βάση δεδομένων, και στη συνέχεια να έχετε όλα σας HTML στο κάτω μέρος. Και μπορείτε να διαπιστώσετε ότι έχετε δημιουργήσει όλο και περισσότερες σελίδες ότι θα πάμε να έχουν κάποια επανάληψη κώδικα, και επίσης, το θέμα είναι το αρχείο σας είναι πραγματικά μεγάλη και μακρά και γίνεται δυσκίνητο να διαχειριστεί. Ο λόγος για τον οποίο MVC είναι τόσο καλά θεωρηθεί είναι για πολλούς λόγους. Το πρώτο πράγμα είναι κάτι που ονομάζεται διαχωρισμός των ανησυχιών η οποία είναι η ιδέα ότι όταν έχεις - ιδανικά 1 κομμάτι του κώδικα πρέπει να κάνει 1 πράγμα και να το κάνουμε πολύ καλά, και δεν πρέπει να συνδυάζουν κομμάτια κώδικα που κάνουν ανόμοια πράγματα. Για παράδειγμα, να προβάλετε και κωδικός μοντέλου, δεν έχουν πραγματικά να σχετίζονται. Δεν χρειάζεται να είναι στα ίδια αρχεία, οπότε όταν μπορείτε, να διαχωριστούν από έτσι είναι εύκολο να διατηρηθεί. Το άλλο πράγμα είναι η επαναχρησιμοποίηση κώδικα. Μπορείτε να βρείτε τον εαυτό σας γραπτώς το ίδιο ερώτημα SQL ή να κάνει παρόμοια ερωτήματα που θα μπορούσε να αντληθεί σε 1 λειτουργία, και αυτή είναι η ιδέα πίσω από τα μοντέλα και των ελεγκτών, έχοντας σε ξεχωριστή λειτουργία που μπορείτε να χρησιμοποιήσετε ξανά σε διαφορετικά σημεία στο έργο σας. Και, τέλος, ότι είναι συνδεδεμένη με την ξήρανση τον κωδικό σας, ή όχι επαναλαμβάνοντας τον εαυτό σας, μην επαναλάβει τον εαυτό σας. Αυτό είναι πολύ κατανοητό στην ανάπτυξη. Όποτε μπορείτε, δεν θέλετε να επαναλάβει τον εαυτό σας, γιατί αν εσείς οι ίδιοι επαναλαμβάνω,  είναι πολύ πιο δαπανηρό να διατηρηθούν. Αν θέλετε να αλλάξετε 1 πράγμα, θα πρέπει να το αλλάξετε παντού, και που οδηγεί σε σφάλματα, και είναι φρικτό. Εντάξει. Οποιεσδήποτε ερωτήσεις μέχρι τώρα για Kohana καθόλου; Μεγάλη. Τώρα θα πάμε να βουτήξει στην ζωντανή συνεδρία κωδικοποίησης, και ελπίζουμε ότι όλα θα πάνε καλά. Πάω να χτίσει ουσιαστικά αυτή την ιστοσελίδα σε έναν από τους απομακρυσμένους διακομιστές μου, και αυτόν τον τρόπο εσείς μπορούν επίσης να δείτε την ιστοσελίδα και την πρόσβαση στην ιστοσελίδα, καθώς επίσης και το περιβάλλον είναι καλύτερη Ρυθμίζεται από απομακρυσμένο υπολογιστή μου, επειδή τρέχει Linux αντί του OS X. Είμαστε κυριολεκτικά πρόκειται να ξεκινήσει. KohanaFramework.org. Πάω να κατεβάσετε τον κώδικα από το δικτυακό τόπο. Πάω να αντιγράψετε τη διεύθυνση του συνδέσμου, πηγαίνετε στο server μου, να το κατεβάσετε, και πάω να το εξαγάγετε. [Φοιτητής] Ποιο είναι το μεγαλύτερο που μπορείτε να κάνετε το κείμενο; [Brandon Liu] είναι ότι η καλύτερη; [Φοιτητής] Είναι αυτό εφικτό; [Brandon Liu] Ναι, αυτό είναι εντάξει. Έχω κατεβάσει ένα αρχείο ZIP και αποσυμπιεστούν ότι σε έναν κατάλογο που ονομάζεται Kohana, και θα πάμε για να μετονομάσετε αυτό το CS50-Kohana, και ας πάμε μέσα Awesome. Εδώ θα δείτε ένα σωρό από διαφορετικά αρχεία. Οι περισσότεροι από εσάς μπορεί να αγνοήσει - Μπήκαμε δεν πρόκειται να περάσουν από κάθε αρχείο που είναι εδώ λόγω του περιορισμένου χρόνου μας, αλλά γενικά όταν εγκαθιστάτε Kohana, το πρώτο πράγμα που κάνετε είναι να πάτε στον κατάλογο, και θα κάνει ουσιαστικά κάποιες δοκιμές περιβάλλοντος και εταζέρα για να βεβαιωθείτε ότι το περιβάλλον σας έχει ρυθμιστεί σωστά για να τρέξει Kohana και βεβαιωθείτε ότι όλα είναι εντάξει. Μπορείτε να δείτε τα περισσότερα πράγματα που πέρασαν, αλλά γενικά μπορείτε πάντα να αντιμετωπίσετε αυτό το πρόβλημα 1 όπου καταγγέλλει ότι ορισμένοι δεν είναι εγγράψιμος, και αυτό γιατί ορισμένα δικαιώματα. Δεν ξέρω πόσο εσείς έχετε μάθει σχετικά με τα δικαιώματα του αρχείου σε CS50, αλλά αν το κάνετε web development, θα πάμε να τρέξει σε αυτό το θέμα πολύ. Πάω να καταστεί εγγράψιμος και νομίζω ότι πρέπει επίσης να - εκεί πάμε. Εντάξει, έτσι τώρα μπορείτε να δείτε όλα πέρασαν, και τώρα θα σας πω για να μετονομάσετε το αρχείο install.php. Πάω να μετακινήσετε το αρχείο install.php να installed.php, και τώρα αν μου ανανεώσετε, μου δίνει κάποιο λάθος, και αυτό είναι όπου η debugging μπαίνει Αυτό είναι όπου μπορείτε να δείτε τι πραγματικά πρόκειται να συμβεί. Το πράγμα είναι, από προεπιλογή, Kohana υποθέτει ότι το έργο σας είναι στο ριζικό κατάλογο του τομέα σας, γι 'αυτό σας περιμένει για να είναι σε demo.brandonkliu.com. Έχουμε να πω ότι είναι πραγματικά σε έναν υποφάκελο. Είναι σε έναν υποφάκελο που ονομάζεται CS50 Kohana. Το πράγμα είναι, είναι παρερμηνεύοντας CS50-Kohana ως κάτι άλλο, το οποίο εγώ θα σας εξηγήσω σε ένα δευτερόλεπτο. Αλλά πρέπει να σας πω ότι είναι κάτι που είναι αναμενόμενο. Τι θα πάμε να κάνουμε είναι να πάμε σε αυτό το φάκελο που ονομάζεται bootstrap.php, που είναι ο φάκελος διαμόρφωση όπου πολλά διαφορετικά πράγματα που έχουν συσταθεί. Ανοίγω το επάνω. Τότε ίσως ένα από τα πρώτα πράγματα που θα κάνετε είναι να αλλάξετε τη ζώνη ώρας. Και τότε ας δούμε. Aha! Ακριβώς εδώ. Υπάρχουν ένα σωρό διαφορετικά λόγια διαμόρφωσης εδώ, αλλά το ένα που ψάχνω είναι αυτό το πράγμα που ονομάζεται URL βάσης, και εξ ορισμού να πάρω το θέσετε σε Kohana, αλλά Πάω να αλλάξει αυτό για να CS50-Kohana, και νομίζω ότι πρέπει να το διορθώσετε. Ναι, μεγάλη. Από προεπιλογή, για να δείτε ότι λειτουργεί, λέει, "Hello World". Πού ότι προέρχονται από? Πώς φτάσαμε στο Hello World; Πού ακριβώς είναι ο κωδικός που πραγματικά το έγραψε αυτό; Να κατανοήσουν ότι, εγώ θα εισαγάγει την έννοια αυτή ονομάζεται δρομολόγηση. Λίγο πολύ όλα τα πλαίσια Ιστού έχουν την έννοια που ονομάζεται δρομολόγηση, το οποίο είναι το κομμάτι του λογισμικού που θα χαρτογραφήσει μια συγκεκριμένη διεύθυνση URL σε ένα συγκεκριμένο κομμάτι του κώδικα στο πλαίσιό σας. Για παράδειγμα, αν έχετε κάποια διεύθυνση URL και να πάτε σε κάποια διεύθυνση URL, όπως foo.com / blog / all τότε τι είναι το πλαίσιο πρόκειται να κάνει - ή τουλάχιστον ό, τι Kohana πρόκειται να κάνει - είναι ότι πρόκειται να βρείτε μια κατηγορία που ονομάζεται blog ελεγκτή, και πρόκειται να εκτελέσετε τη λειτουργία που ονομάζεται δράση όλων. Ξέρω ότι είμαι μιλάμε για τάξη και τις λειτουργίες, και ξέρω ότι εσείς δεν αφορά τις κλάσεις και τις λειτουργίες ακόμα CS50, αλλά για τώρα, μπορείτε να σκεφτείτε τις κατηγορίες ως απλά μια ομάδα λειτουργιών, ένας τρόπος ομαδοποίησης των λειτουργιών μαζί. Αυτό είναι πραγματικά όλα όσα χρειάζεται να ξέρετε. Τώρα, αν κοιτάξουμε τη δομή του φακέλου μας, μέσα στο φάκελο της εφαρμογής υπάρχει και ένα άλλο φάκελο που ονομάζεται τάξεις, και οι άλλοι φάκελοι που ονομάζεται ελεγκτή και μοντέλο. Αν κοιτάξετε μέσα στο φάκελο ελεγκτή, βλέπουμε ότι υπάρχει ένα αρχείο που λέγεται Καλώς ήρθατε, και μπορείτε να δείτε εδώ είναι μια κατηγορία που ονομάζεται ελεγκτής Καλώς ήρθατε, και υπάρχει μια λειτουργία που ονομάζεται Δράση Index, και αυτό που κάνει είναι να θέτει το σώμα του την ανταπόκρισή σας στο Hello World. Αυτός είναι όπου ο κώδικας έχει αρχίσει να γράφεται. Το άλλο ερώτημα είναι, καλά, εγώ δεν πάω να μπλα, μπλα, μπλα, / welcome / index. Πώς μπορώ να καταλήγουν εδώ; Λοιπόν, αυτό είναι απλώς και μόνο επειδή εδώ στο κάτω μέρος της εκκίνησης αρχείο μας όπου θέσαμε διαδρομές μας μπορείτε να δείτε ότι θέτουν ορισμένες ρυθμίσεις για σας. Η προεπιλεγμένη ελεγκτής είναι Καλώς ήρθατε. Η προεπιλεγμένη ενέργεια είναι ο Δείκτης. Γι 'αυτό όταν βάζουμε τίποτα εκεί αυτόματα πήγε στο Welcome ελεγκτή και η Δράση του δείκτη. Πάντα νόημα μέχρι στιγμής; Τώρα, μπορείτε να κάνετε περισσότερα από ό, τι πήγαινε να Controller και μια συγκεκριμένη δράση. Μπορείτε επίσης να περάσετε παραμέτρους στον ελεγκτή. Ακριβώς όπως ένα παράδειγμα, Πάω να προσθέσετε και άλλη ενέργεια σε αυτόν τον ελεγκτή για να σας δείξω. Ας το ονομάσουμε αυτή την ενέργεια Echo, επειδή πρόκειται να σας πω ό, τι σας το δώσει, και έτσι είμαι βασικά πρόκειται να αρπάξει μια παράμετρος που πρόκειται να αποσταλούν μέσω εμού στο πρόγραμμα δρομολόγησης, και όπως μπορείτε να δείτε εδώ, αυτή τη γραμμή εδώ, μπορείτε να δείτε ότι Αυτό σημαίνει βασικά έχετε ελεγκτή, και έχετε ένα /, και έχετε ενέργεια, και έχετε μια άλλη /, και ότι πρόκειται να είναι παραμέτρους, και επειδή έχουμε αυτό το αναγνωριστικό όνομα μέσα σε παρένθεση γωνία, αυτό σημαίνει ότι είμαστε ονομάζοντας αυτό το αναγνωριστικό παραμέτρου. Αργότερα στον κώδικα ελεγκτή μου αν θέλετε να πάρετε μια λαβή αυτής της παραμέτρου, Μπορώ να χρησιμοποιήσω τον κώδικα που έγραψα, βρείτε την παράμετρο που ονομάζεται ID. Αυτό είναι ό, τι έκανα εδώ, και είμαι πρόκειται να επιστρέψει και να πει, «Είπατε ότι". Και έτσι τώρα αν πάω στην ιστοσελίδα μας, Πάω να cs50-kohana/welcome/echo/Helloooo-- Ω, αυτό είναι σωστό. Υπάρχει 1 βήμα άφησα έξω. Αυτό είναι μέρος της ζωντανής ιδέα κωδικοποίησης. Εδώ είναι 1 πράγμα. Ας δούμε. Έτσι, συνήθως από προεπιλογή με πολλές από αυτές τις εφαρμογές web θα πρέπει να συμπεριλάβετε αυτό το index.php πράγμα στη διεύθυνση URL σας, επειδή η ιδέα index.php είναι το είδος του σημείου εισόδου της αίτησής σας, αλλά φυσικά, αυτό είναι το είδος ενοχλητικό να έχουν. Δεν θέλετε να έχετε index.php εμφανίζεται στη διεύθυνση URL σας, και λίγο πολύ κάθε web πλαίσιο έξω από το κουτί έχει αυτό το πρόβλημα index.php, και έτσι θα πρέπει να λάβουν κάποια μέτρα για να είναι σε θέση να καταργήσετε αυτό. Και στην προκειμένη περίπτωση, τι θα πάμε να κάνουμε είναι να πάμε να χρησιμοποιήσετε ένα αρχείο που ονομάζεται. htaccess, και αυτό είναι κάτι που είναι ειδικά για το web server Apache, και μπορεί να κάνει τα πράγματα όπως ξαναγράψει URLs και τις διευθύνσεις URL ανακατεύθυνσης και ούτω καθεξής και ούτω καθεξής, και Kohana είναι αρκετά καλό για να παρέχουν ένα πρότυπο. htaccess αρχείο που μπορούμε να χρησιμοποιήσουμε. Όπως μπορείτε να δείτε, υπάρχει ένα αρχείο που ονομάζεται εκεί example.htaccess, και θα πάμε για να αντιγράψετε ότι για να. htaccess. Πάω να ανοίξει αυτό και να το επεξεργαστείτε, και ουσιαστικά να κάνει ένα σωρό διαφορετικά πράγματα. Η βασική γραμμή μπορεί να θέλετε να εξετάσουμε είναι ακριβώς εδώ. Η ιδέα είναι ότι αυτό δημιουργεί έναν κανόνα που λέει, "Εντάξει, ό, τι πληκτρολογείτε, βάλε index.php σε αυτό." Μπορείτε να δείτε ότι. Η. * Σημαίνει τίποτα, ταιριάζει με τίποτα, και στη συνέχεια το δεύτερο μέρος είναι index.php / $ 0, και $ 0 αναφέρεται σε ό, τι ταιριάστηκε στο παρελθόν. Μήπως αυτό έχει νόημα; Αλλά το πραγματικά βασικό πράγμα που θέλετε να αλλάξετε είναι η αλλαγή αυτής της βάσης ξαναγράψει, η οποία είναι η βάση URL. Το είδος του προϋποθέτει όπου εργάζεστε από το. Πάω να προσθέσετε CS50 Kohana σε αυτό, και με αυτόν τον τρόπο τώρα αν μπορώ να αφαιρέσω το index.php, θα πρέπει να λειτουργεί, και πάω να προσθέσω κάποιους αριθμούς να σας δείξω, ότι όντως το έργο. Ακούγεται καλό. Οποιεσδήποτε ερωτήσεις μέχρι τώρα; [Φοιτητής] Πως ήξερε να κάνει το 123; Είναι ότι ένα επιχείρημα; Ακριβώς. Μπορείτε να σκεφτείτε ότι ακριβώς όπως ένα επιχείρημα. Αλλά το παράξενο πράγμα, όμως, είναι ότι ο τρόπος που το κάνει Kohana είναι ότι δεν το κάνουν ακριβώς όπως ένα επιχείρημα. Θα πρέπει να το αρπάξει σαν αυτό. Θα πρέπει να πάρετε το αντικείμενο αίτησης και να ζητήσει την παράμετρο που το όνομά του ID, και ότι η ID όνομα προέρχεται από το αρχείο εκκίνησης ότι έδειξα νωρίτερα, και το αναγνωριστικό του όνομα ήταν σε αυτές τις γωνιακές αγκύλες, και αυτό είναι το πώς θα αρπάξει αυτές τις παραμέτρους. Awesome. Οποιεσδήποτε άλλες ερωτήσεις; Όπως είπα, οι ελεγκτές, που χειρίζονται λογική της εφαρμογής, έτσι ώστε να είναι 1 παράδειγμα, όπου μπορείτε να δείτε that's - Είναι πολύ βασικό, αλλά είναι ακόμα λογική της εφαρμογής, η ιδέα της αρπαγής της παραμέτρου και δημιουργώντας μια νέα σειρά που λέει, «Είπατε μπλα," και στη συνέχεια φτύσιμο ότι πίσω σε σας. Και γενικά αυτό που κάνετε είναι να δημιουργήσετε διαφορετικούς ελεγκτές. Μπορείτε να δημιουργήσετε διαφορετικούς ελεγκτές για τα διαφορετικά μέρη του δικτυακού σας τόπου. Σήμερα θα πάμε για να κάνει μια πολύ απλή ιστοσελίδα, και αυτό πρόκειται να είναι ένα πολύ βασικό blog. Εμείς πάμε για να κάνει ένα νέο χειριστήριο μόνο για τις θέσεις σε ένα blog. Στη συνέχεια, όμως, αν επρόκειτο να προσθέσω επίσης τις παρατηρήσεις στο blog post, τότε θα μπορούσε πιθανότατα να θέλουν να κάνουν ένα νέο χειριστήριο για τις παρατηρήσεις αυτές. Αν ήθελα να προσθέσω τους χρήστες, θα ήθελα να προσθέσω πιθανώς ένα νέο χειριστήριο για τους χρήστες, και σε γενικές γραμμές, η ιδέα είναι ότι κάθε φορά που έχετε ένα νέο μοντέλο, ένα νέο αντικείμενο δεδομένων που έχουμε να κάνουμε με, έχετε έναν ελεγκτή για το αντικείμενο δεδομένων. Σήμερα είμαστε μόνο πρόκειται να συνεργαστεί με 1 αντικείμενο δεδομένων, και ότι πρόκειται να είναι θέσεις, και, επίσης, μπορείτε να σκεφτείτε αντικείμενα δεδομένων που αντιστοιχούν στα τραπέζια. Γενικά κάθε πίνακας αντιστοιχεί σε 1 τύπο αντικειμένου δεδομένων, έτσι ώστε ο πίνακας μετά θα έχει 1 δημοσίευση μοντέλο, η οποία θα έχει 1 θέση ελεγκτή που αντιστοιχεί σε αυτό, και το ίδιο για τις παρατηρήσεις, το ίδιο για τους χρήστες, και ούτω καθεξής και ούτω καθεξής. Και αυτό είναι ένας γενικός κανόνας. Υπάρχουν πρόκειται να είναι ειδικές περιπτώσεις όπου μπορεί να διαφέρει από εκείνη, αλλά το 90% του χρόνου που είναι ό, τι πρόκειται να κάνει, και εγώ θα σας δείξω ότι είναι ό, τι θα πάμε να κάνουμε σήμερα. 1 περισσότερα ιδέα πριν βουτήξει πίσω στον κώδικα, αυτή η ιδέα του αντικειμένου σχεσιακή χαρτογράφηση. Εσείς έχετε ήδη κάνει μια ανάπτυξη ιστοσελίδων από το chipset, και έχετε δει ότι κάνετε ένα ερώτημα SQL, και ό, τι να επιστρέφει σε εσάς είναι σειρές. Μπορείτε να πάρετε αυτές τις σειρές, και το δείκτη σας τους με κάποιο όνομα, το όνομα της στήλης και του πίνακα, και αυτό είναι το πώς μπορείτε να εργαστείτε με αυτό, και μπορεί να είναι λίγο περίπλοκη. Αλλά επιπλέον, αν έχετε σχέσεις στη βάση δεδομένων σας, όπως, για παράδειγμα, αν έχω σχόλια και τις δημοσιεύσεις, τότε ίσως να θέλω να αρπάξει τη μητρική μετά από ένα σχόλιο. Αν μπορώ να χρησιμοποιήσω μόνο σειρές σε SQL, τότε το μόνο που μπορώ να πάρω είναι το αναγνωριστικό της μητρικής μετά και όχι το πραγματικό ίδια θέση. Αλλά όταν είμαστε κωδικοποίησης, αυτό που πραγματικά θέλουμε είναι να αρπάξει πραγματικά  η μητρική δημοσιεύσετε το ίδιο μερικές φορές. Τι αντικείμενο σχεσιακή χαρτογράφηση δεν είναι παίρνει τα αποτελέσματα του ερωτήματος βάσης και το θέτει σε αντικείμενα για σας, τα οποία είναι πολύ καλύτερο να συνεργαστεί με από απλό πίνακες και σειρές. Για παράδειγμα, τώρα που έχω ένα σχόλιο, ίσως, και θέλω να αρπάξει μητρική μετά της, και εγώ ίσως να σχολιάσω βέλος μετά, τότε θα μου δώσει πραγματικά τη θέση αντικειμένου που αντιστοιχεί στο πραγματικό γονέα μετά, όχι μόνο κάποια ταυτότητα, που διαφορετικά δεν θα πρέπει να χρησιμοποιούν και να κάνει άλλο ένα ερώτημα SQL για να αρπάξει τη θέση, η οποία είναι επαχθής και περιττή. Και επιπλέον, με τη χαρτογράφηση όλων αυτών των σειρών δεδομένων σε αντικείμενα, μπορείτε επίσης να συνδέσετε περισσότερες λειτουργίες σε αντικείμενα, Έτσι, για παράδειγμα, μίλησα για το πώς οι τάξεις είναι ουσιαστικά ομάδες λειτουργιών. Μπορείτε να σκεφτείτε από το όπως αυτό. Για παράδειγμα, ίσως δεν έχω αυτή τη θέση αντικειμένου, και ίσως θα ήθελα να έχουν κάποιο είδος της λειτουργίας που συνδέονται με το αυτό μου λέει ουσιαστικά ήταν αυτό δημοσιεύτηκε πρόσφατα; Ήταν δημοσιεύτηκε την τελευταία εβδομάδα, αληθής ή ψευδής; Και αυτό είναι μια λειτουργία που μπορεί να συνδεθεί σε αυτό το αντικείμενο, και είναι πολύ βολικό για να το έχετε στην ίδια θέση, και υπάρχουν μια σειρά από διαφορετικές λειτουργίες που μπορείτε να δημιουργήσετε για αυτά τα αντικείμενα, και είναι πραγματικά ωραίο να είναι σε θέση να το συνδέσετε σε μια τάξη, σε ένα αντικείμενο, ενώ αν είχε μόλις σειρές που προέρχονται από τη βάση δεδομένων σας, τότε δεν μπορείτε να επισυνάψετε πραγματικά καμία λειτουργικότητα σε αυτό. Είναι κυριολεκτικά απλώς δεδομένα. Οποιεσδήποτε ερωτήσεις σχετικά με αυτό καθόλου; ΝΤΥΠΑ είναι πολύ κοινή ανάπτυξη ιστοσελίδων, και υπάρχουν πολλά διαφορετικά είδη των ΝΤΥΠΑ, και Kohana έχει το δικό του ORM. Είναι πολύ βασικό, αλλά θα πάρετε μια γεύση του τι μοιάζει. Ας δημιουργήσουμε ένα μοντέλο για τις θέσεις blog μας, και το πρώτο πράγμα που προφανώς χρειάζεται να κάνετε είναι να δημιουργήσετε ένα πραγματικό τραπέζι στη βάση δεδομένων μας για να αποθηκεύουν στην πραγματικότητα τα δεδομένα μας για τις θέσεις αυτές. Το πρώτο πράγμα που θα κάνω είναι να πάτε στο phpMyAdmin. Έχετε παιδιά χρησιμοποιούνται phpMyAdmin πριν; Εντάξει, φοβερό, έτσι ώστε εσείς ήδη ξέρετε τι είναι αυτό, και πάω να δημιουργήσετε έναν νέο πίνακα που ονομάζεται Kohana Δημοσιεύσεις, και πρόκειται να είναι πραγματικά απλή. Θα πρέπει να συνδεθείτε ξανά Όλα θα πάμε να κάνουμε σήμερα είναι να έχει ένα συγγραφέα και ένα σώμα, Απλά κρατήστε το απλό. Πάω να δημιουργήσει εκείνο το τραπέζι, και τώρα έχουμε μόνο έναν πίνακα που αντιπροσωπεύουν θέσεις μας με 2 πεδία για συγγραφέα μας και το σώμα μας. Το άλλο πράγμα που εγώ είμαι πρόκειται να κάνουμε τώρα είναι ρυθμίστε την εφαρμογή web μου, ώστε να ξέρει πώς να συνδεθεί με τη βάση δεδομένων, και αυτό, πάλι, είναι κάτι που θα έχετε να κάνετε με όλες τις εφαρμογές web. Θα πρέπει να πω το όνομα χρήστη και τον κωδικό πρόσβασης και το όνομα της βάσης δεδομένων και ούτω καθεξής και ούτω καθεξής να καταλάβω πώς να συνδεθεί πραγματικά με τη βάση δεδομένων σας. Στην Kohana, έχουμε κάτι που ονομάζεται μονάδα βάσης δεδομένων, και στο φάκελο ρυθμίσεων που έχουμε αυτόν το φάκελο που ονομάζεται Database, και όπως μπορείτε να δείτε, υπάρχουν ένα σωρό των ρυθμίσεων θα πρέπει να ορίσετε εδώ για να το πω ποιο είναι το όνομα χρήστη και τον κωδικό πρόσβασης για τη βάση δεδομένων ώστε να μπορώ να συνδεθεί πραγματικά με αυτό. Και επειδή δεν θέλω εσείς να ξέρει πραγματικά το όνομα χρήστη και τον κωδικό πρόσβασης της βάσης δεδομένων μου, Έχω ένα αρχείο που έχω ήδη όλα που έχει συσταθεί, και πάω να αντιγράψετε και να επικολλήσετε πάνω. Awesome. Εντάξει. Νομίζω ότι όλες οι ρυθμίσεις που πρέπει να κάνω, αλλά ας δούμε. Θα συνεχίσουμε να εργαζόμαστε σε αυτό, και αν κάτι κολλάει, τότε θα το διορθώσουμε. Τώρα τι Πάω να κάνουμε είναι να πάω να δημιουργήσετε ένα νέο ελεγκτή. Ή στην πραγματικότητα, συγγνώμη. Πρώτα πρέπει να δημιουργήσουμε ένα νέο μοντέλο. Θα δημιουργήσει ένα νέο μοντέλο που ονομάζεται Post.php, και τι θα πάμε να κάνουμε είναι να πάμε να το ονομάσουμε κατηγορία Model_Post. Πάρτε κάποια επισήμανση σύνταξης για, και έτσι όταν λέω, "επεκτείνεται ORM," αυτό είναι βασικά λίγο περισσότερο αντικειμενοστρεφή προγραμματισμό, η οποία, δυστυχώς, εσείς δεν έχετε μάθει ακόμα σε CS50, αλλά είναι αρκετά εύκολο να πάρει. Αυτό μου δίνει όλη αυτή την επιπλέον λειτουργικότητα που έρχεται σε αυτό το πακέτο ORM, και έτσι έχω ένα σωρό επιπλέον λειτουργίες και εταζέρα για δωρεάν, το οποίο θα δείτε ένα κομμάτι του σε ένα δευτερόλεπτο. Αυτή τη στιγμή στην πραγματικότητα το μόνο που χρειάζεται να κάνετε είναι να δημιουργήσετε αυτή την κατηγορία. Δεν χρειάζεται καν να κάνει οποιαδήποτε λειτουργία ή οτιδήποτε άλλο, αλλά έχω δημιουργήσει μια κατηγορία που αντιπροσωπεύει τον πίνακα, και επειδή έχω επεκταθεί αυτή την κατηγορία ORM, Παίρνω ένα σωρό πράγματα για δωρεάν, έτσι για τώρα δεν έχετε να ρυθμίσετε τίποτε πιο πάνω. Και τώρα τι Πάω να κάνουμε είναι να πάω για να δημιουργήσετε ένα νέο χειριστήριο, που Πάω να αναφέρουμε blog.php, και πάω να αντιγράψετε πάνω από το Welcome ελεγκτή έτσι δεν χρειάζεται να πληκτρολογείτε ξανά κάποια πράγματα, και τώρα έχω να μετονομάσετε αυτό. Τώρα τι Πάω να κάνω για να ελέγξετε για να βεβαιωθείτε ότι όλα λειτουργούν έξω, Πάω να αρπάξει την πρώτη θέση από τη βάση δεδομένων μου και να εκτυπώσετε το σώμα του τη θέση στην οθόνη. Για να γίνει αυτό, τι Πάω να κάνουμε πρώτα είναι Πάω να σώσει τις θέσεις σε μια μεταβλητή, ώστε ό, τι θα πάμε να κάνουμε είναι - Kohana σε αυτό που κάνετε είναι να αρπάξει τη θέση αντικειμένου Είναι το είδος της περίπλοκη, αλλά θα πρέπει να κάνετε αυτό το πράγμα που ονομάζεται ORM :: εργοστάσιο, και στη συνέχεια να περάσει στο όνομα του μοντέλου που θέλετε, και επιστρέφει το αντικείμενο ORM που αντιπροσωπεύει αυτό το μοντέλο. Και τότε, όπως είπα, όταν επεκτείνουμε το αντικείμενο ORM, παίρνουμε όλων αυτών των μεθόδων για δωρεάν, έτσι για παράδειγμα, έχουμε πάρει αυτή η νέα λειτουργία που ονομάζεται "βρείτε όλα" η οποία επιστρέφει αυτόματα σε κάθε ενιαία θέση στη βάση δεδομένων, το οποίο είναι αρκετά βολικό. Και τώρα στο σώμα Πάω να επιστρέψει η πρώτη θέση και να επιστρέψει το σώμα του. Και φυσικά, θα πρέπει να δημιουργήσετε μια θέση, οπότε ας προσθέσουμε μια νέα θέση. Θα πω, "Brandon, το πρώτο μου post." Awesome. Και τώρα πάμε για τα blogs και αν όλα λειτουργούν σωστά - ω, πρόκειται και πάλι για κάποιο άλλο πράγμα χαζή δικαιωμάτων στο αρχείο. Περίμενε 1 δευτερόλεπτο. Είναι το είδος του παραλόγου. Εκεί πάμε. Εντάξει. Έφτιαξα αυτό το πρόβλημα άδεια. Θα προσπαθούσε να δημιουργήσει κάποια αρχεία και κάποια καταγραφής, και τα δικαιώματα, και πάλι, δεν είχαν ρυθμιστεί σωστά, έτσι το έκανα έτσι ώστε αυτά τα αρχεία ήταν εγγράψιμο και εκτελέσιμο γι 'αυτό θα μπορούσε πραγματικά να συνδεθείτε με τα πράγματα. Τώρα είναι που μου έδωσε ένα άλλο ρητό εξαίρεση, "τάξη ORM δεν βρέθηκε" και αυτό γιατί ξέχασα ένα ακόμη βήμα. Αυτό είναι πολύ κακό. Στο αρχείο φάκελο εκκίνησης, υπάρχουν οι ενότητες αυτές εδώ, το οποίο μπορείτε να επιλέξετε να ενεργοποιήσετε ή να απενεργοποιήσετε. Πρόκειται για ένα σωρό διαφορετικά χαρακτηριστικά που μπορείτε να επιλέξετε να χρησιμοποιήσετε εντός Kohana, η οποία είναι είδος ωραία. Για παράδειγμα, έχουν ένα δομοστοιχείο ταυτότητας το οποίο μπορείτε να χρησιμοποιήσετε για τον έλεγχο ταυτότητας των χρηστών. Έχουν μια μονάδα caching, αν θέλετε να υλοποιήσετε κάποια προσωρινή αποθήκευση πίσω τέλος να κάνουν το έργο πιο γρήγορα εφαρμογής και εταζέρα. Χρειάζεται να ενεργοποιήσετε την βάση δεδομένων και τη μονάδα Διαχείρισης Λειτουργικού Κινδύνου, επειδή, όπως είπα, είμαστε με τη βάση δεδομένων, προφανώς, και θα πρέπει επίσης να ενεργοποιήσετε τη μονάδα Διαχείρισης Λειτουργικού Κινδύνου, γιατί θα θέλαμε να έχουμε την επιπλέον λειτουργικότητα, το οποίο είναι ωραίο να έχουμε. Το μόνο που έχω να κάνω είναι uncomment αυτά τα 2 γραμμές, και τώρα αν μου ανανεώσετε, μου έδωσε ένα άλλο λάθος. Λέει, "Class Model_Post δεν βρέθηκε." Τώρα αυτό είναι ένα καλό πρόβλημα να έχει. Ας δούμε. Κάντε το κοινό. Όχι Περίμενε. Ω, αγαπητέ. Δεν ξέρω γιατί δεν είναι σε θέση να βρείτε αυτό. Αυτό είναι πραγματικά περίεργο. Έχω αυτή την κατηγορία εδώ. Υποθέτω ότι μπορεί να χρειαστεί να - oh. Είμαι τόσο χαζή. Ξέχασα να προσθέσω ένα tag της PHP. Αυτός είναι ο λόγος. Τώρα έχω να ανατρέψουμε 1 αλλαγή μόλις έκανα. Εντάξει. Εκεί πάμε. Αυτό ήταν πραγματικά ανόητο. Δεν είχα ένα άνοιγμα PHP tag. Αλλά, όπως μπορείτε να δείτε, τώρα δουλεύει σωστά, σωστά; Έχουμε 1 θέση. Εμείς άρπαξε την πρώτη θέση, και τώρα τυπωθούν σώμα της. Μεγάλη. Fantastic. Οποιεσδήποτε ερωτήσεις μέχρι τώρα; Όχι; Οποιεσδήποτε ερωτήσεις; Εντάξει, έτσι ώστε να δημιουργηθεί μόνο τη θέση μοντέλο, πολύ βασικό, και θα πάμε για να προσθέσετε κάποιες λειτουργίες αργότερα. Μπορούμε να προσθέσουμε επικυρώσεις και το φιλτράρισμα. Επικυρώσεις είναι ένα από τα πράγματα ότι τα πλαίσια για να λύσει πραγματικά, πολύ καλά, και δεν νομίζω ότι εσείς έπρεπε να το κάνουμε αυτό για το chipset CS50 σας, αλλά αν το κάνετε ανάπτυξης ιστοσελίδων για την τελική του έργου σας, είστε πιθανό θα θέλετε να κάνετε κάποιο είδος της διαδικασίας επικύρωσης, σαν να μην έχουν κενές ονόματα χρηστών, ίσως έχει έναν κωδικό πρόσβασης με τουλάχιστον κάποια μήκος, τέτοια πράγματα. Και είναι πραγματικά δυσεφάρμοστες αυτά τα πράγματα από τον εαυτό μας, και λίγο πολύ κάθε ενιαίο πλαίσιο web το κάνει για σας και σας επιτρέπει να το κάνουμε με έναν πολύ καθαρό τρόπο. Και το μοντέλο είναι όπου μπορείτε γενικά εκφράζουν αυτούς τους κανόνες επικύρωσης, επειδή είναι επικύρωση αν ένα μοντέλο είναι έγκυρη ή όχι. Αλλά για τώρα, θα πάμε να θέσει ότι αργότερα, και τώρα θα πάμε να εργαστούν σε άλλο μέρος, και θα πάμε για να προσπαθήσουμε και να κάνουμε μια νέα άποψη που απαριθμεί όλες τις θέσεις. Τα βήματα που εμπλέκονται στην παραγωγή μιας νέας δράσης για την καταγραφή όλων των μηνυμάτων είναι να αρπάξει μια λίστα με όλες τις δημοσιεύσεις και στη συνέχεια να αχρηστεύσουν τον κατάλογο όλων των μηνυμάτων σε μια προβολή. Ακριβώς εδώ, αρκετά ευτυχώς, έχουμε ήδη άρπαξε όλες τις δημοσιεύσεις χρησιμοποιώντας αυτή την πρώτη γραμμή, το βρείτε όλη τη λειτουργία, και τώρα τι θα πάμε να κάνουμε είναι μέχρι στιγμής Έχω άμεση ρύθμιση το σώμα της απόκρισης με το πέρασμα των χορδών, αλλά τώρα θέλω να χρησιμοποιήσετε μια προβολή, και η διαφορά ανάμεσα σε ένα σκοπό και μόνο να γίνει αυτό είναι με μια άποψη που μπορεί να έχει ένα ωραίο, μεγάλο πρότυπο HTML, και τι μπορώ να κάνω είναι να περάσει ορισμένες μεταβλητές και στη συνέχεια να έχουν την άποψη συμπληρώσετε αυτόματα το πρότυπο της χρησιμοποιώντας αυτές τις μεταβλητές. Αυτό που θα κάνουμε είναι ότι θα δημιουργήσει μια νέα προβολή, και θα αναφέρουμε την άποψη κάτι σαν "blog / index» και πάω να δεσμεύουν βασικά αυτό - ω, τι γράφω; Το μυαλό μου είναι κάπου αλλού. Πάω να δεσμεύσει τις θέσεις μεταβλητή για την προβολή, έτσι ώστε με αυτόν τον τρόπο η άποψη έχει πρόσβαση σε αυτήν την ανάρτηση μεταβλητή. Και έτσι τώρα πρέπει να δημιουργήσουμε αυτή την άποψη, έτσι και εδώ έχουμε αυτό το φάκελο που ονομάζεται "Προβολές" και το πρώτο, Πάω να δημιουργήσετε ένα νέο φάκελο κάτω από αυτό το ονομάζεται "Blog". Αυτό είναι ωραίο. Με αυτόν τον τρόπο μπορούμε να έχουμε ένα ωραίο ιεραρχία για τις απόψεις μας. Και στη συνέχεια, Πάω να δημιουργήσει ένα άλλο αρχείο εκεί ονομάζεται "index.php". Awesome. Στην πραγματικότητα, ας και τους δύο εδώ. Κάνοντας ένα αρχείο άποψη είναι ίσως το πιο απλό μέρος όλων αυτών, και αυτά είναι πιθανώς τα πράγματα είστε ήδη εξοικειωμένοι με. Εμείς πάμε για να κάνουμε κάτι πραγματικά απλό, αρχίσουμε να λέμε, «Η λίστα μου blog θέσεις." Στη συνέχεια μπορούμε να πάμε μέσα, και μπορούμε να επαναλάβει μέσω του πίνακα μηνυμάτων, αρπάξει κάθε ενιαία θέση και να πει κάτι σαν - ίσως να προσθέσετε μια γραμμή και στη συνέχεια να εκτυπώσετε το συγγραφέα και το σώμα. Αυτό έχει νόημα μέχρι στιγμής; Και ας δούμε αν αυτό δουλεύει. Τίποτα δεν έγινε. Αναρωτιέμαι γιατί. Ω, έχασα 1 βήμα. Πολύ ανόητο εκ μέρους μου. Δημιούργησα μια άποψη, αλλά δεν ρυθμίσετε την προβολή και την απάντηση, έτσι πρέπει να κάνετε 1 ακόμα πράγμα. Θα πρέπει να κάνουμε "αυτό το σώμα απάντηση" και ρυθμίστε το να είναι η άποψη. Εκεί πάμε. Έχουμε τίτλο μας, και τότε θα έχουμε μια θέση, και μόνο για πλάκα, ας προσθέσουμε άλλη θέση έτσι μπορούμε να δούμε μια λίστα. Και τοποθετήστε αυτά τα 2 θέσεις, και τώρα αν μου ανανεώσετε τη σελίδα, βλέπουμε όλες αυτές τις θέσεις εδώ. Μήπως αυτό έχει νόημα μέχρι στιγμής; Ναι, μια ερώτηση; Ω, εντάξει. Όπως μπορείτε να δείτε, είμαστε σε θέση να διαχωρίσει όλα αυτά κωδικούς έξω σε διαφορετικά τμήματα, και στη συνέχεια μπορείτε να δείτε ότι είναι πιο σαφής με τον κωδικό θέα. Αυτό το αρχείο εδώ που αντιπροσωπεύει την άποψη, να νοιάζεται μόνο για την αναπαράσταση των δεδομένων, την εμφάνιση των δεδομένων. Παίρνει περάσει κάποιο είδος των δεδομένων, και το μόνο που κάνει είναι απλά να σας το δείξω. Σε όλα τα άλλα μέρη του κώδικά σας, δεν θα έχετε να ανησυχείτε για τίποτα από αυτά, και, ομοίως, κωδικό άποψή σας, δεν έχετε να ανησυχείτε για τίποτα πώς να έχουν πρόσβαση στη βάση δεδομένων και ούτω καθεξής και ούτω καθεξής, η οποία είναι πολύ καλή και κάνει τον κωδικό σας πολύ πιο εύκολο να συντηρηθεί. Όπως είπα, θέα, είναι δυναμική σε ότι είναι 1 αρχείο, αλλά θα δημιουργήσει διαφορετικές απόψεις με βάση τις μεταβλητές που πραγματικά περάσει, και επιπλέον, υπάρχουν πολλές διαφορετικές λειτουργίες βοηθού που μπορείτε να χρησιμοποιήσετε για να σας βοηθήσουν να γράψετε τον κωδικό σας πιο γρήγορα, το οποίο θα σας παρουσιάσω σε μόλις ένα δευτερόλεπτο. Ναι. [Student] Έτσι, το $ 0, είναι ένας ελεγκτής, σωστά; Αυτό το δεύτερο πράγμα. Το ερώτημα είναι είναι $ 0 ένας ελεγκτής; $ 0 είναι μια μεταβλητή που δημιουργήθηκε εδώ. Δημιούργησα μια άποψη που πρώτος. Μου έχουν ανατεθεί σε κάποια μεταβλητή. Τότε πέρασε σε αυτή τη λειτουργία, ρυθμίστε το όπως το σώμα της απάντησης. Μήπως αυτό έχει νόημα; [Φοιτητής] Έτσι είναι η άποψη :: εργοστάσιο, είναι η άποψη σαν μια κατηγορία ή μια βιβλιοθήκη [ακούγεται] λειτουργία του εργοστασίου; Το ερώτημα είναι σχετικά με τη λειτουργία άποψη :: εργοστάσιο, και βασικά αυτό είναι λίγο περισσότερο αντικειμενοστρεφή προγραμματισμό, κατ 'ουσίαν. View είναι η τάξη θέα, και έχει μια μέθοδο που ονομάζεται «Εργοστάσιο», και αυτό είναι ένας τρόπος για να αρπάξει το αντικείμενο που το όνομά του "blog / index." Και αυτό είναι λίγο περισσότερο object-oriented προγραμματισμό πράγματα ότι εγώ δεν πρόκειται να μπω σε πάρα πολύ εδώ. Τώρα, προφανώς, θέλουμε να δημιουργήσουμε νέες θέσεις εργασίας, αλλά δεν θέλουμε να πρέπει να το κάνουμε μέσω μιας βάσης δεδομένων, έτσι θα πάμε να δημιουργήσουμε μια νέα δράση για τη δημιουργία μιας νέας θέσης, και υπάρχουν πολλά πράγματα που πρέπει να κάνουμε. Το πρώτο πράγμα που θα πάμε να κάνουμε - ας αντιμετωπίσουμε αυτά τα πράγματα ένα προς ένα. Το πρώτο πράγμα που θα κάνουμε είναι να έχουμε για να δημιουργήσετε μια φόρμα για την εισαγωγή μια νέα θέση, αλλά είμαι επίσης πρόκειται να προσθέσετε ένα νέο δράση πρώτα, προσθέτοντας έτσι μια νέα δράση είναι εξίσου εύκολη όσο και προσθέτοντας μια νέα λειτουργία με τον ελεγκτή σας, και τώρα πάω να κάνω κάτι πολύ βασικό, απλά αρπάξτε την άποψη αυτή και μετά, απλά να εμφανιστεί για εσάς. Και στη συνέχεια, τώρα Πάω να δημιουργήσετε ένα νέο αρχείο προβολής, και Πάω να αρχίσετε να γράφετε κάποια πράγματα. Τι είναι ωραίο για Kohana είναι ότι παρέχουν πολλές διαφορετικές λειτουργίες βοηθού για να μπορείτε να γράψετε προβολή κώδικα πιο εύκολα, και 1 από αυτές τις λειτουργίες βοηθού ή ενότητες βοηθός είναι γύρω από την εγγραφή μορφών. Για τη σύνταξη των μορφών, δεν έχω πραγματικά να γράψετε απευθείας οποιοδήποτε HTML εαυτό μου. Εσείς έχετε γραπτή μορφή HTML. Ξέρετε πώς μπορεί να είναι πραγματικά, πραγματικά οδυνηρό και δύσκολο να γραφούν μορφές. Δεν είναι διασκέδαση, έτσι ευτυχώς, μπορούμε να γράψουμε βάση μιας φόρμας με χρήση του Kohana σχηματίζουν βοηθητικών λειτουργιών για να το κάνει για εμάς. Εμείς πάμε για να έχουν βασικά πεδία για κάθε πράγμα που έχουμε, έτσι ώστε ένα για τους δημιουργούς και μία για τους οργανισμούς. Εμείς πάμε για να έχουν μια ετικέτα, και θα πάμε να έχουν μια είσοδο. Και τελικά, θα πάμε να έχουν μια υποβολή. Και όπως μπορείτε να δείτε, αυτό είναι πολύ καθαρότερο να γράψω από ό, τι όλο αυτό το βρώμικο HTML, το οποίο είναι το είδος της Νίκαιας. Σύμφωνοι, υπάρχουν άλλα πλαίσια web που έχουν ακόμη καθαρότερο από αυτό, αλλά τουλάχιστον αυτό είναι καλύτερο από ό, τι γράφει το HTML σας. Awesome, έτσι αυτό είναι αυτό που βλέπετε. Αυτό είναι το είδος του βρώμικο, έτσι είμαι πρόκειται να προσθέσετε μια αλλαγή γραμμής εκεί να κάνουν ότι φαίνονται λίγο καλύτερο. Λοιπόν, φυσικά, εξακολουθεί να φαίνεται πραγματικά, πραγματικά κακή, αλλά είμαστε απλώς επικεντρώθηκε σχετικά με τη λειτουργικότητα για τώρα και όχι στην αισθητική. Δεν έχω χρόνο να κάνω τα πάντα. Και όπως μπορείτε να δείτε, τώρα έχουμε ένα σούπερ βασική μορφή, το οποίο είναι το είδος της Νίκαιας. Αυτός ο κωδικός θα ήθελα να πω είναι καθαρότερα από ό, τι προσπαθεί να γράψει ένα HTML σχηματίζουν τον εαυτό σας, έτσι ώστε να είναι ωραία. Ποιο είναι το επόμενο; Τώρα πρέπει να κάνουμε τα πράγματα με τη δράση. Κανονικά, όταν γράφετε φόρμες HTML, θα πρέπει να το πω, όπου πρόκειται να υποβάλει τη φόρμα. Από προεπιλογή στα περισσότερα πλαίσια web, υποβάλλει στο ακριβώς την ίδια διεύθυνση URL, έτσι το πράγμα είναι, εάν στείλετε ένα αίτημα για να πάρει / blog / νέες, θα πρέπει να σας εμφανιστεί η φόρμα, αλλά αν στείλετε ένα αίτημα μετά στο / blog / νέο με τα δεδομένα, θα πρέπει πραγματικά να προσπαθήσει να σώσει τη θέση αυτή και να κάνουμε κάτι με αυτό. Τι θα πάμε να κάνουμε είναι να βασικά το μόνο που έχουμε να κάνουμε για να ελέγξετε αν είναι ένα αίτημα μετά ή αίτημα get είναι να ελέγξετε ποιες είναι οι μεταβλητές μετά μπορείτε να ρυθμίσετε. Και αν η θέση μεταβλητή έχει οριστεί, τότε θα πάμε για να προσπαθήσουμε και να δημιουργήσετε ένα νέο μήνυμα. Και πάλι, το κάνουμε μόνο αυτό, και αυτό δημιουργεί μια νέα θέση, και είμαστε κυριολεκτικά πρόκειται να ορίσετε τα πεδία της, όπως αυτό, και στη συνέχεια θα πάμε για να το αποθηκεύσετε. Και στη συνέχεια, Πάω να ανακατευθύνει στην αρχική σελίδα, ώστε να μπορείτε να δείτε τη λίστα με τα μηνύματα και πάλι. Ας το δοκιμάσουμε. Θα πω, "Brandon" και στη συνέχεια να υποβάλει τη θέση, και αν όλα πάνε καλά, όπως μπορείτε να δείτε, μου μεταφερθείτε στην αρχική σελίδα, και αν μετακινηθείτε προς τα κάτω, έχουμε ένα πρόσφατα εισαχθεί μετά. Yay! Ναι, το ερώτημα. [Φοιτητής] Τι θα συμβεί αν είχε μπει ακριβώς το ίδιο πράγμα έχετε εγγραφεί πριν; Μήπως να το ελέγξετε για να βεβαιωθείτε ότι δεν έχετε διπλές το ίδιο υποβολής; Να προεπιλογή, όχι, επειδή, από προεπιλογή - Συγγνώμη, το ερώτημα είναι αν μπείτε στα ίδια ακριβώς δεδομένα, με τη μορφή και υποστηρίζουν ότι, θα σας επιτρέψει να εισάγετε ένα αντίγραφο αντικείμενο, ένα αντίγραφο εισόδου, κατ 'ουσίαν; Αυτή τη στιγμή, ναι, αυτό θα σας επιτρέψει να το κάνουμε αυτό, γιατί σε βάσεις δεδομένων είναι απολύτως έγκυρο να έχουν εντελώς διπλές σειρές, αλλά αν αυτό είναι μια ανησυχία, τότε μπορείτε να προσθέσετε επικυρώσεις, για παράδειγμα, για να βεβαιωθείτε ότι εάν αυτή είναι ακριβώς η ίδια ως κάτι που ήδη υπάρχει, στη συνέχεια να πω ότι είναι μια μη έγκυρη αντικείμενο, και, στη συνέχεια, μπορείτε να ορίσετε ακόμη και το μήνυμα λάθους σας και να πω, "Invalid επειδή αυτό υπάρχει ήδη" ή κάτι τέτοιο. Αλλά στην περίπτωση αυτή, θα μπορούσα να δημιουργήσω κάτι διπλούν. Τώρα, ας προσπαθήσουμε και να προσθέσετε κάποια επικυρώσεις. Το πρόβλημα με αυτή τη στιγμή είναι ότι Θα μπορούσα να υποβάλει κυριολεκτικά μια εντελώς κενή θέση. Μπορώ να κάνετε κλικ σε αυτό το κουμπί τώρα, και εκεί πάμε. Δεν μπορείτε να δείτε πραγματικά, αλλά αυτή η επιπλέον γραμμή εδώ δείχνει ότι Έχω κυριολεκτικά μια νέα θέση. Έχει μόνο ένα κενό συγγραφέα και ένα κενό σώμα, και δεν θέλουμε να επιτρέπουν στους ανθρώπους να το κάνουμε αυτό. Αυτό είναι όπου η επικύρωση μπαίνει Μπορώ να πάω στο αντικείμενο το μοντέλο μου, και τώρα μπορώ να προσθέσω μια νέα λειτουργία που καθορίζει τι κανόνες επικύρωσης θα ήθελα να προσθέσω σε αυτό το μοντέλο για να βεβαιωθείτε ότι είναι έγκυρη ή να διευκρινίσει τι σημαίνει να είναι μια έγκυρη θέση; Και θέλω να πω ότι είναι μόνο μια έγκυρη θέση, αν και ο συγγραφέας και το σώμα δεν είναι κενό, και αυτό είναι το πώς θα το κάνετε με Kohana. Μπορείτε να δημιουργήσετε μια νέα λειτουργία που ονομάζεται "Κανόνες" και στη συνέχεια να επιστρέψει ουσιαστικά ένα associative array που καθορίζει τους κανόνες επικύρωσης για αυτό το αντικείμενο. Εμείς πάμε για να επιστρέψει τον πίνακα, και στη συνέχεια, τι θα πάμε να κάνουμε είναι να λένε "συγγραφέας", πηγαίνει σε μια σειρά, η οποία πηγαίνει σε μια άλλη σειρά που ονομάζεται "δεν είναι κενό." Και στη συνέχεια, Πάω να πω "το σώμα." Εντάξει, και η σύνταξη γι 'αυτό και τη δομή για το σκοπό αυτό μπορεί να φαίνεται λίγο περίπλοκη και λίγο περίπλοκο. Αν διαβάσει την τεκμηρίωση, είναι αρκετά εύκολο να καταλάβω, Αλλά κατ 'ουσίαν, αυτό είναι ό, τι πρέπει να κάνετε για να καθορίσετε ορισμένοι κανόνες επικύρωσης, και υπάρχουν πολλά διαφορετικά κανόνες Kohana ότι θα σας δώσει δωρεάν, όπως μπορείτε να προσθέσετε κανόνες να πω θα πρέπει να είναι τουλάχιστον το μήκος αυτό. Ίσως θα πρέπει να είναι αριθμητικό. Ίσως θα πρέπει να είναι άλφα αριθμητικό. Ίσως θα πρέπει να είναι το πολύ το μήκος αυτό, ούτω καθεξής και ούτω καθεξής. Υπάρχουν πολλοί διαφορετικοί κανόνες που προβλέπει Kohana για σας, και μπορείτε να πάτε στην ιστοσελίδα τους, να δούμε την τεκμηρίωση, και μπορείτε να δείτε όλα τα διαφορετικά πράγματα που μπορείτε να κάνετε. Αλλά αυτό είναι το μόνο που έχω να κάνω, και τώρα ας δούμε τι θα συμβεί αν μπορώ να υποβάλω μια κενή θέση. Τι πρόκειται να συμβεί; Ω, όχι, παίρνω ένα λάθος. Παίρνω μια εξαίρεση επικύρωσης. Λοιπόν, αυτό είναι καλό. Μου είπε ότι το μοντέλο μου είναι άκυρη, αλλά δεν θέλω να εμφανίσετε μια εξαίρεση στους χρήστες μου, όταν προσπαθούν να υποβάλουν κάτι άκυρο, έτσι δεν είναι; Θέλω να τους δώσει κάποιο είδος της φιλικό μήνυμα λάθους όταν κάτι πάει στραβά. Τι θα πάμε να κάνουμε είναι να πάμε να τυλίξτε τα πάντα σε ένα βρόχο δοκιμή αλιευμάτων. Στην πραγματικότητα, νομίζω ότι αυτό είναι επίσης κάτι που δεν έχουν μάθει ακόμα σε CS50, επειδή C, η γλώσσα προγραμματισμού C, δεν έχει εξαιρέσεις, αλλά σχεδόν σε κάθε ενιαία άλλη γλώσσα έχει εξαιρέσεις, τόσο πραγματικά, πραγματικά εν συντομία, εξαίρεση είναι κάτι που ένα κομμάτι του κώδικα μπορεί να ρίξει μια εξαίρεση, όταν κάτι πάει στραβά, αλλά τότε ίσως κάποιο άλλο κομμάτι του κώδικα ψηλά μπορεί να πιάσει την εξαίρεση αυτή και να κάνουμε κάτι με αυτό. Για παράδειγμα, στην περίπτωση αυτή, το κομμάτι του κώδικα που προσπαθεί να σώσει ένα μοντέλο, επικυρώνει το μοντέλο, και αν λέει, "Εντάξει, αυτό το μοντέλο είναι άκυρη," πρόκειται να ρίξει μια εξαίρεση, και αυτό είναι το είδος που αντιστοιχεί σε σε C μπορεί να επιστρέψει ένα -1 ή κάτι τέτοιο. Και στη συνέχεια, για μένα, αυτή η λειτουργία, τον κωδικό μου σε υψηλότερο επίπεδο, μπορώ να προσπαθήσω και να πιάσει την εξαίρεση αυτή και βασικά λένε, "Εντάξει, αν πιάσει την εξαίρεση, τι θα πάω να κάνω;" Ή θα μπορούσε να επιλέξει να μην πιάσει η εξαίρεση και να αφήσει κάποιον πιο ψηλά πιάσει την εξαίρεση, ή αν κανείς δεν το πιάνει, τότε ολόκληρο το πρόγραμμα κολλάει και λέει, "Κάτι πήγε στραβά, και εγώ δεν μπορούσα να το αντέξω." Αλλά αυτό που κάνουμε είναι να σας τυλίξτε ένα κομμάτι του κώδικα σε ένα μπλοκ try, και, στη συνέχεια, μπορείτε επίσης να προσθέσετε κάτι που ονομάζεται μπλοκ των αλιευμάτων, το οποίο είναι το είδος του κώδικα που θα προσπαθήσει και να πιάσει εξαιρέσεις που μπορεί να προκύψουν. Και έτσι, αν έχω πιάσει το συγκεκριμένο εξαίρεση ή ακύρωση εξαίρεση, τότε τι Πάω να κάνουμε είναι να Πάω να θέσει τα λάθη - Νομίζω ότι είναι το πώς θα το κάνουμε - και είμαι πρόκειται να θέσει τα λάθη σε κάποιο αντικείμενο. Και τότε τι Πάω να κάνουμε είναι αν χτυπήσει την εξαίρεση αυτή, δεν πρόκειται να ανακατευθύνει, και αν δεν ανακατευθύνει, πρόκειται να βγει από το αν το blog και να χτυπήσει αυτό το blog / νέο, το οποίο θέλουν θέλω να κάνω. Αν υπάρχει κάποιο λάθος, τότε θέλω να πάω πίσω στη φόρμα και να εμφανίσει αυτά τα σφάλματα. Τώρα αυτό που θέλω να κάνω είναι που θέλω να περάσει τα σφάλματα αυτά στην προβολή. Εντάξει, νομίζω ότι έχω την άποψη εδώ, και βασικά θέλω να εμφανίσετε τα λάθη, αν υπάρχουν. Πριν γράψει το HTML γι 'αυτό, θα πάω πραγματικά γρήγορα σας δείξει ποια είναι η δομή αυτής της μεταβλητής εμφάνιση σφαλμάτων αρέσει, και αυτό είναι μια καλή πρακτική σε γενικές γραμμές. Πολλές φορές μπορείτε να πάρετε κάτι πίσω από κάποια μέθοδο, κάποια λειτουργία στο πλαίσιο ιστό, και δεν ξέρετε ποια είναι η μεταβλητή μοιάζει, έτσι ώστε να μην ξέρουν πώς να εργαστεί με αυτό. Πάω να χρησιμοποιούν μια μέθοδο εκτύπωσης r για να εκτυπώσετε ουσιαστικά έξω. Και όπως μπορείτε να δείτε, αυτό μου λέει ότι είναι συγγενής σειρά, και έχετε ένα κλειδί, συγγραφέας, σημεία σε αυτή τη σειρά, συγγραφέας δεν πρέπει να είναι κενή, και ένα άλλο κλειδί, το σώμα, σημεία σε μια άλλη σειρά, το σώμα δεν πρέπει να είναι κενό. Είμαι όπως, εντάξει, δροσερό. Τότε μπορώ να επαναλάβει μέσω της συστοιχίας και να εκτυπώσετε κάθε μήνυμα. Είναι βασικά σαν ένα associative array με μια δέσμη των μηνυμάτων. Τι Πάω να κάνουμε είναι "αν τα λάθη," και πάω να δημιουργήσει μια μη διατεταγμένη λίστα, και πάω να μετακινηθείτε μέσα από όλα τα λάθη. Και αυτό, και τώρα Πάω να προσπαθήστε να υποβάλλετε αυτό και πάλι, και ας δούμε τι έχουμε. Τώρα έχουμε αυτό το ωραίο λίστα των σφαλμάτων, και αυτό εξακολουθεί να είναι αρκετά άσχημη, αλλά αυτό προφανώς μπορεί να διαμορφωθεί για να φαίνονται ωραία, αλλά η βασική ιδέα είναι μόνο σε λίγες γραμμές κώδικα, ήμασταν σε θέση να επικυρώσει το μοντέλο μας, βεβαιωθείτε ότι ορισμένα πεδία δεν ήταν κενά, και αν κάτι πάει στραβά, τότε επιστρέφουν κάποιο είδος του μηνύματος λάθους Θα μπορούσε στη συνέχεια να παρουσιάσει πίσω στο χρήστη. Μπορείτε επίσης να προσαρμόσετε την επικύρωση σας έτσι ώστε να μπορείτε να έχετε πραγματικά ένα μήνυμα σφάλματος ότι είναι πιο συγκεκριμένη εφαρμογή ή κάτι τέτοιο σας. Όλα αυτά είναι γενικά προσαρμόσιμη. Δυστυχώς, είμαστε ο χρόνος, έτσι είμαι πρόκειται να πρέπει να κόψει τη ζωντανή συνεδρία κωδικοποίησης εδώ. Υπάρχουν ένα σωρό άλλα χαρακτηριστικά που θέλω να αποδείξει για σας σε αυτό το παράδειγμα. Για παράδειγμα, μπορείτε να προσθέσετε πρότυπα στο site σας, οπότε ίσως υπάρχει κάποιο είδος κώδικα HTML που θέλετε να εφαρμόσετε σε κάθε σελίδα στην ιστοσελίδα σας, και αντί για επικόλληση που σε κάθε αρχείο άποψη που έχετε, η οποία προφανώς θα είναι μια κακή πρακτική, μπορείτε να ορίσετε ουσιαστικά αυτά τα πρότυπα, και στη συνέχεια στον ελεγκτή σας λένε, "Εντάξει, είμαι χρησιμοποιώντας αυτό το πρότυπο." "Έχουν όλες μου τις απόψεις χρησιμοποιήσετε αυτό το πρότυπο." Και το ένα τελευταίο πράγμα που θέλω να αποδείξει σε σας, καθώς και ότι δεν έχουμε χρόνο για είναι cross-site scripting, και βασικά νομίζω ότι εσείς έχετε πιθανότατα δει σε CS50 - Νομίζω ότι ο David Malan πιθανώς μίλησε για το πώς μπορείτε συνήθως να κάνετε την ένεση JavaScript κώδικα σε - έχετε μιλήσει γι 'αυτό; Ίσως; Ίσως όχι; Αλλά πολλές φορές μπορείτε να κάνετε την ένεση κακόβουλο κώδικα JavaScript στη βάση δεδομένων κάποιου, και αν δεν μπορούν να αποφύγουν αυτό σωστά, στη συνέχεια, όταν παρουσιάζουν ότι τα δεδομένα πίσω στο χρήστη, τότε μπορεί να τρέξει κάποια τυχαία κώδικα JavaScript δεν θέλετε να συμβεί αυτό, και ήμουν έτοιμος να αποδείξει πώς θα το κάνουμε αυτό μέσα Kohana. Είναι πραγματικά πολύ, πολύ εύκολο. Θα μπορούσα να το κάνω τώρα μέσα σε 2 δευτερόλεπτα κυριολεκτικά. Το μόνο που έχετε να κάνετε είναι βασικά τυλίξτε αυτά τα πράγματα σε αυτό το πράγμα που ονομάζεται HTML οντότητες. Και ότι θα ξεφύγουν από αυτόματα όλους τους χαρακτήρες σωστά και βεβαιωθείτε ότι δεν έχετε αυτό το πρόβλημα. [Φοιτητής] Μπορείτε γράφονται το πρώτο τεστ σωστά. [Brandon Liu] Ω, ουπς. Εντάξει, αυτό είναι το μόνο που είχα να μοιραστώ μαζί σας σήμερα. Αυτές οι διαφάνειες πρόκειται να αναρτηθεί, αλλά αυτά είναι γενικά οι μόνοι πόροι θα πρέπει να πρέπει πραγματικά να ξεκινήσετε με Kohana. Μπορείτε να πάτε στην ιστοσελίδα. Έχουν ένα εγχειρίδιο, και έχουν επίσης μια εξερευνητής API. Μπορούμε να διερευνήσει όλες τις διαφορετικές λειτουργίες και βοηθητικών λειτουργιών που έχουν για σας. Έχουν γενικά αρκετές πληροφορίες σχετικά με το δικτυακό τόπο που μπορείτε να χρησιμοποιήσετε για να ξεκινήσετε και να προχωρήσουμε με Kohana. Δεν υπάρχουν ότι πολλά tutorials, νομίζω, για Kohana, εκτός από τι έχουν στην ιστοσελίδα εδώ, έτσι αυτό είναι πιθανώς το καλύτερο στοίχημά σας. Αλλά αν θέλετε να πάτε με το πλαίσιο web και δεν θέλετε να πρέπει να πάρει μια νέα γλώσσα, και θέλετε κάτι που είναι σχετικά ελαφρύ και έχει μια εύκολη καμπύλη εκμάθησης, Θα ήθελα να προτείνω σίγουρα Kohana. Αυτή είναι ίσως η καλύτερη προσφορά για αυτό. Το αστείο πράγμα, όμως, είναι αν ήμασταν χρήση Ruby on Rails, θα μπορούσαμε να αναπαραχθεί αυτό που μόλις έκανε και ίσως περισσότερο σε λιγότερο από 3 λεπτά. Δεν πρόκειται για φάρσα, αλλά η μάθηση Ruby on Rails παίρνει πολύ περισσότερο χρόνο από ό, τι θα χρειαζόταν για να μάθουν Kohana. Είναι βασικά η επιλογή σας για το τι θέλετε να επιλέξετε για να μάθουν, αλλά αν θέλετε να ιδρυθεί και να λειτουργήσει γρήγορα, Kohana είναι σίγουρα μια πολύ καλή επιλογή. Οι τελευταίες ερωτήσεις πριν καταλήξουμε; Ναι. [Φοιτητής] Πώς θα ενσωματώσει ότι σε ένα πλαίσιο CSS σαν να χρησιμοποιούσατε όταν ήσασταν καθοδήγηση; Το ερώτημα είναι πώς θα ενσωματώσουν ότι με ένα πλαίσιο CSS; Αυτό που θα κάνουμε είναι πιθανότατα θα περιλαμβάνει κατά πάσα πιθανότητα ένα νέο φάκελο όπου θα πετάξει όλα τα CSS αρχεία μας, και στη συνέχεια είχαμε επίσης να προσθέσετε ένα νέο πρότυπο. Στο πρότυπο που θα περιλαμβάνει αυτά τα αρχεία CSS για να βεβαιωθείτε ότι είστε αναφέρονται σε κάθε σελίδα, και στη συνέχεια, όταν είστε πραγματικά γράφοντας HTML, Απλά προσθέστε τα κατάλληλα μαθήματα και εταζέρα, και, για παράδειγμα, όταν χρησιμοποιείτε κάτι σαν τη μορφή λειτουργία βοηθός, μπορείτε να προσθέσετε περισσότερες παραμέτρους αργότερα να διευκρινίσει ποια μαθήματα θέλετε να συνδέονται με διάφορα πράγματα ώστε να μπορούν να το στυλ σωστά, και αυτό είναι βασικά το πώς θα πάει. Οποιεσδήποτε άλλες ερωτήσεις; Awesome. Σας ευχαριστούμε για το χρόνο σας, και σας ευχαριστώ που ήρθατε. Εγώ δεν πρόκειται να προσθέσει πάρα πολύ αλλού, 1 αλλά πραγματικά γρήγορο πράγμα είναι δεν έχουμε μια σύνδεση στη φόρμα. Πραγματικά ηλίθιος. Ας προσθέσουμε ένα - στην πραγματικότητα κατά την άποψη, το blog, δείκτης, ας πολύ γρήγορα να προσθέσετε ένα σύνδεσμο που πηγαίνει στη νέα σελίδα, η σελίδα όπου μπορούμε να εισάγουμε μια νέα θέση. Εμείς πάμε για να το κάνουμε αυτό. Τι ωραία που είναι όλη αυτή η ομάδα των βοηθητικών λειτουργιών HTML που κάνουν διαφορετικά πράγματα για σας, έτσι ώστε να έχει ήδη είδε τις οντότητες λειτουργούν εδώ, αλλά έχουν επίσης μια λειτουργία που ονομάζεται «άγκυρα», το οποίο μπορείτε να πληκτρολογήσετε στο blog / νέα και λένε, "Δημοσίευση ένα νέο blog." Και αυτό θα μπορούσε να δημιουργήσει το σύνδεσμο για σας, και αυτό φαίνεται πολύ ασήμαντο για να το κάνετε, αλλά αυτό είναι ωραίο, γιατί ας υποθέσουμε ότι είστε σε κίνηση την ιστοσελίδα σας από το 1 τομέα σε κάποιον άλλο. Και αν απλά έγραψε από τις διευθύνσεις URL σας, τότε θα πρέπει να αλλάξετε όλες τις διευθύνσεις URL. Ή ίσως να μετακινηθεί από 1 υποφάκελο σε άλλο υποφάκελο. Θα πρέπει να αλλάξουμε όλα εκείνα τα URLs τον εαυτό σας, και αυτό δεν είναι διασκέδαση. Μπορείτε να χρησιμοποιήσετε αυτήν την άγκυρα εδώ, και μπορείτε να αλλάξετε τον τομέα ή το πρόθεμα υποφάκελο στο αρχείο ρυθμίσεων φορά, και στη συνέχεια θα εφαρμόσει ότι παντού, και αυτό είναι, και πάλι, ένα μεγάλο παράδειγμα δεν επαναλαμβάνουν τον εαυτό σας, την ξήρανση τον κωδικό σας έξω. Όπου κι αν είστε επαναλαμβάνοντας τον εαυτό σας, να προσπαθήσουμε και να εξαγάγετε σε κάποιο είδος του αρχείου ρυθμίσεων ή σε μια διαφορετική λειτουργία και να το χειριστεί αυτό για σας. Και το τελευταίο πράγμα που θα ήθελα να σας δείξω ήταν ας υποθέσουμε ότι είμαστε πίσω σε αυτή τη θέση, και είχε συνθέσει κάποια πραγματικά μεγάλο δοκίμιο, αλλά ξέχασα να συμπεριλάβει μου συγγραφέα. Τώρα, όταν κάνετε κλικ στο "Υποβολή Post," Μόλις έχασα τα πάντα. Όχι! Πραγματικά λυπηρό. Τόσο πώς μπορείτε να ασχοληθεί με αυτό; Αυτό είναι αυτό που κάνουμε. Αυτό που κάνουμε είναι εδώ για αυτές τις λειτουργίες εισόδου και περιοχή κειμένου, αν περιλαμβάνουν μια δεύτερη παράμετρο, τότε η τιμή της εν λόγω δεύτερης παραμέτρου Είναι πρόκειται να είναι αυτό το πεδίο θα πρέπει να συμπληρωθεί με αρχικά. Τι θα μπορούσαμε να κάνουμε είναι στο blog μας ελεγκτή, θα μπορούσε να συνδεθεί με μια άλλη μεταβλητή. Καλέστε το "αξίες" ίσως. Και να περάσει στην μετά array, κυριολεκτικά. Αυτό σημαίνει ότι εάν η επικύρωση αποτύχει, περάσει για μένα η θέση συστοιχίας που έχουν υποβληθεί από την τελευταία αίτηση, και με αυτόν τον τρόπο μπορώ να χρησιμοποιήσω τις τιμές από την τελευταία υποβολή μου να συμπληρώσουν εκ νέου τα πεδία. Τώρα μπορώ να κάνω κάτι σαν τιμές συγγραφέα και τις αξίες του σώματος, και με αυτόν τον τρόπο τώρα αν κάνω κάποια τυχαία πράγματα και κάντε κλικ στο "Υποβολή Post," τότε μένει εκεί. Αλλά θα πάμε να τρέχει σε ένα άλλο πρόβλημα. Αυτό λειτουργεί, αλλά αν πάω στην σελίδα την πρώτη φορά, πρόκειται να καταρρεύσει, και αυτό γιατί η πρώτη φορά πάμε στη σελίδα, η θέση αυτή η μεταβλητή δεν έχει οριστεί ακόμα. Είναι null. Δεν υπάρχει. Και αυτό που θέλω να πω είναι αν υπάρχει αυτό το κλειδί, απόδοση, τότε η αξία αυτού του πίνακα, αλλά αν το κλειδί δεν υπάρχει, τότε επιστρέφει μια κενή συμβολοσειρά. Αυτή είναι η λειτουργικότητα που θέλουμε εδώ. Θέλουμε να ελέγξετε αν υπάρχει το κλειδί πριν προσπαθήσετε να αποκτήσετε πρόσβαση στο φάσμα, και αρκετά ευτυχώς, Kohana μας δίνει επίσης μια λειτουργία βοηθού για αυτό. Έχουν όλη αυτή η σουίτα των λειτουργιών με το όνομα ARR, μικρή παράταξη, και έχουν 1 λειτουργία που ονομάζεται "πάρει" και μπορείτε να περάσετε στη συστοιχία, και μπορείτε να περάσετε το όνομα του κλειδιού. Στη συνέχεια, βασικά αυτό που θα κάνουμε είναι ότι θα προσπαθήσει να πάρει το κλειδί, αλλά αν αυτό το κλειδί δεν υπάρχει στον πίνακα, Στη συνέχεια θα επιστρέψει κενό, ή μπορούμε επίσης να ορίσετε μια προεπιλεγμένη τιμή, πιστεύω, το οποίο είναι ωραίο. Τώρα, αν κάνουμε το ίδιο πράγμα ξανά, τότε θα δείτε τώρα δουλεύει την πρώτη φορά, και πάλι, αν πληκτρολογήσετε κάποια τυχαία πράγματα και να προσπαθήσουμε και να υποβάλει, τότε μένει εκεί. Και υποθέτω ότι μπορώ να σας δείξει πώς να προσθέσετε ένα πρότυπο πολύ γρήγορα. Τι μπορούμε να κάνουμε πρώτα είναι ότι μπορεί να προσθέσει μια νέα άποψη που ονομάζεται "template.php" μέσα στο φάκελο Προβολές, και τι Πάω να κάνουμε είναι να πάω να εκτυπώσετε κάτι που ονομάζεται "περιεχόμενο" η οποία πρόκειται να είναι κύριο περιεχόμενο μου. Και ίσως στο κάτω μέρος Πάω να προσθέσει, ας πούμε, πνευματικών δικαιωμάτων. [Δεν ακούγεται η ερώτηση του φοιτητή] [Brandon Liu] Ίσως αυτό είναι ένα εξαιρετικά βασικό πρότυπο που θέλετε να χρησιμοποιήσετε. Θέλω να έχω ένα φάκελο με τα πνευματικά μου δικαιώματα σε κάθε σελίδα, και τώρα τι Πάω να κάνουμε μέσα στον ελεγκτή μου είναι τώρα, αντί να λέει, "επεκτείνει Controller" Πάω να πω, «επεκτείνει Controller_Template" και τώρα, αντί να λέει, "το σώμα απάντηση είναι ίση με την άποψη αυτή," Πάω να πω, "το περιεχόμενο αυτό πρότυπο είναι -" και νομίζω - μπορώ να τοποθετήσω ένα σύμβολο του ίσον; Ξεχάσω. Ναι, σκέφτηκα έτσι. Και τώρα μπορώ να ορίσω ότι το περιεχόμενο της μεταβλητής να ισούται με την προβολή. Μπορώ να κάνω το ίδιο και εδώ. Και τώρα, αν μου ανανεώσετε, μπορείτε να δείτε τώρα αυτό το δικαίωμα του δημιουργού προστίθεται εκεί, και μόλις κάνει κάποια τυχαία θέση, και, στη συνέχεια, και πάλι, θα πρέπει να δούμε ότι η πνευματική ιδιοκτησία είναι στο κάτω μέρος της σελίδας. Great. Αυτό είναι το μόνο που ήθελα να σας δείξω παιδιά. [Χειροκροτήματα] Οποιεσδήποτε ερωτήσεις; [CS50.TV]