[Семінар] [Кохана: Легкий PHP Framework] [Брендон Лю] [Гарвардський університет] [Це CS50.] [CS50.TV] Привіт усім. Мене звуть Брендон. Я молодший тут в коледжі робити інформатики, і сьогодні ми будемо говорити про Кохана, який є основою веб-розробки PHP. Сьогодні буде живий семінар кодування, так що я в основному збираються витратити 5-10 хвилин пояснюючи, що Кохана є, а потім я буквально збирається побудувати супер простий блог для вас прямо тут буквально з нуля. Ми збираємося завантажити код з веб-сайту Kohana, і ми збираємося почати будівництво блог, і, сподіваюся, це буде дуже повчально, тому що ви побачите, може бути, може бути, я зроблю деякі помилки, і ви побачите мене оговтатися від них, або ви побачите мій розумовий процес, як я будую через цей блог, а між тим, ви також отримаєте знайомі з самої бази. Сподіваюся, що це буде дуже повчально вправи. По-перше, що ж таке база? Якщо ви приймали CS50 досі, як ви насправді не працював ні з одним рамки ще й таку справу. Ви, напевно, зробив 1 PSET веб-розробки вже, і припустимо, що ви як і раніше створювати веб-сайти і тримати створення веб-сайтів. Ви почнете помічати деякі речі. Перше, що ви помітите, що ви, мабуть, робити те ж саме знову і знову весь час, речі, як прибирання вхідних даних користувача, речі, як організації файлів певним чином. Інша річ, ви також, ймовірно, помітите, що ваш код може почати, щоб стати дуже, дуже брудний, і ви можете залишити його брудним і просто дуже нелегко підтримувати її, або ви можете почати структурувати ваш код і робить його модульна певним чином, щоб зробити її більш керованою. Це де веб-рамки в основному увійшли Ці люди, які побудували багато веб-сайтів, вони сказали, "Ми не повинні повторити це кожен раз ми будуємо веб-сайту." "Чому б нам просто не зробити пакет, який робить всі ці речі для вас кожен раз, коли ви хочете створити свій сайт? " І так, що, коли ви робите новий веб-сайт, Ви просто зосередитися на тому, що саме цей конкретний веб-сайт о. Вам не потрібно повторювати всі різні конфігурації і поділ кодів і переписування коду що вам часто доводиться робити, коли ви робите веб-сайтів. Ідея полягає в тому, що рамкова дозволяє писати код більш високого рівня не турбуючись про деталі нижчого рівня. Деталь нижнього рівня може бути щось на зразок справу з очищення вхідних даних користувача. Це те, що ви не повинні дійсно потрібно турбуватися о. Ви повинні зосередитися на тому, що ваша розподіл веб насправді о. Він усуває багато шаблонного коду. Це архітектура, для вашого проекту. Найпопулярніший з них буде модель-подання-контролер, які я збираюся говорити в секунду. І багато разів ці рамки втілюють набір процедур, правила та практичні рекомендації для вас використовувати так що, коли ви прийняти веб-фреймворк ви повинні написати свій код в певному сенсі, і це, як правило узгоджені набір принципів спільнотою, що, як правило, приймається рівним хороший спосіб написання коду. Це робить ваш код більш легким в обслуговуванні, більш зручним, так далі і тому подібне. І, нарешті, що я хочу підкреслити, про рамках в порівнянні з бібліотеками ця ідея про інверсії контролю, і така справа. Різниця між бібліотекою і рамках, що з бібліотекою ви все ще пишу основної програми, і ви начебто виклику бібліотеки і закликаючи до бібліотеки, щоб зробити щось для вас. Різниця між бібліотекою і рамках є те, що база починається з контролю, і це викликає ваш код, так що ви можете думати про це як - от чому це називається база - каркас забезпечує цей кадр і структуру вашого коду, і ви заповните отвори, і це стане більш очевидним в секунду коли ви бачите мене починають писати код в контексті рамках. Ви побачите, що я заповнення прогалин, і каркас вид контролю всіх рухомих частин, і я повинен покласти шматочки в потрібних місцях. Сьогодні ми будемо говорити про Кохана, який є одним з багатьох фреймворків. Є веб-рамки, і є ті, практично в кожній мові, і я вибираю Кохана тому Кохана, можливо та загальновизнаними як найпростіший рамках PHP, щоб забрати. Це найлегший. Є й інші них там, які приходять з багатьма, багато інших функцій, але вони мають тенденцію бути більш складно підібрати. І, нарешті, Кохана використовує архітектуру MVC. Це досить легкий, що ми можемо буквально побудувати проект прямо тут прямо перед вашими очима, і ви можете в значній мірі слідувати досить легко. Що таке архітектура MVC? Вона виступає за Model-View-Controller, і, можливо, якщо ви думаєте про код ви писали досі для деяких з ваших psets веб-розробки Ви можете бути в змозі бачити деякі з цього, але, як правило, коли ви починаєте писати складніший веб-додатків, поділ між цими 3 сегментів стає все більш і більш очевидним. Я виклав MVC тут ніби як стек, і часто ви будете чути люди говорять про стеків у веб-розробці, і це, щоб проілюструвати ідею, що кожен шар, кожен компонент насправді намагається взаємодіяти тільки між 2 іншими компонентами. Хтось звертається свій сайт в якості клієнта або браузера. Вони взаємодіють з вашою програмою через вид коду. Вид код взаємодіє з контролером. Контролер взаємодіє з моделлю і модель взаємодіє з базою даних SQL. І немає прижковий між якщо ви пишете код правильно. Що означають ці речі робити? Модель суті є шматок коду, який має справу з вашими даними. Все, що має справу з базою даних, з об'єктами, які ви зберігаєте, або вилучення цих об'єктів у базі даних, що всі обробляється за допомогою моделі. Може бути, у вас є об'єкти в базі даних. Ми збираємося створити модель, що має відношення до посади, так пост може мати деякі атрибути до нього. Ви можете мати функції навколо зберігання цих повідомлень або отримання повідомлення або фільтрації повідомлення і так далі і так далі, і це весь код, який обробляється за допомогою моделі. Контролер є свого роду логіки додатка, і багато різних речей може піти в логіці програми. Якщо ви розмовляєте з одним API, , Які можуть бути там, де ви маєте справу з логікою програми. Якщо ви намагаєтеся повинні принести в дані з декількох різних моделей і повинні об'єднати їх в деякому роді, що часто може бути оброблено за допомогою контролера. Наприклад, на Facebook, якщо ви один хтось, то, можливо, що акт встановлення цих відносин може бути зроблено за допомогою контролера. І, нарешті, вид код, який генерації, що ви насправді бачите. Багато разів я думаю, що в CS50 psets вони дійсно не заохочувати вас, хлопці, щоб відокремити ці 3 речі. Ви, ймовірно, цей великий, довгий файл, де у верхній Ви зробити деякі SQL-запит і, можливо, зробити деяку обробку від даних, витягуються з бази даних, а потім ви повинні всі ваші HTML в нижній частині. І ви можете виявити, що, як ви створюєте нові і нові сторінки що ви збираєтеся мати деякі повторення коду, а також, Справа в тому, ваш файл стає дійсно великий і довгий і стає громіздким в управлінні. Причина, чому MVC настільки добре рахувати для ряду причин. Перше, що дещо, зване поділ інтересів яка є ідея, що коли у вас є - ідеально 1 шматок коду повинен робити 1, а роблять це дуже добре, і ви не повинні об'єднати шматки коду, які роблять розрізнені речі. Наприклад, код і код моделі подивитися, вони дійсно не повинні бути пов'язані. Вони не повинні бути в одних і тих же файлів, тому, коли ви можете, розділити їх так що легко в обслуговуванні. Інша справа, повторне використання коду. Ви можете знайти собі писати той же запит SQL або робити аналогічні запити, які можуть бути забираемой в 1 функції, і це ідея моделей і контролерів, покласти його в окрему функцію, що ви можете використовувати в різних місцях у проекті. І, нарешті, що прив'язаний до сушки код, або не повторюючи себе, не повторити себе. Це дуже зрозумілою в розвитку. Всякий раз, коли ви можете, ви не хочете повторити себе, тому що якщо ви повторити себе,  це набагато дорожче в обслуговуванні. Якщо ви хочете змінити 1 річ, ви повинні змінити його скрізь, і це призводить до помилок, і це жахливо. Добре. Будь-які питання досі близько Кохана взагалі? Великий. Тепер ми збираємося, щоб зануритися в живій сесії кодування, і, сподіваюся, все буде добре. Я збираюся в основному побудувати цей сайт на одному з моїх віддалених серверах, і таким чином ви, хлопці, можете також см. веб-сайт і отримати доступ до веб-сайт, а також навколишнє середовище краще виконаний з чим мій віддаленій машині, тому що це працює Linux замість OS X. Ми буквально збирається почати. KohanaFramework.org. Я збираюся завантажити код з веб-сайту. Я збираюся копіювати адресу посилання, перейти до мого сервера, завантажити його, і я збираюся витягти його. [Студент] Ваш найбільший ви можете зробити текст? [Брендон Лю] Так краще? [Студент] Це здійснимо? [Брендон Лю] Так, це нормально. Я скачав ZIP файл і розстебнула, що в каталог під ім'ям Кохана, і ми збираємося перейменувати цю CS50-Кохана, і давайте входити Приголомшливо. Тут ви бачите купу різних файлів. Більшість з вас може ігнорувати - we're не збираюся йти через кожен файлу, який тут через наших тимчасових обмежень, але в цілому при установці Кохана, перше, що ви робите це ви перейдіть в каталог, і ви будете в основному, роблять деякі тести середовища і ще багато чого щоб переконатися, що ваша середу правильно налаштований для запуску Кохана і переконайтеся, що все в порядку. Ви можете бачити, більшість речей пройшло, але як правило, ви завжди зіткнулися з цією проблемою 1 де він скаржиться, що деякі каталог не доступний для запису, і це тому, що з деяких дозволів. Я не знаю, скільки ви, хлопці дізналися про права доступу до файлів в CS50, але якщо ви робите веб-розробки, ви збираєтеся зіткнутися з цією проблемою багато. Я збираюся зробити його для запису і я думаю, я також повинен - ​​там ми йдемо. Отже, тепер ви можете бачити все пройшло, і тепер він розповість вам, щоб перейменувати файл install.php. Я збираюся перемістити файл install.php, щоб installed.php, і тепер, якщо я оновити, це дає мені помилку, і це, коли налагодження приходить дюйма Це де ви можете побачити, що насправді станеться. Справа в тому, за замовчуванням, Кохана припускає, що ваш проект в кореневому каталозі вашого домену, так що це очікує, щоб ви були в demo.brandonkliu.com. Ми повинні сказати їй, що це насправді в папці. Це в папці під назвою CS50 Кохана. Справа в тому, що це невірно витлумачивши CS50-Кохана як щось ще, що я поясню вам в секунду. Але я повинен сказати вам, це те, що і слід було очікувати. Те, що ми збираємося зробити, це ми збираємося йти в цю папку під назвою bootstrap.php, що папка конфігурації, де багато різних речей встановлюються. Я відкриваю, що до. Тоді, можливо, одним з перших речей, які я зроблю це змінити часовий пояс. А потім подивимося. Ага! Прямо тут. Є купа різних висловлювань конфігурації тут, але той, який я дивлюся на це, що називається база URL, і за замовчуванням я отримати його в Кохана, але я збираюся змінити, що CS50-Кохана, і я думаю, що повинні це виправити. Так, відмінно. За замовчуванням, щоб побачити, що він працює, він каже: "Hello World". Звідки це взялося? Як ми дійшли до Hello World? Де саме це код, який насправді написав це? Щоб зрозуміти це, я познайомлю цю концепцію під назвою маршрутизації. Практично всі структури веб мати концепцію під назвою маршрутизації, який є частиною програмного забезпечення, яке буде відображати певну URL в певній частині коду в межах вашого рамках. Наприклад, якщо у вас є URL, і ви піти на деякі URL, як foo.com / блог / все те, що каркас збирається робити - або принаймні те, що Кохана збирається робити - буде він збирається знайти клас з ім'ям контролера блог, і він збирається запустити функцію з ім'ям дії все. Я знаю, я кажу про клас і функцій, і я знаю, ви, хлопці, не поширюється класи та функції в CS50 поки немає, але на даний момент, ви можете думати про класи як просто група функцій, спосіб угруповання функції разом. Це дійсно все, що вам потрібно знати. Тепер, якщо ми подивимося на нашу структуру папок, всередині папки додатки є й інша папка під назвою класи, та інші папки називаються контролер і модель. Якщо ви подивитеся в папці Controller, ми бачимо, що є файл під назвою Ласкаво просимо, і ви можете побачити тут є класом називається контролер Ласкаво просимо, і є функція називається Індекс Дія, і те, що вона робить це задає тіло вашої відповіді на Hello World. Ось де код написаний. Інше питання, ну, я не пішов на бла, бла, бла, / Ласкаво просимо / індекс. Як я тут опинився? Ну, це просто тому, що тут в нижній частині нашого завантажувального файлу де ми поклали наші маршрути Ви можете бачити, що вони встановлюють деякі значення за замовчуванням для вас. Контролер за замовчуванням Ласкаво просимо. Дія за замовчуванням Індекс. Ось чому, коли ми нічого не помістіть в там, це автоматично пішли в бажану контролера а індекс Дія. Всі сенсу досі? Тепер ви можете зробити більше, ніж просто піти до контролера і конкретні дії. Ви також можете передавати параметри в контролер. Просто як приклад, Я збираюся додати ще заходи для цього контролера, щоб показати вам. Давайте назвемо це дію Ехо, тому що це збираюся розповісти вам все, що ви даєте йому, і тому я в основному збирається захопити параметр, який збирається бути відправлені через мене в програму маршрутизації, і як ви можете бачити тут, ця лінія прямо тут, ви можете побачити, що це в основному означає, що ви повинні контролер, і у вас є /, і у вас є дії, і у вас є інший /, і що буде параметри, і тому що у нас ця назва ID в кутових дужках, що означає, що ми назвавши це ідентифікатор параметра. Пізніше у своєму коді контролера, якщо я хочу взяти в руки цього параметра, Я можу використовувати код, який я написав, знайти параметр з ім'ям ID. Це те, що я зробив тут, і я збираюся повернутися і сказати, "Ви сказали," що. І ось тепер, якщо я йду на нашому сайті, Я йду в cs50-kohana/welcome/echo/Helloooo-- о, це так. Існує 1 крок, який я опущені. Це є частиною живої ідеї кодування. Ось 1 річ. Давайте подивимося. Так зазвичай за умовчанням з великою кількістю цих веб-додатків Ви повинні включити цей index.php річ у вашій URL, тому що ідея index.php є свого роду точкою входу вашої програми, але, звичайно, це ніби дратує доведеться. Ви ж не хочете, щоб мати index.php з'явиться у вашому URL, і майже кожен веб-фреймворк з коробки має цю проблему index.php, і тому ви повинні прийняти деякі заходи, щоб мати можливість видалити це. Отже, в цьому випадку що ми збираємося зробити, це ми збираємося використовувати файл з ім'ям. Htaccess, і це те, що це специфічні для веб-сервера Apache, і він може робити речі, як переписування URL-адрес і перенаправити URL-адреси і так далі і так далі, і Кохана досить гарний, щоб забезпечити шаблону. файл Htaccess, що ми можемо використовувати. Як ви можете бачити, є файл там називається example.htaccess, і ми збираємося, щоб скопіювати, що. Htaccess. Я збираюся відкрити це і редагувати його, і в основному це робить купу різних речей. Ключовим напрямком ви можете дивитися на це прямо тут. Ідея полягає в тому, що це налаштовує правило, яке свідчить, "Добре, що ви вводите в, додайте перед index.php до цього." Ви можете бачити, що. . * Варто ні за що, всі пакети, а потім друга частина index.php / $ 0, і $ 0 посилається на те, що був підібраний раніше. Чи має це сенс? Але насправді ключова річ я хочу змінити це змінити цю перезапису бази, яка є URL бази. Це свого роду припускає, де ви працюєте з. Я збираюся додати CS50 Кохана до того, що, і, таким чином зараз, якщо я видалити index.php, він повинен працювати, і я збираюся додати деякі цифри щоб показати вам, що це дійсно не працював. Звучить добре. Є питання до цих пір? [Студент] Як це знати, щоб зробити 123? Це аргумент? Саме так. Ви можете думати про це так само, як аргумент. Але дивна річ, хоча, є те, що спосіб Кохана робить це , Вони не роблять це так само, як аргумент. У вас є, щоб схопити його, як це. Ви повинні захопити об'єкт запиту та задати для параметра, який на ім'я ID, і що ім'я ID виходить від цього завантажувального файлу що я показав раніше, і ім'я ID в ті кутові дужки, і це, як ви захопити ці параметри. Приголомшливо. Будь-які інші питання? Як я вже сказав, контролери, вони звертаються логіку програми, так от 1 випадок, коли ви можете бачити that's - це дуже основне, але це все ще логіка програми, ідея захоплення параметр і створення нового рядка що говорить: "Ви сказали, бла", а потім плювати, що з вами. І взагалі, що ви робите це ви створюєте різні контролери. Ви створити окремі контролери для різних частин вашого сайту. Сьогодні ми збираємося зробити дуже простий веб-сайт, і це буде дуже простий блог. Ми збираємося зробити новий контролер тільки для повідомлень в блозі. Але тоді, якби я також додавати коментарі до повідомлення в блозі, то я б, напевно, хочете, щоб зробити новий контролер для цих зауважень. Якби я хотів, щоб додати користувачів, я б, напевно додавання нового контролера для тих користувачів, і взагалі, ідея в тому, що всякий раз, коли у вас є нова модель, новий об'єкт даних, ви маєте справу з, у вас є один контролер для цього об'єкта даних. Сьогодні ми тільки збираємося працювати з 1 об'єкта даних, і що буде повідомлень, а також ви можете думати про об'єкти даних як відповідний таблиць. Взагалі кожна таблиця відповідає 1 типу об'єкта даних, тому повідомлення таблиця буде мати 1 повідомлення модель, який матиме 1 повідомлення контролер, відповідний того, і те ж саме для коментарів, те ж саме для користувачів, і так далі і тому подібне. І це загальне правило. Там будуть спеціальні випадки, коли ви може відрізнятися від того, але 90% часу, це те, що ви збираєтеся робити, і я покажу вам, що те, що ми збираємося робити сьогодні. 1 більш поняття перш ніж ми заглибимося назад в код, ця ідея об'єктно-реляційного зіставлення. Ви, хлопці вже зробили PSET веб-розробки, і ви бачили, що ви робите SQL запит, і все, що він повертає до вас рядків. Ви отримуєте ці рядки, а ви індексувати їх якимось ім'ям, Ім'я стовпця і таблиці, і це, як ви з ним працювати, і це може бути трохи громіздким. Але крім того, якщо у вас є відносини у вашій базі даних, як, наприклад, якщо у мене є зауваження і повідомлення, то, можливо, я хочу, щоб захопити батьківський пост коментар. Якщо я використовую тільки рядки в SQL, то все, що я можу отримати це ідентифікатор батьківського повідомленням і не сам пост. Але коли ми кодування, то, що ми насправді хочемо, щоб насправді захопити  батько прикріплювати себе іноді. Який об'єкт реляційні відображення робить, він приймає результати запиту до бази даних і поміщає його в об'єкти для вас, які набагато приємніше працювати з ніж простий масивів і рядків. Наприклад, зараз, коли у мене є коментар, можливо, і я хочу, щоб захопити його батьківський пост, і я, може бути, коментувати стрілкою пост, то він буде насправді дати мені об'єкт повідомленням що відповідає фактичній материнської повідомленням, а не тільки деякі ID, який я інакше довелося б використовувати і зробити ще один SQL запит, щоб захопити пост, яка є громіздким і непотрібним. І, крім того, шляхом зіставлення всіх цих рядків даних в об'єкти, Ви можете також докласти більше функцій до об'єктів, так, наприклад, я говорив про те, як класи, по суті угруповання функцій. Ви можете думати про нього, як, що. Наприклад, може бути, у мене є цей об'єкт повідомленням, і може бути, я хотів би мати якусь функцію, додається до нього , Що в основному говорить мені було це недавно опублікував? Чи було це відповідав протягом останнього тижня, вірно чи невірно? І це функція я можу докласти на цьому об'єкті, і це дійсно зручно мати його в тому ж місці, і є безліч різних функцій, які можна створити для цих об'єктів, і це дійсно приємно мати можливість, щоб прикріпити її до класу, на об'єкт, в той час як, якщо ви тільки що рядки, що надходять з бази даних, то ви не можете насправді надав цьому функціональні можливості, що. Це буквально тільки дані. Будь-які питання про те, що взагалі? ORMs дуже поширені веб-розробки, і є багато різних типів ORMs, і Кохана має свій власний ORM. Це дуже основне, але ви отримаєте смак, як він виглядає. Давайте створимо модель для наших блогах, і перше, що ми, очевидно, потрібно зробити, це створити реальну таблицю у нашій базі насправді зберігати наші дані для цих посад. Перше, що я збираюся зробити, це зайти в PHPMyAdmin. Хлопці, ви використовували PHPMyAdmin раніше? Добре, дивним, щоб ви, хлопці, вже знаєте, що це таке, і я збираюся створити нову таблицю з ім'ям Kohana Повідомлень, і це буде дуже просто. Я повинен буду знову увійдіть Все, що ми збираємося зробити сьогодні є автор і тіло, просто тримати його просто. Я збираюся створити цю таблицю, і тепер ми просто є таблиця, що представляє наші повідомлення з 2 полями для нашого автора і нашого тіла. Інша річ, я збираюся зробити зараз, це налаштувати свій веб-додатки, так що знає, як підключитися до бази даних, і це, знову ж, це те, що вам доведеться робити з усіма веб-додатків. Ви повинні сказати йому ім'я користувача та пароль та ім'я бази даних і так далі і тому подібне щоб з'ясувати, як насправді підключення до бази даних. У Кохана, у нас є те, що називається модуль бази даних, і в папці конфігурації у нас є ця папка під назвою База даних, і як ви можете бачити, є купа налаштувань ви повинні встановити тут сказати йому, що ім'я користувача та пароль для бази даних, щоб я міг насправді підключитися до нього. І так як я не хочу, щоб ви, хлопці, насправді знаємо ім'я користувача та пароль моїй базі даних, У мене є файл, де я вже встановити все це, і я збираюся скопіювати і вставити його. Приголомшливо. Добре. Я думаю, що це все, що конфігурація мені потрібно зробити, але давайте подивимося. Ми будемо продовжувати працювати в ньому, і якщо щось виходить з ладу, тоді ми будемо це виправити. Тепер те, що я збираюся зробити, це я збираюся створити новий контролер. Або насправді, жаль. Спочатку я повинен створити нову модель. Я створю нову модель під назвою Post.php, і те, що ми збираємося зробити, це ми збираємося називати це клас Model_Post. Отримати деякі підсвічування синтаксису на, і тому, коли я кажу: "розширює ОРЗ," це в основному ще трохи об'єктно-орієнтованого програмування, які, на жаль, ви, хлопці ще не навчилися в CS50 ще, але це досить легко підібрати. Це дає мені всю цю додаткову функціональність, яка поставляється в цій ORM пакета, і тому я отримую купу додаткових функцій і ще багато чого безкоштовно, які ви побачите трохи в секунду. Зараз насправді все, що потрібно зробити, це створити цей клас. Я навіть не потрібно робити які-небудь функції або нічого, але я створив клас, що представляє таблицю, і тому, що я подовжив цей клас ORM, Я отримую купу речей безкоштовно, так що зараз ви не повинні встановити нічого більш вгору. А тепер те, що я збираюся зробити, це я збираюся створити новий контролер, які я збираюся назвати blog.php, і я збираюся скопіювати привітання контролера тому я не доведеться передруковувати деякі речі, і тепер я повинен перейменувати цей. Тепер те, що я збираюся зробити, щоб перевірити, щоб переконатися, що всі розробки, Я збираюся захопити перший пост з моїй базі даних і роздрукувати тіло повідомленням на екрані. Щоб зробити це, що я збираюся робити в першу чергу це я йду, щоб врятувати посади змінної так, що ми збираємося зробити, це - в Кохана, що ви робите, щоб захопити об'єкт повідомленням це ніби громіздкою, але ви повинні зробити те, що називається ORM :: заводу, а потім ви проходите в назві моделі ви хочете, і це повертає об'єкт ORM, що представляє цю модель. А потім, як я вже сказав, коли ми розширюємо об'єкт ORM, ми отримуємо всі ці методи безкоштовно, так, наприклад, ми отримуємо ця нова функція називається "знайти все" яка автоматично повертає кожен пост в базі даних, який досить зручно. І тепер в тілі Я збираюся повернутися перший пост і повертає його тіло. І, звичайно, мені потрібно створити пост, так що давайте вставити нову посаду. Я скажу: "Брендон, мій найперший пост." Приголомшливо. І тепер ми збираємося піти в блогах і якщо все працює добре - о, це якийсь інший німий прав доступу до файлів, що знову. Тримайся 1 секунди. Це свого роду абсурд. Там ми йдемо. Добре. Я встановив цю проблему дозволів. Це намагався створити деякі файли і деякі журнал, та дозволів, знову ж, не були належним чином встановлені, і я зробив це так що ці файли були доступні для запису і виконуваний тому він може насправді увійти на речі. Тепер це дає мені ще один винятків приказку: "Клас ORM не знайдений," і це тому, що я забув ще один крок. Це дуже погано. У файлі папки початкового завантаження, є ці модулі тут, які ви можете вибрати для включення або відключення. Це купа різних функцій, які ви можете використовувати в Кохана, який є свого роду хорошим. Наприклад, вони мають модуль аутентифікації , Який можна використовувати для аутентифікації користувачів. У них є модуль кешування, якщо ви хочете реалізувати свого роду кешування назад кінець, щоб зробити роботу програми швидше і ще багато чого. Ми повинні дати базу даних і модуль ORM, тому що, як я вже сказав, ми використовуємо базу даних, очевидно, і ми також повинні включити модуль ORM, , Тому що ми хотіли б мати додаткову функціональність, що приємно мати. Все, що я повинен зробити, це розкоментуйте ці 2 рядки, і тепер, якщо я оновити, він дав мені іншу помилку. Там сказано: «Клас Model_Post не найден." Тепер це хороша проблема є. Давайте подивимося. Зробити громадськості. Кількість Почекай. О, дорогою. Я не знаю, чому це не в змозі знайти, що. Це дійсно дивно. У мене є цей клас прямо тут. Я припускаю, що, можливо, доведеться - о. Я так нерозумно. Я забув додати PHP тег. Ось чому. Тепер я повинен скасувати, що 1 зміна, яке я тільки що зробив. Добре. Там ми йдемо. Це було дійсно нерозумно. У мене не було вступне PHP тег. Але як ви можете бачити, тепер він працює правильно, чи не так? У нас є 1 повідомлення. Ми захопили перший пост, і тепер ми роздрукували його тіло. Великий. Фантастика. Будь-які питання досі? Нє-а? Є питання? Отже, ми тільки що створили поштове модель, дуже простий, і ми збираємося додати деякі функції надалі. Ми можемо додати перевірок і фільтрація. Перевірки є однією з речей, що рамки вирішити для вас дуже, дуже добре, і я не думаю, що ви, хлопці, повинні були зробити це для вашого CS50 PSet, але якщо ви робите веб-розробки для вашого остаточного проекту, ви, ймовірно, будете хотіти, щоб зробити свого роду перевірки, як не мають порожні імена користувачів, може бути, маючи пароль, принаймні досить докладно, тощо. І це дійсно громіздким реалізувати ці речі самі, і значною мірою кожен веб-фреймворк зробить це за вас і дозволяє зробити це в дуже чистому шляху. І модель, де ви зазвичай висловлювати ці правила перевірки, тому що це перевірка, чи є модель справедлива чи ні. Але зараз, ми збираємося, щоб покласти, що пізніше, і зараз ми збираємося працювати на іншій частині, і ми збираємося, щоб спробувати зробити нове подання , В якому перераховані всі повідомлення. Етапи створення нової дії для включення в перелік всі пости є, щоб захопити список всіх повідомлень а потім зробити список всіх повідомлень через подання. Прямо тут, достатньо, на щастя, ми вже схопив всі повідомлення використовуючи цю першу лінію, знайти всі функції, і тепер, що ми збираємося зробити, це до цих пір Я безпосередньо встановивши текст відповіді передавши рядок, але тепер я хочу використати представлення, і різниця між метою і просто робить це є, з тим я можу мати хороший, великий шаблон HTML, і що я можу зробити, це передати його деякі змінні і тоді вигляд автоматичне заповнення його шаблон використовуючи ці змінні. Що я буду робити це я створю новий погляд, і я буду називати вид щось на кшталт "блозі / індекс" і я збираюся в основному пов'язують це - о, що я пишу? Мій мозок десь в іншому місці. Я збираюся зв'язати повідомлення змінних до думки, так що спосіб вид має доступ до цього запису змінної. І ось тепер мені потрібно створити цю точку зору, так от у нас є ця папка під назвою "Переглядів", і перший, я збираюся створити нову папку під цією назвою "Щоденник". Це добре. Таким чином, ми можемо мати хороший ієрархію для наших поглядів. А потім я збираюся створити ще один файл в там під назвою "index.php". Приголомшливо. Насправді, давайте їх обох тут. Створення файл уявлення, ймовірно, найпростіша частина всього цього, і це, ймовірно, речі, які ви вже знайомі з. Ми збираємося зробити щось дійсно просто, починають говорити: «Мій список повідомлень у блозі." Тоді ми можемо пройти, і ми можемо ітерацію масиву повідомлень, захопити кожен пост і сказати щось на кшталт - може бути, додати рядок а потім роздрукувати автора і тіло. Це має сенс досі? І давайте подивимося, чи працює він. Нічого не сталося. Я дивуюся, чому. О, я пропустив один крок. Дуже нерозумно з мого боку. Я створив вид, але я не ставив думку як відповідь, так що вам потрібно зробити ще 1 річ. Ви повинні зробити "це тіло відповіді" і встановити його, щоб бути вигляд. Там ми йдемо. У нас є заголовок, а потім у нас є пост, і тільки для ударів, давайте вставити іншу посаду так що ми можемо побачити список. І вставити ці 2 повідомлення, і тепер, якщо я оновити сторінку, ми бачимо всі ці повідомлення тут. Чи має це сенс досі? Так, питання? О, добре. Як ви можете бачити, ми були в змозі відокремити всі ці коди з на різні секції, а потім ви можете бачити, що це найбільш ясно з видом коду. Цей файл тут, представляє точку зору, воно дбає тільки про представлення даних, відображення даних. Це передається якийсь даних, і все це робить просто показати його вам. У всіх інших частин коду, вам не доведеться турбуватися про один з цього, і точно так само, на ваш погляд код не доведеться турбуватися нічого про як отримати доступ до бази даних і так далі і так далі, який дійсно гарний і робить ваш код набагато більш легким в обслуговуванні. Як я вже сказав, переглядів, вони динамічними, це 1 файл, але він буде генерувати різні уявлення на основі змінних ви насправді проходять в, і, крім того, є багато різних допоміжних функцій що ви можете використовувати, щоб допомогти вам написати свій код швидше, які я покажу вам, всього за секунду. Так. [Студент] Так $ 0 є контролером, чи не так? Це друге. Питання в тому, буде $ 0 контролер? $ 0 є змінною я створив тут. Я створив вид в першу чергу. Я призначений його деякої змінної. Тоді я передав його у цій функції, встановити його в якості тілі відповіді. Чи має це сенс? [Студент] Так погляд :: завод, вид як клас або бібліотека [нерозбірливо] Завод функція? Мова йде про функції погляд :: заводу, і в основному це якась більш об'єктно-орієнтоване програмування суті. Подивитися це клас вид, і у нього є метод, званий "Фабрика" і це спосіб, щоб захопити об'єкт, який під назвою "блог / індекс". І ось ще трохи об'єктно-орієнтоване програмування матеріал що я не буду вдаватися в тут занадто багато. Тепер очевидно, що ми хочемо створити нові повідомлення, але ми не хочемо, щоб це зробити через базу даних, тому ми збираємося створити нову дію для створення нового запису, і є багато речей, що ми повинні зробити. Перше, що ми збираємося зробити - давайте візьмемося ці речі одну за одною. Перше, що ми зробимо, це ми повинні створити форму для вставки нового запису, але я також збираюся додати нову дію перша, так що додавання нової дії так само просто, як додаванням нової функції з вашим контролером, і тепер я збираюся зробити щось дуже простий, просто захопити цю точку зору і опублікувати його, просто показати його для вас. І то тепер я збираюся створити новий файл уявлення, і я збираюся почати писати деякі речі. Що приємно про Кохана, що вони дають багато різних допоміжних функцій для вас, щоб написати вид код більш легко, і 1 з тих допоміжних функцій або допоміжних модулів становить близько написання форми. Для написання форми, я дійсно не повинні прямо написати будь-який HTML себе. Ви, хлопці написали HTML форми. Ви знаєте, як це може бути дуже, дуже боляче і громіздкою, щоб написати форми. Це не забава, так, на щастя, ми можемо в основному написати форму за допомогою Kohana'S утворюють допоміжні функції, щоб зробити це для нас. Ми збираємося в основному мають поля для кожної речі у нас є, так що для авторів і один для органів. Ми збираємося мати етикетку, і ми збираємося мати вхід. І, нарешті, ми збираємося мати уявлення. І як ви можете бачити, це набагато чистіше написати ніж все, що брудний HTML, який є почасти добре. Звичайно, є й інші веб-рамки, які мають його ще чистіше, ніж, що, але принаймні це краще, ніж писати HTML-код самостійно. Дивовижний, так це те, що ви бачите. Це частково брудний, так що я збираюся додати розрив рядка є зробити, які виглядають трохи краще. Ну, звичайно, це все ще виглядає дуже, дуже погано, але ми просто зосереджені за своєю функціональністю на даний момент, а не на естетику. Немає часу, щоб зробити все. І як ви можете бачити, тепер у нас є супер основну форму, який почасти гарний. Цей код я б сказав, чистіше, ніж намагаюся написати HTML сформувати себе, так що це приємно. Що далі? Тепер нам потрібно зробити щось з дією. Зазвичай, коли ви пишете HTML форми, ви повинні сказати йому, де він збирається відправити форму. За замовчуванням у більшості веб-платформами, він представляє в ту ж саму URL, так що вся справа в тому, якщо ви відправляєте запит дістатися до / блог / новий, він повинен показати вам форму, але якщо ви посилаєте запит повідомленням в / блог / новий з даними, він насправді повинні спробувати зберегти цей пост і щось з ним зробити. Те, що ми збираємося зробити, це в основному все, що ми повинні зробити, щоб перевірити, чи є це запит повідомлення або запит Get , Щоб перевірити, які передаються змінні, які можна встановити. І якщо змінна повідомлення встановлений, то, що ми збираємося, щоб спробувати створити нове повідомлення. Знову ж, ми просто це зробити, і це створює нову посаду, і ми буквально збирається його поля, як це, а потім ми збираємося зберегти його. А потім я збираюся перенаправити на сторінку-вказівник, щоб вони могли побачити наш список повідомлень знову. Давайте спробуємо це. Я скажу: "Брендон" , А потім представити цей пост, і якщо все піде добре, як ви можете бачити, це перенаправлені мене в індексному сторінки, і якщо я прокрутіть униз, у нас є новий запис. Ура! Так, питання. [Студент] Що робити, якщо ви увійшли в один і той же Ви ввели раніше? Чи означає це перевірити, щоб переконатися, що ви не дублюються те ж саме уявлення? Будьте замовчуванням, немає, тому що за замовчуванням - шкода, питання в тому, якщо ви введете в тих же даних у формі і уявити, що, чи буде він дозволить вам вставити дублікат об'єкта, дублювати запис, по суті? Прямо зараз, так, це дозволить вам зробити це, тому що в базах даних це цілком допустимо мати повністю повторювані рядки, але якщо це має значення, то ви можете додати перевірок, наприклад, щоб переконатися, що, якщо це точно так само, як те, що вже існує, то кажуть, що це невірний об'єкт, а потім ви можете навіть сформулюйте Ваші повідомлення про помилку і сказати: "Невірний тому що це вже існує" або щось в цьому роді. Але в даному випадку, я міг би просто створити щось дублікат. Тепер давайте спробуємо і додати деякі перевірок. Проблема з цим прямо зараз, що Я міг буквально представити абсолютно порожню пост. Я можу натиснути цю кнопку прямо зараз, і там ми йдемо. Ви не можете дійсно бачити це, але ця додаткова лінія тут показує, що я буквально нову посаду. У нього є тільки пустий автора і порожній тіло, і ми не хочемо, щоб люди могли зробити це. Це де перевірка приходить дюйма Я можу піти в моїй моделі об'єкта, і тепер я можу додати нову функцію, яка визначає що правила перевірки я повинен додати до цієї моделі щоб переконатися, що це дійсно або вказати, що це означає бути допустимим повідомлення? І я хочу сказати, що це тільки дійсний повідомлення, якщо обидва автор і тіло не порожній, і це, як ви робите це в Кохана. Ви створюєте нову функцію під назвою "Правила", а потім ви в основному повернути асоціативний масив , Який визначає правила перевірки для цього об'єкта. Ми збираємося повернути масив, а потім те, що ми збираємося зробити, це сказати "автор", вона йде до масиву, який йде в інший масив під назвою "не є порожнім." А потім я збираюся сказати "тіло". Гаразд, і синтаксис для цього і структура для цього може виглядати трохи громіздким і трохи складніше. Якщо ви прочитали документацію, це досить просто з'ясувати, Але по суті це те, що вам потрібно зробити, щоб вказати деякі правила перевірки, і є багато різних правил що Кохана дасть вам безкоштовно, як ви можете додати правила сказати він повинен бути не менше ця довжина. Може бути, він повинен бути числовим. Може бути, він повинен бути буквено-цифровий. Може бути, він повинен бути не більше ця довжина, так далі і тому подібне. Є багато різних правил, які надає Кохана для вас, і ви можете піти на їх сайті, подивіться документацію, і ви можете побачити всі різні речі, які ви можете зробити. Але це все, що я повинен зробити, а тепер давайте подивимося, що станеться якщо я уявити порожній пост. Що станеться? О, ні, я отримую помилку. Я отримую виняток перевірки. Ну, це добре. Це сказав мені, що моя модель є недійсним, але я не хочу, щоб відобразити виняток в моїх користувачів, коли вони намагаються представити щось неприпустиме, чи не так? Я хочу дати їм якусь дружній повідомлення про помилку коли щось піде не так. Те, що ми збираємося зробити, це ми збираємося обернути все в спроба зловити циклу. Насправді, я думаю, що це також те, що ви ще не навчилися в CS50, бо С, мова програмування C, не має винятків, але майже кожен другий мову є винятки, так насправді, дійсно коротко, Винятком є ​​те, що шматок коду можна кинути виняток, коли щось йде не так, але те, можливо, деякі інші шматок коду вище може зловити це виняток і щось з ним зробити. Наприклад, в цьому випадку шматок коду, який намагається зберегти модель, він перевіряє модель, і якщо він говорить: "Добре, ця модель є недійсним," він збирається кинути виняток, і це свого роду еквівалент в С ви можете повернутися -1 або щось в цьому роді. А потім для мене, ця функція, мій код на більш високому рівні, я можу спробувати зловити це виняток і в основному говорять: "Добре, якщо я зловити виняток, що я буду робити?" Або я міг вибрати, щоб не зловити це виняток, і нехай хтось вище зловити виняток, або якщо ніхто не ловить його, то вся програма завершує роботу і каже, "Щось пішло не так, і я не міг впоратися з цим." Але що ми робимо, ви обернути шматок коду в блоку перевірки, і тоді ви також додати те, що називається блок зловити, яка є свого роду код, який намагатиметься перехоплювати виключення, які можуть виникнути. І тому, якщо я ловлю цю конкретну виняток або недійсними виняток, те, що я збираюся зробити, це Я збираюся встановити помилки - я думаю, що це, як я це роблю - і я збираюся встановити помилки в якийсь об'єкт. А потім, що я збираюся зробити, це якщо вона потрапляє це виняток, він не збирається перенаправити, і якщо він не перенаправити, він збирається вийти з, якщо блог і вдарив цей блог / новий, який хочете я хочу зробити. Якщо є помилка, то я хочу, щоб повернутися у форму і відображати ці помилки. Тепер те, що я хочу зробити, це я хочу передати в цих помилок в уявлення. Добре, я думаю, у мене думка прямо тут, і в основному я хочу, щоб відобразити ці помилки, якщо вони існують. Перш, ніж я писати HTML для цього, я збираюся дуже швидко показати вам, що структура цієї помилки мінлива виглядає, і це є хорошою практикою в цілому. Багато разів ви отримуєте щось від деякого методу, деяка функція в веб-бази, і ви не знаєте, що змінна виглядає, так що ви не знаєте, як з нею працювати. Я збираюся використовувати метод друку г в основному роздрукувати його. А як ви можете бачити, він каже мені, що це асоціативний масив, і у вас є ключ, автор, вказує на цей рядок, Автор не повинен бути порожнім, а інший ключ, тіло, вказує на інший рядки, тіла не повинно бути порожнім. Я, як, добре, прохолодно. Тоді я можу перебору масиву і роздрукувати кожну повідомлення. Це в основному як асоціативний масив з купою повідомлень. Те, що я збираюся зробити, це "якщо помилки," і я збираюся створити невпорядкований список, і я збираюся для перебору всіх помилок. І це, і тепер я збираюся спробувати подачі це знову, і давайте подивимося, що ми отримуємо. Тепер ми отримуємо цей хороший список помилок, і це все ще досить потворні, але це, очевидно, може бути відформатований, щоб добре виглядати, але основна ідея якраз через кілька рядків коду, ми змогли перевірити нашу модель, переконатися, що деякі поля були порожні, і якщо щось пішло не так, а потім повернутися якусь повідомлення про помилку Тоді я міг би представити назад користувачеві. Ви також можете налаштувати свій перевірку так що ви можете насправді мають повідомлення про помилку що більш специфічні для вашої програми або щось на зразок цього. Все, що, як правило, настроюється. На жаль, ми мало часу, так що я буду мати, щоб відрізати живу сесію кодування тут. Є купа інших функцій, які я хочу показати вам в цьому прикладі. Наприклад, ви можете додати шаблони для вашого сайту, так може бути, є якийсь HTML код, який ви хочете застосувати до кожної окремої сторінки на вашому сайті, і замість вставки, що в кожному окремому файлі зору у вас є, що, очевидно, було б поганою практикою, ви можете в основному визначають ці шаблони, а потім в контролері сказати: "Добре, я за допомогою цього шаблону." "Чи всі мої погляди використовувати цей шаблон." І той, останнє, що я хочу показати вам, а також що у нас немає часу для крос-сайт скриптинг, і в основному я думаю, ви, хлопці, напевно, бачили в CS50 - Я думаю, що Девід Малан, ймовірно, говорили про те, як можна, як правило, вводять JavaScript код в - ви говорили про це? Може бути? Може бути, ні? Але багато разів, ви можете впровадити шкідливий JavaScript код в базу даних чиєїсь, і якщо вони не уникнути, що належним чином, Потім, коли вони представляють, що дані назад користувачеві, то це може запустити якусь випадкового коду JavaScript ви не хочете щоб це відбулося, і я збирався продемонструвати, як ви могли б зробити, що в Кохана. Це насправді дуже, дуже легко. Я міг зробити це прямо зараз за 2 секунди буквально. Все, що вам потрібно зробити, це в основному обернути ці речі в те, що називається HTML сутності. І це автоматично уникнути всі символи правильно і переконайтеся, що ви не отримаєте цю проблему. [Студент] Ви неправильно пишеться перший тест. [Брендон Лю] О, ой. Гаразд, це все, що я повинен був розділити з вами на сьогоднішній день. Ці слайди будуть розміщені, але вони, як правило, єдині ресурси, які ви повинні дійсно потрібно, щоб почати з Кохана. Ви можете перейти на сайт. У них є керівництво користувача, і вони також мають API дослідник. Ми можемо вивчити всі різні функції і допоміжні функції, які вони мають для вас. Як правило, вони мають достатньо інформації на веб-сайті що ви можете використовувати, щоб почати роботу і почати працювати з Кохана. Є не так багато підручників, я думаю, для Кохана, за межами те, що вони мають на веб-сайті тут, так що це, ймовірно, ваш кращий вибір. Але якщо ви хочете, щоб піти з веб рамках і ви не хочете, щоб підібрати нову мову, і ви хочете щось, що відносно легкий і має легкий кривої навчання, Я безумовно запропонував би Кохана. Це, ймовірно, кращий пропонуючи за це. Найсмішніше, однак, є якби ми використовували Рубін на рейки, ми могли б відтворити те, що ми тільки що зробили і, ймовірно, більше віком до 3 хвилин. Чи жарт, але, дізнавшись, Рубін на рейки не займає набагато більше ніж це було б зробити, щоб дізнатися Кохана. Це в основному ваш вибір того, що ви хочете вибрати, щоб дізнатися, але якщо ви хочете отримати і працює швидше, Кохана, безумовно, дуже хороший вибір. Будь-які останні питання перш ніж ми закінчимо? Так. [Студент] Як би ми інтегруємо, що в рамках CSS, як ви використовували, коли ви були інструктаж? Питання в тому, як би ми інтегруємо, що з рамках CSS? Те, що ми, ймовірно, зробити, це ми, ймовірно, включають нова папка, де ми б звалити всі наші файли CSS, і тоді ми б також додати новий шаблон. У шаблоні ми включити ці CSS файли щоб переконатися, що вони посилаються на кожній сторінці, а потім, коли ви насправді пишете HTML, ви просто додати відповідні класи та ще багато чого, і, наприклад, коли ви використовуєте щось подібне формі допоміжна функція, ви можете додати більше параметрів після вказати, які класи ви хочете бути прикріплені до різних речей щоб вони могли укладати його належним чином, і це в основному, як ви пішли б. Будь-які інші питання? Приголомшливо. Спасибо за ваш час, і спасибі, що прийшли. Я не збирався додати дуже багато іншого, але 1 дуже швидко, що є у нас немає посилання у форму. Дійсно німий. Давайте додамо - насправді, на думку, блог, індекс, давайте вже швидко додати посилання, яка йде на нову сторінку, сторінка, на якій ми можемо вставити нову посаду. Ми збираємося зробити це. Що приємно, є вся ця група HTML допоміжних функцій які роблять різні речі для вас, так що ви вже бачили сутностей функціонувати тут, але вони також мають функцію з ім'ям "якір", який ви можете ввести в блог / новий і сказати: "Дати новий блог". І було б створити цей зв'язок для вас, і це, здається досить просте зробити, але це приємно, тому припустимо, що ви рухаєтеся свій сайт з домену 1 в іншу. І якщо ви просто виписав URL-адреси себе, то вам доведеться змінити все URL-адреси. Або може бути, ви перемістили його з 1 вкладеної в іншу підпапку. Ви повинні були б змінити всі ті, URL-адреси себе, і це не весело. Ви можете використовувати цей якір прямо тут, і ви можете змінити домен або вкладених папок префікс у файлі конфігурації один раз, а потім вона буде застосовувати, що скрізь, і це, знову ж, відмінний приклад не повторювати себе, сушки код з. Скрізь, де ви повторюючи себе, спробувати витягти в якийсь файл конфігурації або на іншу функцію і вона впоратися з цим для вас. А сама остання річ, що я хотів показати вам, був Припустимо, ми повернулися на цій посаді, і я склав деякі дійсно довге есе, але я забув включити мою автор. Тепер, коли я натискаю "Відправити повідомлення" Я просто втратив все. Ні! Дійсно сумно. Отже, як ви справляєтеся з цим? Це те, що ми робимо. Що ми робимо тут для цих вхідних і текстової області функцій, якщо включити другий параметр, то значення цього другого параметра буде те, що поле буде спочатку заповнюється. Те, що ми могли зробити, це в нашому контролері блозі, ми могли зв'язати іншу змінну. Назвіть це «цінностей» може бути. І пройти в поштовому масиву, в буквальному сенсі. Це означає, що якщо при перевірці стався збій, пройти до мене на пошту масив, я представив від останнього запиту, і, таким чином, я можу використовувати значення з мого останнього подання для повторного заповнення поля. Тепер я можу зробити щось на зразок значень автора і цінності тіло, і таким чином тепер, якщо я зробити деякі випадкові речі і натисніть кнопку "Відправити повідомлення", то він залишається там. Але ми збираємося зіткнутися з іншою проблемою. Це працює, але якщо я перейти на сторінку в самий перший раз, це буде крах, і це тому, що в самий перший раз ми йдемо на сторінку, цей пост змінна не визначена. Це нуль. Він не існує. А те, що ми хочемо сказати, якщо існує цей ключ, потім повертає значення цього масиву, але якщо ключ не існує, то я отримав порожню рядок. Це функціональність ми хочемо тут. Ми хочемо, щоб перевірити, чи існує ключ, перш ніж намагатися отримати доступ до масиву, і досить на щастя, Кохана також дає нам допоміжну функцію для цього. У них є весь цей набір функцій під назвою ARR, скорочення від масиву, і у них є 1 функцію під назвою "отримати", і ви можете передати в масиві, і ви можете передати в імені ключа. Потім, в основному те, що він буде робити це він буде намагатися отримати цей ключ, але якщо що ключ не існує в масиві, потім він повернеться порожнім, або ми можемо також вказати значення за замовчуванням, я вважаю, , І це приємно. Тепер, якщо ми робимо те ж саме ще раз, Потім ви бачите зараз він працює в перший раз навколо, і знову ж, якщо ми наберемо в деяких випадкових речей і спробувати уявити, то він залишається там. І я думаю, я можу також показати вам, як додати шаблон дуже швидко. Що ми можемо зробити в першу чергу, ми можемо додати новий вид під назвою "template.php" в папці Views, і те, що я збираюся зробити, це я збираюся роздрукувати те, що називається "Зміст" який буде моїм основним змістом. А може бути, в самому низу я збираюся додати, скажімо, Авторські права. [Нерозбірливість студент питання] [Брендон Лю] Може бути, це супер базовий шаблон я хочу використовувати. Я хочу їсти папка з моїм авторським правом на кожній сторінці, і тепер те, що я збираюся зробити в моїй контролера Зараз замість того щоб сказати: "розширює контролер" Я збираюся сказати, "розширює Controller_Template," і тепер замість того щоб сказати: "тіло відповіді дорівнює цієї точки зору," Я збираюся сказати, "це зміст шаблон -" і я думаю, - мені поставити знак рівності? Я забуваю. Так, я так і думав. А тепер я встановив, що вміст змінної рівним вигляд. Я можу зробити те ж саме тут. І тепер, якщо я оновити, ви можете бачити тепер цей авторських додається там, і просто зробити деякі випадкові пост, а потім, знову ж таки, ви повинні побачити, що авторське право є в самому низу сторінки. Великий. Ось все, що я хотів показати вам, хлопці. [Оплески] Є питання? [CS50.TV]