[Seminarium] [Kohana: Lekka PHP Framework] [Brandon Liu] [Harvard University] [To jest CS50.] [CS50.TV] Witam wszystkich. Nazywam się Brandon. Jestem młodszy tutaj na uczelni robi informatyki, a dziś będziemy mówić o Kohana, który jest frameworkiem tworzenie stron internetowych. Dziś będzie na żywo seminarium kodowania, więc jestem w zasadzie zamiar spędzić 5-10 minut wyjaśniając co Kohana jest, i jestem dosłownie zbuduje bardzo prosty blog dla Ciebie tu dosłownie od zera. Zamierzamy pobrać kod ze strony Kohana, i zamierzamy rozpocząć budowę blog, i mam nadzieję, że będzie to bardzo pouczające, bo zobaczysz być może być może zrobię jakieś błędy, i zobaczysz mnie odzyskać od nich, lub zobaczysz mój proces myślowy, jak zbudować poprzez tego bloga, a tymczasem, można także zapoznać się z samą ram. Mam nadzieję, że będzie to bardzo pouczające ćwiczenie. Po pierwsze, co to dokładnie jest ramowa? Jeśli już przy CS50 tak daleko, to naprawdę nie pracował z żadnym Ramy i jeszcze sprawa to. Prawdopodobnie zrobić 1 pset tworzenie stron internetowych już, i powiedzmy, że nadal budować stron internetowych i utrzymać budynek. Zaczniesz zauważać kilka rzeczy. Pierwszą rzeczą, jaką można zauważyć, jest to, że jesteś prawdopodobnie robi te same rzeczy w kółko przez cały czas, takie rzeczy jak czyszczenie danych wejściowych użytkownika, rzeczy takie jak organizowanie plików w określony sposób. Inna sprawa, będziesz też zapewne jest fakt, że kod może rozpocząć się bardzo, bardzo brudny, i możesz go zostawić bałagan i po prostu bardzo trudno z utrzymaniem go, lub może zacząć strukturę kodu i co modułowa w niektórych sposobów, aby go bardziej linkujących. To gdzie w zasadzie przyszedł ramy internetowych w. Ci ludzie, którzy zbudowali wiele stron internetowych, mówili, "Nie trzeba powtarzać tego za każdym razem możemy zbudować stronę internetową." "Dlaczego nie możemy po prostu zrobić pakiet, który wykonuje wszystkie te rzeczy dla Ciebie za każdym razem, gdy chcesz zbudować stronę internetową? " I tak, że w momencie tworzenia nowej strony internetowej, po prostu skupić się na tym, co dokładnie ta konkretna strona jest na temat. Nie musisz powtarzać wszystkich różnych konfiguracji i oddzielenie przepisywania kodów i kod że często trzeba zrobić, gdy robisz internetowe. Chodzi o to, że ramy pozwala na pisanie kodu wyższego poziomu bez konieczności martwienia się o szczegóły niższego szczebla. Szczegóły niższego poziomu może być coś takiego jak czynienia z czyszczeniem danych wejściowych użytkownika. To jest coś, czego nie powinien naprawdę trzeba się martwić. Należy skupić się na tym, co jest w rzeczywistości podział internetowej o. Eliminuje dużo kodu szablonowe. Jest to architektura dla projektu. Najbardziej popularny byłoby Model-View-Controller, które mam zamiar mówić o chwilę. I wiele razy te ramy ucieleśnieniem zestaw procedur, zasady i najlepsze praktyki używanie tak, że kiedy przyjmie ramy internetowej trzeba napisać kod w określony sposób, i jest ogólnie uzgodnione zbioru zasad przez społeczność, która jest powszechnie uznaje się dobrym sposobem pisania kodu. To sprawia, że ​​kod jest bardziej w utrzymaniu, bardziej użyteczny, tak dalej, i tak dalej. I wreszcie, co chcę podkreślić o ram w porównaniu z bibliotek jest to pomysł, o odwrócenie kontroli, i co to jest. Różnica pomiędzy biblioteki i ramy jest biblioteką nadal jesteś pisanie programu głównego, i masz coś w rodzaju wywoływania biblioteki i wzywając bibliotece zrobić coś dla Ciebie. Różnica między biblioteką i ram jest to, że ramy zaczyna się kontroli, i wywołuje kod, więc można myśleć o tym, jak - to dlaczego to się nazywa ramy - Ramy te to rama i strukturę kodu, i wypełnić otwory, i to będzie bardziej widoczne w drugim gdy widzisz, że zacznę pisać kod w kontekście ram. Zobaczysz, że mam wypełnienie luki, i ramy jest rodzajem kontroli wszystkich ruchomych elementów, i muszę umieścić elementy w odpowiednich miejscach. Dziś będziemy mówić o Kohana, który jest jednym z wielu ram PHP. Istnieją ramy sieci web, a tam są te, w niemal każdym języku, i Odbieram Kohana Kohana jest zapewne dlatego, i ogólnie uznane za najprostszy frameworkiem odebrać. Jest to najbardziej lekki. Są tam inne te, które pochodzą z wielu, wielu innych funkcji, ale wydają się być trudniejsze do odbioru. I wreszcie, Kohana używa architektury MVC. Jest to na tyle lekki, że można dosłownie zbudować projekt tutaj tuż przed oczami, i można dość dużo podążać dość łatwo. Co to jest architektura MVC? To oznacza Model-View-Controller, i być może, jeśli myślisz o kodzie masz pory pisze dla niektórych swoich psets tworzenie stron internetowych może być w stanie zobaczyć niektóre z tego, ale zwykle kiedy zacząć pisać bardziej złożona aplikacja internetowa, podział tych 3 segmentach staje się coraz bardziej oczywiste. Położyłem się MVC tutaj rodzaju, jak stos, i często usłyszysz ludzie mówią o stosy w rozwoju internetowej, i ten ma na celu zilustrowanie idei, że każda z warstw, każdy komponent bardzo stara się tylko komunikować od 2 do innych komponentów. Ktoś uzyskuje dostęp do strony internetowej jako klienta lub przeglądarki. Ich interakcji z programu za pomocą kodu widoku. Kod zobacz współdziała ze sterownikiem. Sterownik współdziała z modelu a model współpracuje z bazą danych SQL. I nie ma przeskoki pomiędzy jeśli piszesz kod poprawnie. Co te rzeczy zrobić? Model zasadniczo jest kawałek kodu, który zajmuje się swoimi danymi. Wszystko, co dotyczy bazy danych, z obiektów, które można zapisać, lub pobieranie tych obiektów w bazie danych, że wszystko jest obsługiwane przez model. Może masz obiektów w bazie danych. Mamy zamiar stworzyć model, mający do czynienia z wiadomości, tak Post może mieć pewne atrybuty do niego. Możesz mieć funkcje wokół przechowywania tych stanowisk lub pobierania wiadomości lub filtrowanie wiadomości i tak dalej, i tak dalej, i to jest cały kod, który jest obsługiwany przez model. Sterownik to rodzaj logiki aplikacji, i wiele różnych rzeczy może pójść w logice aplikacji. Jeśli mówisz do innego API, że może być tam, gdzie mamy do czynienia z logiką aplikacji. Jeśli starasz się wziąć ze sobą w danych z wielu różnych modeli i trzeba je połączyć w jakiś sposób, że często może być obsługiwane przez kontroler. Na przykład, na Facebooku, jeśli ktoś znajomy, to być może, że akt ustanawiający takie relacje Można tego dokonać przez regulator. I wreszcie, widok jest kod, który jest generowanie co faktycznie zobaczyć. Wiele razy myślę, że w psets CS50 tak naprawdę nie zachęcają was do oddzielenia tych 3 rzeczy. Prawdopodobnie będziesz mieć to duży, długi plik, gdzie na szczycie zrobić jakieś zapytanie SQL, a może zrobić niektóre przetwarzania na danych, które pobierane z bazy danych, i wtedy masz wszystkie swoje HTML na dole. I może się okazać, że podczas tworzenia więcej i więcej stron że masz zamiar mieć trochę kodu powtórzenia, a także, jest to plik robi się naprawdę duża i długa i staje się niewydolny zarządzać. Powodem, dla którego MVC jest tak dobrze traktowane dla wielu powodów. Pierwszą rzeczą jest coś, co nazywa oddzielenie obawy który jest pomysł, że gdy masz - idealnie 1 kawałek kodu powinien zrobić 1 rzecz i zrobić to naprawdę dobrze, i nie należy łączyć fragmenty kodu, które wykonują odmienne rzeczy. Na przykład, widok kodu i kod modelu, tak naprawdę nie muszą być związane. Nie muszą być w tych samych plikach, więc kiedy można, rozdzielając je więc jest to łatwe do utrzymania. Inna sprawa to kod wielokrotnego użytku. Może znaleźć się pisząc to samo zapytanie SQL lub robi Podobne zapytania, które mogą być abstrakcyjnymi 1 funkcji, i to jest idea modeli i kontrolerów, mając go w osobnej funkcji, które można ponownie wykorzystać w różnych miejscach w projekcie. I w końcu, że jest przywiązany do suszenia kodu, lub nie powtarzając się, nie powtarzaj się. Jest to bardzo zrozumiałe w rozwoju. Kiedy tylko może, nie chcę się powtarzać, bo jeśli powtarzać się,  to jest o wiele bardziej kosztowne w utrzymaniu. Jeśli chcesz zmienić 1 rzecz, trzeba zmienić go wszędzie, i prowadzi do błędów, i to straszne. Wszystko w porządku. Wszelkie pytania do tej pory około Kohana w ogóle? Świetnie. Teraz jedziemy do nurkowania w żywej sesji kodowania, i mam nadzieję, że wszystko pójdzie dobrze. Mam zamiar w zasadzie budować tę stronę na jednym z moich serwerów zdalnych i ten sposób, że chłopaki mogą również zobacz stronę internetową i dostęp do strony internetowej, a także środowisko jest lepiej skonfigurowany niż mój zdalnej maszyny, ponieważ jest systemem Linux zamiast OS X. Jesteśmy dosłownie zaczynać. KohanaFramework.org. Zamierzam pobrać kod ze strony internetowej. Mam zamiar skopiować adres łącza, iść do mojego serwera, pobierz go, i mam zamiar go rozpakować. [Student] Co jest największym możesz tekst? [Brandon Liu] Czy tak jest lepiej? [Student] Czy to wykonalne? [Brandon Liu] Tak, to jest w porządku. Ściągnąłem plik ZIP i rozpakować, że do katalogu o nazwie Kohana, i mamy zamiar zmienić nazwę tego CS50-Kohana, i idziemy w. Niesamowite. Tutaj można zobaczyć kilka różnych plików. Większość z was może zignorować - ale jesteśmy nie zamierza przejść przez każdego pliku, który znajduje się tutaj z powodu naszych ograniczeń czasowych, ale generalnie po zainstalowaniu Kohana, pierwszą rzeczą, możesz zrobić jest udać się do katalogu, a ty po prostu zrobić kilka badań środowiskowych i etażerka aby upewnić się, że środowisko jest prawidłowo ustawiony, aby uruchomić Kohana i upewnić się, że wszystko jest w porządku. Można zobaczyć większość rzeczy przeszedł, ale generalnie zawsze uruchomić w tym 1 błąd w którym skarży się, że niektórzy nie ma prawa zapisu w katalogu, a to dlatego, że z pewnych uprawnień. Nie wiem, ile wam dowiedzieliśmy się o uprawnienia do plików w CS50, ale jeśli nie tworzenie stron internetowych, masz zamiar uruchomić w tej kwestii dużo. Mam zamiar zrobić to zapisu i myślę, że mam również - tam idziemy. Ok, więc teraz można zobaczyć wszystko, co przeszedł, i teraz powie to, aby zmienić nazwę pliku install.php. Zamierzam przenieść plik install.php do installed.php, i teraz, jeśli ja odświeżyć, to daje mi jakiś błąd, i to, gdzie jest cala debugowania To jest, gdzie można zobaczyć, co faktycznie się stanie. Jest to domyślnie zakłada, że ​​Kohana Twój projekt jest w katalogu głównym domeny, więc spodziewa się pan w demo.brandonkliu.com. Musimy powiedzieć, że jest to rzeczywiście w podfolderze. To w podfolderze o nazwie CS50 Kohana. Chodzi o to, że jest źle interpretują CS50-Kohana jako coś innego, co wytłumaczę wam w sekundę. Ale powinienem powiedzieć, że jest coś, co należy się spodziewać. Co mamy zamiar zrobić, to będziemy go w tym folderze o nazwie Bootstrap.php, który to folder konfiguracji, gdzie wiele różnych rzeczy są ustawione. Otworzyć to. To może jedna z pierwszych rzeczy, zrobię to zmienić strefę czasową. A potem zobaczymy. Aha! Tutaj. Istnieje kilka różnych powiedzeń konfiguracyjnych w tutaj, ale jeden szukam jest ta rzecz zwana baza URL, i domyślnie mam ustawione na Kohana, ale mam zamiar to zmienić do CS50-Kohana, i myślę, że powinien to naprawić. Tak, to świetnie. Domyślnie, aby zobaczyć, że to działa, to mówi: "Hello World". Skąd to się wzięło? Jak dostać się do Hello World? Gdzie dokładnie jest to kod, który faktycznie napisał, że? Do zrozumienia, że ​​będę wprowadzać tę koncepcję o nazwie routingu. Prawie wszystkie ramy sieci web mają pojęcie o nazwie trasy, który jest kawałek oprogramowania, które będzie mapa jakiegoś URL do pewnego fragmentu kodu w ramach swojej struktury. Na przykład, jeśli masz jakiś adres URL i udać się do jakiegoś URL jak foo.com / blog / wszystko to co ramy zrobi - a przynajmniej to, co Kohana zrobi - jest to będzie znaleźć klasy o nazwie Kontroler blog i to się dzieje, aby uruchomić funkcję o nazwie działania wszystkich. Wiem, że mówię o klasie i funkcji, i wiem, że wy nie objęły klasy i funkcje jeszcze CS50, ale teraz, można myśleć o klasach tylko grupy funkcji, sposób grupowania funkcji razem. To naprawdę wszystko, co musisz wiedzieć. Teraz, jeśli spojrzymy na nasze struktury folderów, wewnątrz folderu aplikacji jest inny folder o nazwie klasy, i inne foldery o nazwie kontrolera i modelu. Jeśli spojrzeć w folderze sterownika, widzimy, że istnieje plik o nazwie Witamy, i można zobaczyć tutaj jest klasa o nazwie Kontroler Witamy, i tam jest funkcja o nazwie Akcja Główna, i co robi to ustawia ciało swojej odpowiedzi na Hello World. To miejsce, gdzie kod jest napisany. Inne pytanie jest, dobrze, że nie poszedł do bla, bla, bla, / welcome / index. Jak się tu znalazłem? Cóż, to tylko dlatego, tu na dole pliku uruchamiającego naszego w którym możemy ustawić nasze drogi widać, że ustawione są jakieś domyślne dla Ciebie. Domyślny sterownik jest mile widziane. Domyślną akcją jest indeks. Dlatego, gdy kładziemy nic tam automatycznie poszedł do kontrolera powitalnej i akcji index. Wszystko sensu tak daleko? Teraz możesz zrobić więcej niż tylko iść do kontrolera i konkretne działania. Możesz także przekazać w parametrach do kontrolera. Tylko jako przykład Mam zamiar dodać kolejne działania w tym kontrolerze pokazać. Nazwijmy tę akcję Echo, bo to będzie powiedzieć cokolwiek dać, a więc jestem w zasadzie zamiar chwycić parametr, który będzie wysłany przeze mnie do programu routingu, i jak widać tutaj, ta linia tutaj, można zobaczyć, że to w zasadzie oznacza, że ​​masz kontroler i masz /, i masz działanie, i masz inny /, i że będzie to parametry, a ponieważ mamy tę nazwę ID w nawiasach kątowych, co oznacza, że ​​mamy do nazywania tego parametru ID. Później w kodzie kontrolera, jeśli chcę pobrać trzymać tego parametru, Mogę użyć kodu napisałem, znajdź parametr o nazwie ID. To, co zrobiłem tutaj, i mam zamiar wrócić i powiedzieć, "Mówiłeś, że". A więc teraz, jeśli pójdę na naszej stronie internetowej, Idę do cs50-kohana/welcome/echo/Helloooo-- Och, to prawda. Jest 1 krokiem wyszedłem na zewnątrz. Jest to część żywej idei kodującej. Tu jest 1 rzecz. Zobaczmy. Więc zwykle domyślnie z dużo tych aplikacji internetowych trzeba włączyć tę index.php rzeczy w adresie URL, bo pomysł jest index.php jest rodzajem punktu wejścia z aplikacji, ale oczywiście, to jest rodzaj irytujące mieć. Nie chcesz mieć index.php pojawia się w adresie URL, i prawie każdy ramy internetowej z pudełka ma ten problem index.php, i tak musisz podjąć pewne działania, aby być w stanie usunąć tego. I tak w tym przypadku, to, co mamy zamiar zrobić, to będziemy korzystać z pliku o nazwie. htaccess, i to jest coś, co jest specyficzne dla serwera WWW Apache, i może robić takie rzeczy jak przepisać adresy URL i przekierować adresy i tak dalej, i tak dalej, i Kohana jest na tyle miły, aby zapewnić szablon. plik htaccess, które możemy wykorzystać. Jak widać, jest tam plik o nazwie example.htaccess, i mamy zamiar skopiować, że do. htaccess. Zamierzam otworzyć i edytować ten, i zasadniczo robi kilka różnych rzeczy. Klawisz linii, może chcesz spojrzeć na to tutaj. Chodzi o to, że ten ustanawia zasadę, która mówi, "Dobrze, cokolwiek wpiszesz, prepend index.php do tego." Widać, że. . * Stoi na wszystko, dopasować wszystko, a następnie drugą część index.php / $ 0, i $ 0 odnosi się, co zostało dopasowane wcześniej. Czy to ma sens? Ale naprawdę kluczem, co chcę zmienić to zmienić tę zasadę przepisywania, który jest podstawą URL. To rodzaj zakłada gdzie pracujesz od. Mam zamiar dodać CS50 Kohana temu i w ten sposób teraz, jeśli mogę usunąć index.php, powinien działać, i mam zamiar dodać kilka liczb , aby pokazać, że rzeczywiście nie działa. Brzmi dobrze. Wszelkie pytania do tej pory? [Student] Jak to wiedzieć, aby 123? Jest to, że argumentem? Dokładnie. Możesz myśleć o tym, jak argument. Ale dziwne jest jednak to, że nie sposób go Kohana Nie jest to dokładnie tak, jak to zrobić argument. Trzeba złapać to tak. Musisz chwycić obiekt żądania i poprosić o to, że parametr o nazwie ID, Identyfikator i nazwa pochodzi od tego pliku uruchamiającego że pokazałem wcześniej, a nazwa ID było w tych kątowników, i to, jak można chwycić te parametry. Niesamowite. Wszelkie inne pytania? Tak jak mówiłem, kontrolery, obsługiwać ich logikę aplikacji, tak, to jest 1 przypadek, w którym można zobaczyć that's - to jest bardzo proste, ale jest to nadal logiki aplikacji, Pomysł chwycił parametr i tworzenia nowego łańcucha który mówi: "Powiedziałeś, bla", a następnie wypluwając że z powrotem do Ciebie. I ogólnie to, co musisz zrobić, to tworzyć różne kontrolery. Utworzyć oddzielne sterowniki dla różnych części witryny. Dziś idziemy do bardzo prostej strony internetowej, i to będzie bardzo proste blogu. Jedziemy do nowego kontrolera tylko dla stanowisk w blogu. Ale gdybym miał także dodawać komentarze do blogu, wtedy prawdopodobnie chcesz, aby nowy kontroler do tych uwag. Gdybym chciał, aby dodać użytkowników, to pewnie dodać nowy kontroler dla tych użytkowników, i ogólnie, chodzi o to, że gdy masz nowy model, Nowy obiekt danych, który ma się do czynienia, masz jednego kontrolera na tym obiekcie danych. Dziś mamy tylko zamiar pracować z 1 obiektu danych, i że będzie postów, a także można myśleć obiektów danych jako odpowiadające tabele. Generalnie każda tabela odpowiada 1 typ obiektu danych, tak, będzie musiał po tabeli 1 post modelu, który będzie miał 1 kontroler postu odpowiadający, oraz samo uwagi, sama dla użytkowników, i tak dalej, i tak dalej. I to jest ogólna zasada. Nie będą szczególne przypadki, w których może się różnić od tego, ale 90% czasu to, co masz zamiar robić, i pokażę ci, że to, co będziemy dziś robić. 1 więcej pojęcie, zanim zagłębimy powrotem do kodu, ten pomysł obiektu relacyjnego mapowania. Wy już zrobił pset tworzenie stron internetowych, i widziałem, że można zrobić zapytanie SQL, i co wraca do ciebie są wiersze. Masz te wiersze, a wskaźnik ich pośrednictwem nazwy, nazwa kolumny i stołu i to, w jaki sposób z nim pracować, i może być nieco kłopotliwe. Ale co więcej, jeśli masz relacje w bazie danych, jak na przykład, jeśli mam komentarze i posty, to może chcę złapać stanowiska nadrzędnego komentarza. Jeśli mogę użyć tylko wierszy w SQL, a następnie wszystko, co mogę dostać jest ID słupka dominującej i nie samą wiadomość. Ale kiedy jesteśmy kodowania, co tak naprawdę chcę, to rzeczywiście chwycić  rodzic zakładać się czasami. , Co czyni obiekt jest mapowanie relacyjnych Wystarczy wyniki kwerendy bazy danych i umieszcza je w obiekty dla Ciebie, które są o wiele ładniejsze pracować niż zwykłych tablic i wierszy. Na przykład teraz, gdy mam komentarz może, i chcę, aby pobrać jego rodzica stanowisko, i nie może komentować strzałki stanowisko, to będzie naprawdę mi obiekt wiadomości odpowiadająca faktycznemu postu dominującej, a nie tylko niektóre ID, które chciałbym inaczej użyć i dokonać innego zapytania SQL, aby pobrać w słupek, który jest kłopotliwy i niepotrzebne. Co więcej, przez odwzorowywanie wszystkie te wiersze danych w obiektach można również dołączyć więcej funkcji do obiektów, tak, na przykład, rozmawiałem o tym, jak zajęcia są zasadniczo ugrupowaniami funkcji. Można myśleć o tym w ten sposób. Na przykład, może mam ten post obiekt, a może chciałbym mieć jakieś funkcje z nim związane mówi mi, że w zasadzie to napisał niedawno był? Został wysłany w ciągu ostatniego tygodnia, prawda czy fałsz? I to jest funkcja można dołączyć na tym obiekcie, i jest to bardzo wygodne, aby mieć go w tym samym miejscu, i istnieje wiele różnych funkcji, można tworzyć dla tych obiektów, i to naprawdę miło być w stanie dołączyć go do klasy, do obiektu, natomiast jeśli tylko miał wierszy pochodzących z bazy danych, to naprawdę nie można dołączyć żadnej funkcji do tego. Jest to dosłownie tylko dane. Wszelkie pytania na temat tego w ogóle? ORMs są bardzo częste tworzenie stron internetowych, i istnieje wiele różnych typów ORMs, i Kohana ma własny ORM. Jest to bardzo proste, ale można poczuć, jak to wygląda. Stwórzmy model dla naszych blogach, i oczywiście pierwsza rzecz, którą musisz zrobić, to stworzyć rzeczywistą tabeli w naszej bazie danych, aby właściwie przechowywać nasze dane dla tych stanowisk. Pierwszą rzeczą, jaką mam zamiar zrobić, to udać się do phpMyAdmin. Czy chłopaki używane phpMyAdmin przed? Ok, super, tak, wy już wiecie, co to jest, i mam zamiar utworzyć nową tabelę o nazwie Kohana postów, i to będzie bardzo proste. Muszę ponowne zalogowanie Wszystko będziemy robić dziś mają autora i ciało, just keep it simple. Mam zamiar stworzyć tę tabelę, i teraz musimy tylko tabelę przedstawiającą nasze posty z 2 polami dla naszego autora i naszego ciała. Inna sprawa, mam zamiar teraz zrobić, to skonfigurować mojej aplikacji sieci web, więc wie, jak połączyć się z bazą danych, i to znowu jest coś, co musisz zrobić z wszystkich aplikacji internetowych. Trzeba powiedzieć, że nazwę użytkownika i hasło i nazwa bazy danych, i tak dalej i tak dalej aby dowiedzieć się, jak właściwie łączyć się z bazą danych. W Kohana, mamy coś, co nazywa moduł bazy danych, w folderze konfiguracyjnym mamy ten folder o nazwie bazy danych, i jak widać, istnieje kilka ustawień, które należy ustawić tutaj powiedzieć to, co jest nazwa użytkownika i hasło do bazy danych, więc można rzeczywiście do niej podłączyć. A ponieważ nie chcę, żebyście naprawdę wiedzą Nazwa użytkownika i hasło z mojej bazy danych, Mam plik w którym mam już ustawione to wszystko, i mam zamiar skopiować i wkleić go. Niesamowite. Ok. Myślę, że wszystko jest konfiguracja muszę zrobić, ale zobaczymy. Będziemy pracować w nim, a jeśli coś wywala, wtedy będziemy go naprawić. Teraz to, co mam zamiar zrobić, to mam zamiar stworzyć nowy kontroler. Albo faktycznie, przepraszam. Najpierw trzeba utworzyć nowy model. Będę tworzyć nowy model o nazwie Post.php, i to, co zamierzamy zrobić, to będziemy go nazywać klasy Model_Post. Trochę podświetlanie składni na, i tak, gdy mówię, "rozciąga ORM, że" w zasadzie kilka programowania obiektowego, niestety chłopaki nie nauczyli w CS50 jeszcze, , ale jest to dość łatwe do pobrania. Daje mi to wszystko dodatkową funkcjonalność, która pochodzi z tego pakietu ORM, i tak mam kilka dodatkowych funkcji i etażerka za darmo, które można zobaczyć trochę w drugim. Teraz właściwie wszystko, co musisz zrobić, to stworzyć tę klasę. I nawet nie trzeba robić żadnych funkcji ani nic, ale utworzeniu klasy, która reprezentuje tabelę, a ponieważ mam rozszerzony tej klasy ORM, Mam kilka rzeczy za darmo, więc na razie nie ma nic więcej do ustawienia w górę. A teraz to, co mam zamiar zrobić, to mam zamiar stworzyć nowy kontroler, które mam zamiar wymienić blog.php, i mam zamiar skopiować sterownika powitalnej więc nie trzeba ponownie wpisywać pewne rzeczy, i teraz muszę zmienić nazwę tego. Teraz to, co mam zamiar zrobić, aby przetestować, aby upewnić się, że wszystko pracuje, Zamierzam złapać pierwszy post z mojej bazy danych i wydrukować treści postu na ekranie. Aby zrobić to, co mam zamiar zrobić pierwszy mam zamiar zapisać posty do zmiennej tak, co zamierzamy zrobić, to - w Kohana, co musisz zrobić, to złapać obiekt wiadomości to trochę kłopotliwe, ale trzeba zrobić coś, co nazywa ORM :: factory, a następnie przechodzą w nazwie modelu chcesz, i zwraca obiekt ORM, który reprezentuje ten model. A potem, jak już mówiłem, kiedy rozszerzyć obiekt ORM, mamy wszystkie te metody za darmo, więc na przykład, mamy to nowa funkcja o nazwie "Znajdź wszystkie" który automatycznie powraca każdego posta w bazie danych, co jest dość wygodne. I teraz w ciele mam zamiar wrócić pierwszy post i zwraca jego ciało. I oczywiście, trzeba utworzyć stanowisko, więc niech wstawić nowy post. Powiem, "Brandon, mój pierwszy wpis." Niesamowite. A teraz mamy zamiar udać się do blogów i jeśli wszystko dobrze działa - och, to znowu inna rzecz, głupi zgody plik. Trzymaj się 1 sekundę. To trochę absurdalne. Nie idziemy. Ok. Naprawiłem ten problem uprawnień. To próbuje stworzyć kilka plików i trochę dziennik, i uprawnienia, ponownie, nie były ustawione prawidłowo, więc zrobiłem to więc te pliki były zapisywalne i wykonywalne więc może rzeczywiście zaloguj się do rzeczy. Teraz daje mi kolejny powiedzenie wyjątek klasy ORM, "nie znaleziono" a to dlatego, że zapomniał kolejny krok. Szkoda. W pliku folderów bootstrap, moduły te nie są tutaj, które można włączyć lub wyłączyć. Są to kilka różnych funkcji, które można wybrać, aby użyć w ciągu Kohana, który jest swego rodzaju miłe. Na przykład mają one moduł uwierzytelniania które można użyć do uwierzytelniania użytkowników. Mają moduł buforowania, jeśli chcesz wprowadzić jakieś buforowanie powrotem koniec, aby szybciej działa aplikacja i etażerka. Musimy włączyć bazę danych i moduł ORM, bo jak powiedziałem, jesteśmy przy użyciu bazy danych, oczywiście, i trzeba też włączyć moduł ORM, bo chcielibyśmy mieć dodatkowe funkcje, które jest miło mieć. Wszystko, co musisz zrobić, to odkomentuj te 2 linie, i teraz, jeśli ja odświeżyć, to dał mi kolejny błąd. Mówi: "Nie znaleziono klasy Model_Post." Teraz jest dobry problem mieć. Zobaczmy. Ich upublicznienie. Nie Czekaj. Och, kochanie. Nie wiem, dlaczego to nie jest w stanie stwierdzić, że. To jest naprawdę dziwne. Mam tej klasy tutaj. Chyba będę musiał - oh. Jestem tak głupi. Zapomniałem dodać tag PHP. Dlatego. Teraz muszę cofnąć, że 1 zmiana właśnie zrobiłem. Ok. Nie idziemy. To było naprawdę głupie. Nie miałem tag PHP otwarcia. Ale jak widać, teraz działa poprawnie, prawda? Mamy 1 słupek. Złapaliśmy pierwszy post, a teraz wydrukować swoje ciało. Świetnie. Fantastyczne. Wszelkie pytania do tej pory? Nope? Masz pytanie? Ok, więc po prostu stworzony model postu, bardzo podstawowe, i mamy zamiar dodać kilka funkcji w przyszłości. Możemy dodać walidacje i filtrowanie. Walidacja to jedna z rzeczy, że ramy rozwiązania dla Ciebie bardzo, bardzo dobrze, i nie sądzę, chłopaki mieli to zrobić dla swojej CS50 pset, ale jeśli nie tworzenie stron internetowych dla końcowego projektu, najprawdopodobniej będzie chciał zrobić jakieś walidacji, jak nie mając puste nazwy użytkowników, może o hasło z przynajmniej niektórych długości, takie rzeczy. I to jest naprawdę trudne w realizacji tych rzeczy przez siebie, i prawie każdy ramy internetowa zrobi to za Ciebie i pozwala to zrobić w bardzo czysty sposób. I model, w którym na ogół wyrażają te reguły sprawdzania poprawności, ponieważ jest sprawdzanie, czy model jest poprawny, czy nie. Ale teraz mamy zamiar umieścić, że dopiero później, a teraz idziemy do pracy w innej części, i mamy zamiar spróbować i nowy widok że zawiera wszystkie posty. Etapy tworzenia nowego działania na aukcji wszystkie posty jest złapać listę wszystkich stanowisk a następnie uczynić listę wszystkich postów poprzez widzenia. Tutaj, na szczęście, już złapał wszystkie posty za pomocą tej pierwszej linii, znaleźć wszystkie funkcje, a teraz co mamy zamiar zrobić to tak daleko Byłem bezpośrednio ustawiając ciało odpowiedzi przekazując ciąg, ale teraz chcę użyć widoku, a różnica między myślą i właśnie to robi jest z myślą mogę mieć ładny, duży szablon HTML, i co mogę zrobić, to przekazać je pewnych zmiennych a następnie automatycznie się wypełnić swój widok szablonu za pomocą tych zmiennych. Co zrobię, to będę utworzyć nowy widok, a ja nazwać widok coś w stylu "blog / index" i mam zamiar po prostu powiązać to - och, co piszę? Mój mózg jest gdzieś indziej. Idę do powiązać posty zmiennych do widoku, więc w ten sposób, że widok ma dostęp do tej zmiennej postu. A więc teraz trzeba utworzyć ten widok, więc tutaj mamy ten folder o nazwie "poglądy" i po raz pierwszy, mam zamiar utworzyć nowy folder o nazwie "pod tym blogu." To jest ładne. W ten sposób możemy mieć ładny hierarchię dla naszych poglądów. A potem mam zamiar utworzyć inny plik nie nazwie "index.php". Niesamowite. Rzeczywiście, niech mają je zarówno tutaj. Dokonanie plik widoku jest chyba najprostszym częścią tego wszystkiego, i to chyba wszystko już jesteś zaznajomiony. Mamy zamiar zrobić coś naprawdę prostego, zacząć, mówiąc: "Moja lista blogu." Następnie możemy przejść, i możemy iteracji tablicy posty, chwycić każdego posta i powiedzieć coś w stylu - może dodać linię a następnie wydrukować autora i ciało. Że sens tej pory? I zobaczymy, czy to działa. Nic się nie stało. Zastanawiam się, dlaczego. Och, brakowało mi 1 krok. Bardzo głupie z mojej strony. I stworzył widok, ale nie ustawić widok za odpowiedzi, więc trzeba zrobić 1 rzecz. Musisz to zrobić "to ciało odpowiedzi" i ustawić go jako widok. Nie idziemy. Mamy nagłówek, a następnie mamy post, i tylko dla zabawy, niech wstawić inne stanowisko więc możemy zobaczyć listę. I wstawić te 2 posty, i teraz, jeśli odświeżyć stronę, widzimy te wszystkie posty tutaj. Czy to ma sens tak daleko? Tak, pytanie? Och, w porządku. Jak widać, udało nam się oddzielić te wszystkie kody z na różne sekcje, a następnie można zobaczyć, że to najbardziej oczywiste z kodem widzenia. Plik ten tutaj, który reprezentuje pogląd, że dba tylko o reprezentowanie danych, wyświetlania danych. One przekazywane jakieś dane, a wszystko, co robi jest po prostu pokazać je do Ciebie. We wszystkich innych części kodu, nie będzie musiał martwić się o nic z tego, i podobnie, kod widok nie musisz się martwić o nic sposób uzyskiwania dostępu do bazy danych, i tak dalej, i tak dalej, który jest naprawdę dobry i sprawia, że ​​o wiele więcej kodu w utrzymaniu. Tak jak powiedziałem, widoki, są dynamiczne, które to jest 1 plik, ale to generuje różne widoki na podstawie zmiennych faktycznie przechodzą w, a ponadto, istnieje wiele różnych funkcji pomocniczych że można użyć, aby pomóc Ci napisać kod szybciej, które pokażę, w ciągu sekundy. Tak. [Student] Więc to $ 0 kontroler, prawda? Że druga sprawa. Pytanie jest równa 0 zł kontroler? 0 dolarów jest zmienna stworzyłem tutaj. I stworzył pierwszy widok. I przypisany do jakiejś zmiennej. Wtedy zdałem go w tej funkcji, należy ustawić go jako ciało odpowiedzi. Czy to ma sens? [Student] Więc jest widok :: fabryka, to zobacz jak klasy lub biblioteki [niesłyszalne] Funkcja fabryka? Pytanie o funkcji Widok :: fabryki, iw zasadzie jest to trochę więcej programowania obiektowego w istocie. Zobacz widok jest klasa, a to ma metodę o nazwie "Fabryka" i to jest sposób, aby pobrać obiekt, który jest nazwany "blog / index." I to jest trochę więcej programowania obiektowego rzeczy , że nie mam zamiaru iść do tego zbyt wiele. Teraz oczywiście, chcemy tworzyć nowe wiadomości, ale nie chcemy, aby zrobić to poprzez bazy danych, więc mamy zamiar utworzyć nową akcję za stworzenie nowego stanowiska, i tam jest wiele rzeczy musimy zrobić. Pierwsza rzecz, którą zamierzamy zrobić - Zajmijmy tych rzeczy jedna po drugiej. Pierwszą rzeczą, którą możemy zrobić, to musimy utworzyć formularz do wkładania nowy post, ale mam też zamiar dodać pierwszą nową akcję, więc dodanie nowego działania jest równie łatwe, jak dodanie nowej funkcji do kontrolera, i teraz mam zamiar zrobić coś bardzo podstawowego, wystarczy chwycić ten pogląd i pisać, po prostu wyświetlić go dla Ciebie. I to teraz mam zamiar utworzyć nowy plik widoku, i mam zamiar zacząć pisać pewne rzeczy. Co jest ładne o Kohana jest, że zapewniają one wiele różnych funkcji pomocniczych , aby łatwiej napisać widoku kodu, i 1 z tych funkcji pomocniczych lub modułów pomocniczych jest wokół piśmie formy. Do pisania formy, tak naprawdę nie trzeba pisać kodu HTML bezpośrednio sobie. Macie napisane formularzy HTML. Wiesz, jak to może być naprawdę bolesne i kłopotliwe do napisania formy. To nie jest zabawa, więc na szczęście, można w zasadzie napisać Kohana jest za pomocą formularza utworzenia funkcji pomocniczych zrobić to za nas. Zamierzamy w zasadzie mają pola na każdej rzeczy mamy, więc jeden dla autorów i jeden dla organów. Zamierzamy mieć etykietę, a my będziemy mieć wejście. I wtedy wreszcie będziemy mieć przedstawienie. I jak widać, to jest znacznie czystsze napisać niż cały ten bałagan HTML, który jest miłe. To prawda, że ​​istnieją inne ramy sieci web, które mają jeszcze czystsze niż to, ale przynajmniej jest to lepsze niż pisanie kodu HTML pod. Niesamowite, więc to, co widzisz. To trochę brudny, więc mam zamiar dodać tam podział wiersza aby to wyglądać trochę ładniej. Cóż, oczywiście, nadal wygląda naprawdę, naprawdę zły, ale my po prostu koncentruje na funkcjonalność do teraz, a nie na estetyce. Nie ma czasu, aby zrobić wszystko. I jak widać, teraz mamy bardzo podstawową formę, co jest miłe. Ten kod powiedziałbym jest czystsze niż próbuje napisać HTML tworzą się, tak, to jest miły. Co dalej? Teraz musimy robić rzeczy, z akcją. Zwykle, gdy piszesz formularzy HTML, trzeba powiedzieć to, gdzie to będzie przesłać formularz do. Domyślnie w większości ram internetowych, twierdzi ona do tej samej zawartości, więc chodzi o to, jeśli wysłać żądanie GET do / blog / nowe, powinno wyświetlić Ci formularz, ale jeśli wysłać żądanie POST do / blog / nowe z danymi, powinno to faktycznie spróbuj zapisać to stanowisko i coś z tym zrobić. Co zamierzamy zrobić, to w zasadzie wszystko, co musimy zrobić, by sprawdzić, czy jest to wniosek pocztą lub żądanie GET jest sprawdzenie, jakie są zmienne pocztowych, które można ustawić. A jeśli zmienna postu jest ustawiony, to będziemy próbować tworzyć nowy post. Ponownie, po prostu to zrobić, i że tworzy nowy post, a my dosłownie będzie ustawić jego pola, na przykład tego, a następnie będziemy go zapisać. A potem idę do przekierowania do strony głównej, aby mogli zobaczyć naszą listę stanowisk ponownie. Spróbujmy tego. Powiem, "Brandon" a następnie przesłać wiadomość, a jeśli wszystko pójdzie dobrze, jak widać, to przekierowanie mnie do strony indeksu, i gdybym przewiń do dołu, mamy nowo wstawiony słupek. Yay! Tak, pytanie. [Student] Co jeśli wszedł dokładnie to samo wprowadzony wcześniej? To upewnij się, że nie powiela samo składanie? Być domyślna, nie, ponieważ domyślnie - Przepraszam, pytanie brzmi, czy należy wprowadzić w dokładnie tym samym danych w formie i twierdzą, że to pozwala wstawić duplikat obiektu, Duplicate entry, zasadniczo? Teraz, tak, pozwoli Ci to zrobić, bo w bazach danych jest całkowicie poprawny mieć całkowicie zduplikowane wiersze, ale jeśli to jest problem, można dodać walidację, na przykład, aby upewnić się, że jeśli to jest dokładnie taki sam, jak coś, co już istnieje, to powiedzieć, że to nieważne, obiekt, i wtedy można nawet określić komunikat o błędzie i powiedzieć: "nieważne, ponieważ ten już istnieje", czy coś w tym stylu. Ale w tym przypadku, może po prostu stworzyć coś duplikat. Spróbujmy teraz dodać kilka walidacji. Problem z tym jest to, że teraz Mogłem dosłownie złożyć całkowicie pusty post. Mogę kliknąć ten przycisk, teraz, i tam idziemy. Naprawdę nie można go zobaczyć, ale ta dodatkowa linia tutaj wskazuje, że dosłownie nowy post. To po prostu ma puste autora i puste ciało, i nie chcemy, aby ludzie, aby to zrobić. To gdzie jest walidacja w. Mogę iść do mojego modelu obiektu, i teraz mogę dodać nową funkcję, która określa co zatwierdzanie zasad należy dodać do tego modelu aby upewnić się, że jest to ważne, czy określić co to znaczy być ważna wiadomość? I chcę powiedzieć, że jest tylko ważna wiadomość, jeśli zarówno autor i ciało nie są puste, a to jest, jak to zrobić w Kohana. Utworzyć nową funkcję o nazwie "," Zasady a potem po prostu wrócić tablicę asocjacyjną , które określa zasady sprawdzania poprawności dla tego obiektu. Zamierzamy zwrócić tablicę, a następnie to, co zamierzamy zrobić, to powiedzieć "autor", to idzie do tablicy, który idzie do innej tablicy o nazwie "nie jest pusta". A potem mam zamiar powiedzieć "ciało". Ok, a składnia to i na to struktura może wyglądać trochę uciążliwe i mało skomplikowane. Jeśli czytać dokumentację, to całkiem proste, aby dowiedzieć się, Ale w zasadzie to, co trzeba zrobić, aby określić niektóre zasady walidacji i istnieje wiele różnych przepisów że Kohana da ci za darmo, jak można dodać reguły do ​​powiedzenia musi to być co najmniej ta długość. Może to musi być numeryczny. Może to ma być alfa numeryczny. Może to musi wynosić co najwyżej długość ta, tak dalej, i tak dalej. Istnieje wiele różnych przepisów, które Kohana udostępnia dla Ciebie, i można przejść na ich stronę, spójrz na dokumentację, i można zobaczyć wszystkie inne rzeczy, które można zrobić. Ale to jest wszystko, co mam robić, i teraz zobaczymy, co się stanie, jeśli przedstawi pusty post. Co się stanie? Och, nie, pojawia się błąd. Otrzymuję wyjątek sprawdzania poprawności. No, to jest dobre. Powiedział mi, że mój model jest nieważne, ale nie chcę, aby wyświetlić wyjątek do moich użytkowników podczas próby do przedstawienia coś nieprawidłowego, prawda? Chcę dać im jakiś przyjazny komunikat o błędzie gdy coś pójdzie nie tak. Co mamy zamiar zrobić, to będziemy zawijać wszystko w pętli try catch. Właściwie, myślę, że jest to również coś, czego jeszcze nie dowiedział w CS50, ponieważ C, język programowania C, nie ma wyjątków, ale prawie każdy inny język ma wyjątki, tak bardzo, bardzo krótko, Wyjątkiem jest coś, co może kawałek kodu wyjątek, gdy coś pójdzie nie tak, ale to może jakiś inny kawałek kodu wyżej może złapać ten wyjątek i coś z tym zrobić. Na przykład, w tym przypadku, kawałek kodu, który próbuje zapisać model, to potwierdza model, a jeśli mówi: "Dobra, model ten jest nieważny," to będzie wyjątek, i to jest rodzaj równoważny w C można powrócić -1 lub coś w tym stylu. I wtedy dla mnie, ta funkcja, mój kod na wyższym poziomie, można spróbować złapać ten wyjątek i w zasadzie powiedzieć, "Ok, jeśli złapać wyjątek, co ja mam zrobić?" Czy mogę wybrać, aby nie złapać ten wyjątek i niech ktoś wyżej złapać wyjątek lub jeśli nikt go łapie, Następnie cały program wywala i mówi, "Coś poszło nie tak, i nie mogłem sobie z tym poradzić." Ale co możemy zrobić, to zawinąć kawałek kodu w bloku try, a następnie również dodać coś o nazwie blok catch, który jest rodzajem kodu, który będzie starał się złapać wyjątki, które mogą wystąpić. I tak, jeśli złapię tego szczególnego wyjątku lub wyjątek unieważnienie, to, co mam zamiar zrobić, to Mam zamiar ustawić błędy - Myślę, że to, jak to zrobić - i mam zamiar ustawić błędów do jakiegoś przedmiotu. A następnie, co mam zamiar zrobić, to jeśli trafi na ten wyjątek, to nie będzie przekierować, a jeśli to nie przekierowywać to wyjdzie na razie blogu i uderzył ten blog / nowy, który chce chcę zrobić. Jeśli jest błąd, to ja chcę wrócić do formy i wyświetlać te błędy. Teraz to, co chcę zrobić, to chcę przekazać w tych błędów w widoku. Dobra, myślę, że mam pogląd, tutaj, i zasadniczo chcę wyświetlić te błędy, jeśli takie istnieją. Przed piszę na to HTML, będę bardzo szybko pokazać, co struktura tego błędu zmiennej wygląda, i to jest dobra praktyka w ogóle. Wiele razy można dostać coś w zamian od jakiegoś sposobu, niektórych funkcji w ramach strony internetowej, a ty nie wiesz, co wygląda na to zmienna, więc nie wiem, jak z nim pracować. Zamierzam użyć metody drukowania r, w zasadzie go wydrukować. I jak widać, to mówi mi, że to kojarzy tablica, i masz klucz, autor wskazuje na tym ciągu, Autor nie musi być pusty, a drugi klucz, ciało, wskazuje na inny ciąg, ciało nie musi być pusty. Jestem jak, dobrze, fajnie. Wtedy mogę iterację tablicy i wydrukować każdą wiadomość. Jest to w zasadzie jak tablicy asocjacyjnej z bandą wiadomości. Co mam zamiar zrobić, to "jeśli błędy" i mam zamiar utworzyć listę nieuporządkowaną, i idę do iteracji wszystkich błędów. I to, i teraz mam zamiar spróbować ponownie złożenie tego, i zobaczmy, co mamy. Teraz mamy ten miły listę błędów, i to jest nadal dość brzydki, ale to oczywiście można sformatować ładnie wyglądać, ale idea jest tylko kilka linii kodu, byliśmy w stanie zweryfikować nasz model, upewnić się, że niektóre pola nie były puste, i jeśli coś poszło nie tak, a następnie powrót jakiś komunikat o błędzie Mógłbym wtedy przedstawić z powrotem do użytkownika. Można również dostosować walidacji tak, że można rzeczywiście się komunikat o błędzie że jest bardziej specyficzne dla danej aplikacji lub coś w tym stylu. Wszystko, co jest ogólnie konfigurowalny. Niestety, kończy nam się czas, więc będę musiał odciąć żywo sesji kodowania tutaj. Istnieje kilka innych funkcji, które chcę wykazać dla Ciebie w tym przykładzie. Na przykład, można dodać szablony do witryny, więc może jest jakiś kod HTML, który chcesz zastosować do każdej strony w witrynie, i że zamiast wklejania w każdym pliku widoku masz, co oczywiście byłoby złe praktyki, można w zasadzie określić te szablony, a następnie w kontroler powiedzieć: "Ok, używam tego szablonu." "Czy wszystkie moje poglądy użyć tego szablonu." I jeszcze jedno chcę pokazać, jak dobrze że nie mamy czasu na to cross-site scripting, iw zasadzie myślę, że wy prawdopodobnie zobaczyć w CS50 - Myślę, że David Malan zapewne rozmawiali o tym, jak zwykle można wstrzyknąć Kod JavaScript do - nie mówił pan o tym? Może? Może nie? Ale wiele razy można wstrzyknąć złośliwy kod JavaScript do czyjegoś bazy danych, a jeśli nie uciec, że poprawnie, a gdy stanowią one, że dane do użytkownika, to może uruchomić jakąś losową kodu JavaScript nie chcesz się zdarzyć, i miałem zamiar pokazać, jak chcesz to zrobić w ciągu Kohana. To naprawdę bardzo, bardzo proste. Mógłbym zrobić to teraz w ciągu 2 sekund dosłownie. Wszystko co musisz zrobić, to po prostu zawinąć te rzeczy w tym rzecz, nazywa encje. I że automatycznie ucieczki wszystkie znaki poprawnie i upewnij się, że nie rozumiem tego problemu. [Student] Ty wpisany pierwszy test nieprawidłowo. [Brandon Liu] Och, ups. Dobrze, że to wszystko, co musiałem podzielić się z wami dzisiaj. Slajdy te zostaną wysłane, ale są to na ogół tylko zasoby należy naprawdę trzeba zacząć z Kohana. Możesz przejść do strony internetowej. Mają instrukcji obsługi, i mają też odkrywcą API. Możemy badać wszystkie inne funkcje i funkcji pomocniczych mają one dla ciebie. Na ogół mają wystarczająco dużo informacji na stronie internetowej że można użyć, aby zacząć i zacząć zabawę z Kohana. Nie ma, że ​​wiele tutoriali, jak sądzę, dla Kohana, poza co mają na stronie internetowej tutaj, więc jest to prawdopodobnie najlepiej. Ale jeśli chcesz iść z ram internetowej i nie chcesz, aby odebrać nowy język, i chcesz coś, co jest stosunkowo lekki i ma łatwy krzywej uczenia się, Zdecydowanie sugerują Kohana. To chyba najlepszy oferowania do tego. Najśmieszniejsze jest jednak to, czy używaliśmy Ruby on Rails, mogliśmy replikowane, co właśnie zrobiłem i prawdopodobnie więcej w ciągu 3 minut. Nie żart, ale nauki Ruby on Rails trwa o wiele dłużej niż to by się uczyć Kohana. Jest to w zasadzie wybór tego, co chcesz wybrać, aby dowiedzieć się, ale jeśli chcesz dostać się i działa szybko, Kohana jest na pewno bardzo dobry wybór. Jakieś ostatnie pytania, zanim skończy? Tak. [Student] Jak zintegrować że w ramach CSS jak uzywasz kiedy się pouczając? Pytanie brzmi: jak chcemy zintegrować to z ram CSS? Co to prawdopodobnie nie jest to prawdopodobnie należą nowy folder, w którym chcemy zrzucić wszystkie pliki CSS, i my również dodać nowy szablon. W szablonie my obejmują te pliki CSS aby upewnić się oni odwoływać się na każdej stronie, i wtedy, gdy faktycznie pisania kodu HTML, wystarczy dodać odpowiednie klasy i etażerka, i na przykład, gdy używasz coś jak postaci Funkcja pomocnika, można później dodać więcej parametrów określić, jakie zajęcia chcesz być dołączone do różnych rzeczy aby mogli go styl prawidłowo, i to jest w zasadzie jak chcesz iść. Jakieś pytania? Niesamowite. Dziękujemy za poświęcony czas i dziękuję za przybycie. Nie chciałem, aby dodać bardzo wiele innych, ale 1 bardzo szybko, co jest, że nie mamy link do formy. Naprawdę głupi. Dodajmy - w rzeczywistości w świetle, blog, indeks, niech naprawdę szybko dodać link, który idzie do nowej strony, Strona gdzie można wstawić nowy post. Mamy zamiar to zrobić. Co miłe jest nie jest to cała grupa HTML funkcji pomocniczych który robić różne rzeczy dla Ciebie, więc już widziałem podmioty funkcjonować tutaj, ale także funkcję o nazwie "kotwica" które można wpisać w blogu / nowy i powiedzieć: "Napisz nowy blog." I spowodowałoby, że link do Ciebie, i to wydaje się bardzo trywialne do zrobienia, ale to jest miłe, bo przypuszczam, że przenosisz swoją stronę z 1 domeny do innej. A jeśli po prostu wypisał sobie adresów URL, wtedy trzeba by zmienić wszystkie adresy URL. A może przenieść go od 1 podkatalogu do innego podkatalogu. Trzeba by zmienić te wszystkie adresy URL się, i to nie jest zabawa. Możesz skorzystać z tej kotwicy tutaj, i można zmienić domenę lub prefiks podfolder w pliku konfiguracyjnego raz i to, że stosuje się wszędzie, to znów doskonałym przykładem nie powtarzaj się, suszenie kodu z. Gdziekolwiek jesteś, powtarzając sobie, spróbuj wyodrębnić w jakimś pliku konfiguracyjnym lub do innej funkcji i nie radzi sobie, że dla Ciebie. I ostatnia rzecz, że bardzo chciałam pokazać, była załóżmy, że jesteśmy z powrotem na ten post, a ja w składzie kilka naprawdę długi esej, ale zapomniałem włączyć mojego autora. Teraz po kliknięciu "Wyślij Post" Właśnie stracił wszystko. Nie! Naprawdę smutne. Jak więc sobie z tym poradzić? To jest to, co robimy. Co możemy zrobić, to tutaj dla tych funkcji wejściowych i obszaru tekstu, jeśli znajduje się drugi parametr, wówczas wartość tego drugiego parametru będzie co pole ma być początkowo wypełniane. Co mogliśmy zrobić, to w naszym kontrolerze bloga, możemy wiązać innej zmiennej. Nazywamy to "wartości" być może. I przekazać w tablicy postu, dosłownie. To oznacza, że ​​jeśli weryfikacja nie powiodła się, przekazać mi tablicę postu, że przekazywane z ostatniego wniosku, i w ten sposób można korzystać z wartości z mojego ostatniego przedłożenia repopulate pola. Teraz mogę zrobić coś jak wartości autora i wartości ciała i w ten sposób teraz, jeśli mam jakieś losowe rzeczy i kliknij przycisk "Prześlij postem", to pozostaje tam. Ale mamy zamiar uruchomić na innym problemie. Że działa, ale jeśli pójdę do strony za pierwszym razem, to będzie katastrofy, a to dlatego, że po raz pierwszy możemy przejść do strony, zmienna ta wiadomość nie została jeszcze zdefiniowana. To jest wartość null. Nie ma. A to, co chcemy powiedzieć, czy ten klucz istnieje, następnie zwraca wartość z tej tablicy, ale jeśli klucz nie istnieje, a następnie powrócić pusty ciąg. To funkcjonalność chcemy tutaj. Chcemy sprawdzić, czy klucz istnieje przed próbą dostępu do tablicy, i na szczęście, Kohana daje nam również funkcję pomocniczą względem. Mają cały ten zestaw funkcji pod nazwą ARR, skrót od tablicy, i mają 1 funkcji o nazwie "dostać" i można przejść w tablicy, i można przejść w nazwie klucza. Potem w zasadzie to, co będzie to zrobić, to będzie starał się uzyskać ten klucz, ale czy ten klucz nie istnieje w tablicy, to wróci puste, lub możemy także określić domyślny, wierzę, co jest miłe. Teraz, jeśli znowu to samo, to teraz widzisz to działa za pierwszym razem, i ponownie, jeśli w jakimś losowym typu rzeczy i spróbować złożyć, to pozostaje tam. I chyba mogę też pokazać, jak bardzo szybko dodać szablon. Co możemy zrobić, Pierwszy to możemy dodać nowy widok o nazwie "template.php" w folderze Widoki i co mam zamiar zrobić, to mam zamiar wydrukować coś o nazwie "Zawartość" które będzie moim głównym treści. A może i na samym dole mam zamiar dodać, powiedzmy, praw autorskich. [Niesłyszalne uczeń pytanie] [Brandon Liu] Może to jest bardzo podstawowy szablon chcę używać. Chcę mieć folder z moim autorskim na każdej stronie, i teraz to, co mam zamiar zrobić w moim kontrolera jest teraz zamiast mówić, "rozciąga Controller" Mam zamiar powiedzieć "rozciąga Controller_Template" i teraz zamiast mówić: "ciało odpowiedź jest równa tym widoku" Mam zamiar powiedzieć: "to jest szablon treści -" i myślę, że - mogę postawić znak równości? Zapomnę. Tak, tak myślałem. A teraz ustawić, że ta zawartość równa widok. Mogę tu sama. A teraz, jeśli ja odświeżyć, widać teraz to copyright dodaje tam, i po prostu zrobić kilka losowych stanowisko, a następnie, ponownie, należy zauważyć, że prawo autorskie jest na samym dole strony. Wielki. To wszystko, co chciałem pokazać wam. [Oklaski] Masz pytanie? [CS50.TV]