>>開始彌合什麼 可能是你唯一的經驗
與web編程，我 想我會做的就是偷一對夫婦
的例子，你 可能已經看到在50
如果你把它的過去 一年或兩年或可以不具有
如果你在幾年前把它
這是嬰兒的步驟走向 吡啶知道的MBC，
模型視圖控制器， 而這是什麼意思？
這是我們將再次看到也許 開始只是一種方式
清理部分的設計 基於網絡的軟件，
或者它可以是客戶端 基於為好，但我們將使用它
在PHP的上下文中， 這樣我們就可以開始
使更複雜 項目和排序
分開不同類型的 在應用程序中的代碼;
特別是這樣，當我們 有多種工作的人
上一個項目它的很多 容易畫線。
因此，首先讓我們來 看一個次優方式
在實施的東西。
假設我希望做一個超級 簡單的課程網站50
或任何其他類， 這個類有東西
像講座和課程提綱。
我可以做類似的 我的頁面頂部h1標籤
和一個無序列表 為了李列表中的項目
只是有一個項目符號列表 菜單選項，所以超級簡單。
那麼我們如何做到這一點？
好吧，讓我進入我的 這裡的終端窗口，
並請注意，我有一個讀 我，我們會鏈接到這個代碼
在球場上的網站 在一個位，
並請注意，我有 指數點HTM - 指數點PHP的。
因此，讓我繼續前進，打開 即，果然它是一種
傻，這 甚至被稱為PHP
因為我的一切 是一個php評論
然後一切 僅僅是原始的HTML代碼。
但是，這同樣是零版本，
所以邁向一步 更有趣的東西，
但是請注意，我硬編碼CS50 作為標題，CS50在H1，
現在我有 講座鏈接，
現在我有教學大綱的鏈接。
好吧，這麼說不對 似乎一切不合理
直到你跟著像一個鏈接 聽課，你知道
所有的權利是不同的 的內容，但它是一種
同樣的事情;這是一個標題 頁面和無序列表中。
我按零一周 去年，它的那種
同樣的事情，一個h1 標籤和無序列表
然後最終我點擊 這一點，我也得到一些葉子，
這是從滑動 特定的講座。
所以東西告訴我 我即將畏縮。
如果我打開講座 點PHP的通知
這幾乎是複製和 從以前的文件粘貼;
我只是改變了標題 H1，以及這些鏈接。
更糟糕的是，如果我去 成週零點PHP，
它是相同的複製粘貼工作
只需一點點 內容扭捏。
所以肯定有一個 機會在這裡提高，
並肯定這應該 是一個很好的經驗法則;
任何時候你感覺 複製自己
和粘貼的東西 以上也許一次，
紅旗應該 希望開始熄滅。
但是，我們如何去 關於改善呢？
嗯，有幾個方法，和 您可以使用技術
在PHP已經發展了 時間，而是讓我們試試這一個。
讓我走進版本之一， 這使下一次迭代，
讓我來試試 清理了一下。
右，一個PHP的 最簡單的機制
用於解決該問題的是 老同學需要的功能，
這幾乎做了副本 及的內容粘貼
有些文件在這裡的， 像c是尖銳包括，
和其他語言有 非常相似的結構。
所以看起來有點 現在奇怪的，
這絕對不是一個 完成尋找網頁，
但據推測什麼 裡面的頭點PHP的。
所有其他的東西，對吧， HTML標記，頭部標記，
標題標籤，所有的東西 這是上面的主要精髓
的頁面，這可以說是 只是無序列表，
和頁腳可能是 像封閉body標籤，
關閉HTML的標記; 很無趣
但重複的東西。
所有的權利，確保 夠了，如果我去
成頭點PHP的，它只是 一種孤兒片段
從頂部，如果我 進入頁腳點PHP，
它是孤立的 片段從底部
我使用那些相同的 在我的其他文件片段，
像講課點PHP的。
好吧，有什麼更好的 關於這個，你會說什麼？
是嗎？
>>簡單。
>>簡單？
我不知道這種長相 很多可怕到我現在，對不對？
>>如果我想改變你的 頭，你不會有
在所有的更改 以前的文件一樣。
你只需要改變它 在你的頭。
>>沒錯，所以也許在 這個意義上它是簡單的，
也許我會鏡​​框，因為它是 只是它更容易更新。
這也許有點吸塵器
因為你更新 它在一個地方。
所以這是相當 引人注目;什麼是缺點
這種方法或 有什麼問題遺骸
我們還沒有真正解決了嗎？
是嗎？
[關話筒評論]
是的，沒錯，我的意思是，我 還是複製和粘貼;
這是少一點，但我只 拉起兩個這樣的文件，
他們幾乎 看上去仍然是相同的。
有一個需要在 頂，一個需要在底部，
和無序 列表中的中間
它本身仍 在結構上是相同的。
此外，注意到這一點，如果我 其實看到這個例子，
讓我去一個版本現在，
並注意我有 CS50講座課程。
嗯哦，CS50週週零 一個和CS50，三，五，
那種我剪了一個角落裡。
是什麼 - 是什麼 以前這些頭銜？
[關話筒評論]
他們就像在講座 週零，就像是那種
的性感，它實際上 有一些動力吧，
這是一種 - 我 只是那種現在撐船
而只是假設 整個網站是CS50
和好它的工作原理，但它的 肯定不是一樣優雅
排序或直 轉發因為它曾經是，
但是這是有道理的，因為 如果你看一下指數點PHP
和講座PHP點 而週零點PHP，
他們都包括 相同的文件，
那麼我們如何才能改善呢？
什麼是下一個迭代 這段代碼可能打算怎麼辦？
[關話筒評論]
是的，沒錯，所以如果 - 讓我總結
與我們基本上希望 參數化的頭
所以，是的還是有 硬編碼h1標籤，但東東
在兩者之間，開 和結束標記，
大概是動態的，並 從別的東西來。
也許“獲取字符串”或 之後的事情問號
在URL中是什麼地方 否則，讓我們一起來看看。
所以，如果我進入兩個版本，
現在注意，我 得到了一個額外的文件，
它看起來像傭工點PHP的。
我真的不知道在哪裡 開始，所以我要開始只是
在索引一樣一如既往的，現在 注意它是一個有點不同的，
所以我有一個要求行
在要求最 傭工點PHP，
但我可以把它 我想做的事情，
但現在發現三線 有一個函數調用
渲染報頭，這是 只限於有趣
因為什麼被傳遞 顯然，自定義標題
對於這個特定頁面。
同時還有渲染 頁腳的底部，
我不需要任何 參數化有它只是
一個頁腳，但現在似乎有
是走向美好的一步 解決方案，使頭部需要，
什麼做的平方 括號表示對那些
沒見過誰的PHP 或曾經在一段時間？
[關話筒評論]
是的，它是一個數組。
這是一個關聯數組或 一個哈希鍵關聯
與價值觀;它是像Java 腳本，異議符號，
或其他語言， 類似syntaxs。
好吧，那麼什麼是 在傭工點PHP？
在傭工點PHP是 只是一對夫婦的功能，
渲染頁眉和頁腳呈現。
因此，幾個細節 如果不太熟悉，
所以首先是事實
這使頭需要 數據論證這顯然
分配空 數組有意味著什麼？
是什麼意思做的equals 打開支架閉合支架
在PHP參數？
它的默認值。
所以，如果我沒有通過在陣列 或承擔任何參數
到渲染頁眉或 渲染頁腳功能，
我至少可以信任的 這些函數作者
這些數據將最小 是一個空數組;
它不會被不確定的或 假的，或者類似的東西，
這將是什麼 我把它作為默認值。
現在，這是一個有點排序的 加載符號的的hackish方式
到你的名字空間 可以這麼說，
但它工作得 以及朝著這個目標
實現我們自己的幾分之 窮人的模板引擎。
好吧，有很多的 工具，在那裡的蟒蛇紅寶石
和php，讓您 模板功能
而這正是我們想要的。
我們希望，有一個模板 H1開放標籤，H1標籤關閉，
樣的，有地方 夾持在中間，
我們要填補這些地方 在此函數的方式持有，
所以這個功能 提取只是恰巧
給你以下 能力。
如果你有一個關聯 數組的鍵值對
類似foo等於bar，提取 將創建一個局部變量
所謂有效的美元符號 foo和給它棒的價值
所以它爆炸的關聯 從鍵值對數組
與新變量 相應的值。
然後需要點報頭 點PHP是和以前一樣，
還等什麼，我們可能將 看到標題點PHP裡面？
它可能得到的h1標籤 和結束標記;這是怎麼回事
是它的內部 大概在這間？
[關話筒評論]
沒錯，有可能是一些 提及美元符號稱號
果然，如果我放大 在這裡面是我的標題標籤，
還有我的h1標籤，以及裡面 它是一個動態的插入
的美元符號頭銜，但 只為好措施，
我做這個網站的特殊 充電殘暴命名
功能，但它的 有用的;它有什麼作用
或者這是什麼對保護？
這實際上是一個解決方案 到威脅你暗示;
你會帶領我們。
[關話筒評論]
沒錯，所以如果一個惡意的 用戶或不知情的受害者
網絡釣魚攻擊 點擊一個鏈接
在自我有一個問號 和一些類似foo等於，
然後將該值 富竟是
像開放式支架 腳本，封閉的支架，
然後一些JavaScript代碼;
如果你沒有把這種 長的主要功能，
你究竟會傳染 原始的HTML到您的網頁，
其結果是 你可能會被欺騙。
你可能會欺騙用戶 進入執行JavaScript代碼
他或她做 實際上並不打算。
而且即使平時 你只是傷害自己，
好像只有你知道的 白痴是要輸入
在開放式支架腳本， 封閉的支架，並提醒說，
或者類似的東西 做他或她自己
在與一些奇怪的結果， 如果你得到被騙
點擊進入，有一個鏈接 生的JavaScript嵌入其中
作為該屬性的值，
你還可以在其他的事情 偷別人的餅乾
因為有一個屬性 所謂的文件點餅乾
在JavaScript中，讓您 搶用戶的會話cookie，
如果你還記得什麼 會話劫持攻擊，
長話短說，這是1 這樣實際上欺騙某人
為使您的虛擬 郵戳及再服用
在他們的Facebook帳戶 或一些其他類型的帳戶。
好了，所以這 是有點長，
但它只是使用 原始的HTML代碼。
這相當於 調用迴聲
或有效地打印， 我們基本上插入
動態。
那麼，更多的仍然在這裡？
好吧，讓我進入 版本三在這裡，
我們會看到一個有點 不同的 -
完全相同的文件佈局 但通知
這一次，我們要 概括頁眉和頁腳
為模板，還等什麼 我的意思是什麼？
什麼是一件事 這是不同的嗎？
自從發生了什麼變化 最後的版本？
微妙的，但它可以說是 只是一個更好的更清潔的設計。
是嗎？
[關話筒評論]
是啊，有只有一個 標準的渲染功能;
我沒有特殊的情況下渲染 頁眉或頁腳渲染，
這兩者，如果你 從傭工召回點PHP，
我們幾乎相同 除了他們的名字
他們包括模板。
為什麼不直接參數化 渲染功能
並採取一個參數，那就是 該模板的名稱，
和第二個可選參數 這是鍵值對
要插上電源。
所以，如果我現在看 傭工點PHP的通知
說我是一個 小票友了。
實際上，我做檢查的 文件存在，如果這樣繼續下去
並要求它;萬一 用戶無意中類型
在一些偽造的模板名稱你 不想拋出一個錯誤
在程序中，所以我們可以 最低限度地做他們這
看好這裡。
所有的權利，但我們可以 藉此一步？
在這個版本在這裡 注意以下內容。
我剛才輸入ls和 什麼，立刻跳
出有一定的差別。
因此，有兩個目錄， 右，
所以這是現在朝向一個步驟 什麼最終將成為一個更
適當的框架。
這是有點草率 我被拋出所有
我的裡面的內容 公開訪問的目錄
從字面上被稱為公眾。
並且即使不幸的是， 很多框架，
舊的特別， 甚至有些網站的文章，
夢想當中主機，力 你把所有的文件
中的一個的等效 公共目錄，即使
如果你的文件可能 包括數據庫密碼
和用戶名或 其他類似的憑證，
這不是在所有好的設計。
更好的是只放
在公共目錄 什麼是絕對有
是用戶可訪問的， 和其他一切
您正在包括 像傭工點PHP，
沒有理由認為該 應該是通過網絡訪問一個
瀏覽器的URL。
這可能是完全無害 如果用戶想要看到也許
誰對，但它只是 它的原理，
上帝保佑它實際上 有一個用戶名或密碼;
你不想要的 用戶不小心
或故意表現 能夠訪問它。
所以我們不太在 在這裡完美的方法，
但現在注意到以下幾點。
在指數點PHP，請注意 我仍然需要幫手，
但我做了這樣的方式 那種說我組織全體
該文件是 將包含
成所謂的子目錄 通常包括：
然後我打電話給渲染 頭和以前一樣頁腳。
因此，唯一的事情 我所做的就是排序
的重新安排我的目錄 要多一點肛門
有關該文件的結構。
但是，如果我們現在去 此第五示例中，
看到這裡，我們現在 有文件夾的三人，
這是一個位 此刻的誤導
因為簡單 為了類，
我剛剛拋出一切
到約翰·哈佛的 公共目錄只是
所以我們可以通過它瀏覽 一個瀏覽器，而是通知 -
忽略這部分 只是一瞬間，
事實上，我在那裡。
請注意，我有三個 子目錄：大眾，
模板，並包含。
現在的想法是，在一個 正確配置的Web服務器I
會告訴Apache，這 網站有公開訪問
文件在這裡，和別的地方。
所以，你認為是什麼文件 我要去看看裡面
公眾如果我輸入ls？
什麼是至少一個文件 這可能是在那裡？
[關話筒評論]
好吧指數點PHP和 哪些文件顯然是不
在那裡等等？
像傭工點PHP，頭 點PHP，頁腳點PHP;
所有的片段， 所有的功能
這並不真正需要的 是可公開訪問的，
它需要，也可以使用 通過將文件
是可公開訪問的， 但他們自己，
沒有用戶需要看到或QUIRE 為傭工的URL點PHP的。
請注意，而不是如果我去
成包括有 傭工點PHP，
如果我進入模板，
有頁腳和 頭點的PHP。
坦白地說，我可以把 他們在同一個目錄下，
但我想會更 更多關於肛門保持文件
那些只是有點 靜態模板不同
從功能的文件 像傭工點PHP，
而我只是堅持一些 相當普遍的約定
調用目錄 包括和模板。
因此，唯一的事情， 改變然後再是路徑。
如果我們在這裡通知 我現在只是有
以包括一個相對的目錄，
點點斜杠包括 傭工點PHP，
或者我可以多一點 適當的和實際做的東西
這樣，PHP和很多
語言有 這些特殊符號
這代表了 當前文件所在的目錄，
所以下劃線下劃線目錄 下劃線下劃線代表
任何目錄 是這個文件的，
所以，如果你只是串連 用點操作符，即，
這將實現 同樣的結果，
並且往往是多一點 健壯，因為你可以得到
與相對情況 目錄只是說點
或點點實際上可以 帶您到錯誤的地方，
所以這往往是 多了幾分穩健。
好吧，那又怎樣 雖然遺體？
你還在做 不喜歡這個？
有什麼可以改進你 早些時候我覺得談到這
那還是有一些問題？
[關話筒評論]
對了，想必大家沒有 開始寫類似的網站
看起來像這樣，對嗎？
這不覺得 所有的東西更好，
還是有複製粘貼。
我仍然有 要求在最上面一行。
我仍然有渲染 標題渲染頁腳。
有很多重複的。
是嗎？
[關話筒評論]
是的，沒錯，所以我們已經採取了 加強對排序分裂
從該的“C”“V”，所以 MVC是模型視圖控制器;
控制器是排序的 該應用程序的大腦。
模型往往是數據 或者一些共享功能，
和視圖往往是 美學，模板，
所以我們已經邁出了一步 從“V”分離的“C”
因為我們現在至少有 此模板的目錄，
但即使在那裡，我們基本上 每個文件只有一個控制器。
它看起來並不像有 多邏輯會在這裡，
但指數點PHP是 有效的控制器。
當你訪問一個URL， 在指數點PHP結束，
所有的邏輯那 實現了該網頁是正確的
在指數點PHP和 同樣的講課點PHP的。
同為週零點PHP的。
樣的，所以我們已經strone我們 邏輯所有的地方，
而且感覺像 這是不會
規模非常好，一旦我們 有不是四個而是40頁
如果每個頁面開始 我複製了舊版本
文件和剛 有些扭捏
的它裡面的內容。
因此，我們只能採取 朝著這個了一步，
和的工具之一 我們將介紹
上週三是一個 成幀器稱為“Laravel”
這是很 流行的PHP框架，
其他的包括“Fuelphp。”
這裡有一個舊的一個 所謂的“笨”。
有一個叫“蛋糕”。
有一個叫“交響曲”。
我的意思是，如果你谷歌 PHP框架，
有一個殘暴 像框架數
人們實施了。
Laravel是一個 更多和來者不拒;
它是清潔器中的一個 的人，你會發現
最終它幫助 節省你不少
的時間，即使有 一個學習曲線，
但是，我們將引導 你在上週三。
此外，我們將介紹 什麼所謂的“ORM”。
在這種情況下，我們將使用 東西來
與此框架 所謂Laravel。
這就是所謂的“口才”和 這僅僅是一個代碼層
使您可以在其他 東西跟數據庫。
這裡也一樣，讓我偷 例如，要么是近期
或為倒退 50你們中的一些。
如果你沒有把50和 你做了“CS50財經”
你可能還記得文件 你寫或重寫了，看起來
像這樣，這是登錄 點PHP，並在時間，
特別是因為我們 沒花多少時間
關於PHP的基本面早期，
這本身可能有 是相當具有挑戰性的，
所以我們做的，其實， 盡量簡化設計。
我們並沒有真正分開的“M” 從“C”，“V”所有的東西
針對問題， “七CS50財經”
但要注意的一件事 這應該有希望啟動
很快擦你的錯 路，是這樣的。
我的意思是，這不僅是 登錄點PHP的控制器。
也有人直接對話
到數據庫具體 使用續集，這是不會
規模非常好，當 你開始一個工作
或兩個或三個合作夥伴。
例如，如果一個 合作夥伴負責
創建您的 數據庫表和未來
與您的索引 和辯別
出了什麼鍵應該可以， 主鍵，外鍵，
而所有這一切，決定 表名和所有的。
現在，你的其他人 本集團需要知道所有
的設計決策，他或 她做了，你現在需要
硬編碼這些決定 為您的文件，所以現在他
或者她是漂亮 的局限
永遠不會再改變 那些表名。
永遠不會再改變 那些名字申請
沒有通知你。
此外，你不能真正 在同一個文件輕鬆工作
無碰撞 與對方，如果他
或者她是不斷 改變名稱，
和你有舊的 版本等等，
所以這只是邀請 很多很多的麻煩。
此外，我們將 看用不了多久，
即使你並不需要
做特別 這裡複雜的查詢，
一旦你開始有多個 表，這兩個表，三，五，
十張桌子在MySQL或 通常是一個關係數據庫，
你必須參加這些表 通常，如果熟悉了，你有
將數據從合併 1與其他
坦白地說你的續集查詢 開始變得更長，並且越長，
和更長的時間，並且更 複雜的，它只是開始
得到了很多容易 犯錯誤
和很多難以 正確的事情。
而像這樣的工具 雄辯和ORM是怎麼回事
幫助我們我們的模型和數據 它也有效地去
生成代碼，我們 需要開始查詢數據庫
在更複雜的方式。
所以，如果你已經有了一個主鍵 在這裡和一個外鍵
在這裡，所有你需要的 做的是教的ORM，
對象關係映射器， 那是什麼關係
它會找出什麼 查詢為您執行。
而且，只有在極少數 情況下，你需要
到一定寫 續集代碼自己。
如果你真的想 微調的東西，
但在大多數情況下，你可以 剛開始治療實體
在你的數據庫為真 對象和這些不平坦的行
你莫名其妙地需要 重建和德正常化。