[Hội thảo] [Kohana: Một Nhẹ PHP Framework] [Brandon Liu] [Đại học Harvard] [Đây là CS50.] [CS50.TV] Hi tất cả mọi người. Tôi tên là Brandon. Tôi là một cơ sở ở đây tại các trường đại học làm khoa học máy tính, và hôm nay chúng ta sẽ nói về Kohana, mà là một PHP framework phát triển web. Hôm nay là có được một cuộc hội thảo mã hóa trực tiếp, vì vậy tôi về cơ bản sẽ dành 5-10 phút giải thích những gì Kohana là, và sau đó tôi theo nghĩa đen sẽ xây dựng một blog siêu đơn giản cho bạn ngay tại đây theo nghĩa đen từ đầu. Chúng ta sẽ tải về mã từ trang web của Kohana, và chúng ta sẽ bắt đầu xây dựng một blog, và hy vọng nó sẽ rất giáo hóa, bởi vì bạn sẽ thấy có lẽ có lẽ tôi sẽ làm cho một số sai lầm, và bạn sẽ thấy tôi hồi phục từ họ, hoặc bạn sẽ thấy quá trình suy nghĩ của tôi khi tôi xây dựng thông qua blog này, và trong khi đó, bạn cũng sẽ làm quen với các khuôn khổ chính nó. Hy vọng nó sẽ là một bài tập rất bài học. Đầu tiên, những gì chính xác là một khuôn khổ? Nếu bạn đã được tham gia CS50 cho đến nay, bạn đã không thực sự làm việc với bất kỳ khuôn khổ nêu ra, và điều này là này. Bạn đã có thể thực hiện 1 phát triển web pset đã, và chúng ta hãy nói rằng bạn tiếp tục xây dựng các trang web và giữ các trang web xây dựng. Bạn sẽ bắt đầu nhận thấy một vài điều. Điều đầu tiên bạn sẽ nhận thấy là có lẽ bạn đang làm những điều tương tự hơn và hơn nữa tất cả các thời gian, những thứ như làm sạch dữ liệu người dùng nhập vào, những thứ như tổ chức các file của bạn một cách nào đó. Một điều khác bạn cũng sẽ có thể nhận thấy là mã của bạn có thể bắt đầu trở nên rất, rất lộn xộn, và bạn có thể để nó lộn xộn và chỉ có một thời gian rất khó duy trì nó, hoặc bạn có thể bắt đầu cấu trúc mã của bạn và làm cho nó mô-đun theo những cách nhất định để làm cho nó dễ bảo trì hơn. Đây là nơi mà các khuôn khổ web cơ bản đến in Những người đã xây dựng rất nhiều trang web, họ nói, "Chúng tôi không cần phải làm lại điều này mỗi lần duy nhất chúng tôi xây dựng một trang web." "Tại sao chúng ta không làm cho một gói mà làm tất cả những điều này cho bạn mỗi lần duy nhất bạn muốn xây dựng một trang web? " Và để khi bạn thực hiện một trang web mới, bạn chỉ cần tập trung vào những gì chính xác trang web này là về. Bạn không cần phải lặp lại tất cả các cấu hình khác nhau và tách mã và viết lại mã mà bạn thường xuyên phải làm gì khi bạn làm cho trang web. Ý tưởng là một khuôn khổ cho phép bạn viết mã cấp cao hơn mà không cần phải lo lắng về chi tiết ở cấp thấp hơn. Một chi tiết cấp thấp hơn có thể là một cái gì đó như đối phó với làm sạch dữ liệu của người dùng. Đó là một cái gì đó mà bạn nên không thực sự cần phải lo lắng. Bạn nên tập trung vào những gì phân bổ web của bạn thực sự là về. Nó giúp loại bỏ rất nhiều mã soạn. Nó là một kiến ​​trúc cho dự án của bạn. Một phổ biến nhất sẽ là Model-View-Controller, mà tôi sẽ nói về trong một giây. Và rất nhiều lần các khung thể hiện một tập hợp các thủ tục, quy tắc và thực hành tốt nhất để bạn có thể sử dụng để khi bạn áp dụng khuôn khổ web bạn phải viết mã của bạn trong một cách nào đó, và nó thường được một thoả thuận thiết lập các nguyên tắc của cộng đồng nói chung được chấp nhận là một cách tốt để viết mã. Nó làm cho mã của bạn dễ bảo trì hơn, có thể sử dụng nhiều hơn, vv và vv. Và cuối cùng, điều tôi muốn nhấn mạnh về các khuôn khổ so với các thư viện là ý tưởng này về đảo ngược kiểm soát, và điều này là này. Sự khác biệt giữa một thư viện và một khuôn khổ là với một thư viện bạn vẫn đang viết các chương trình chính, và bạn đang loại gọi thư viện và kêu gọi các thư viện để làm điều gì đó cho bạn. Sự khác biệt giữa một thư viện và một khuôn khổ là khuôn khổ bắt đầu với sự kiểm soát, và nó gọi mã của bạn, để bạn có thể nghĩ về nó như - đây là lý do tại sao nó được gọi là một khuôn khổ - khuôn khổ cung cấp khung này và cấu trúc cho mã của bạn, và bạn điền vào lỗ, và điều này sẽ trở nên rõ ràng hơn trong một giây khi bạn nhìn thấy tôi bắt đầu viết mã trong bối cảnh của khuôn khổ này. Bạn sẽ thấy rằng tôi đang điền vào khoảng trống, và khuôn khổ là loại kiểm soát tất cả các mảnh di chuyển, và tôi có phải đặt các mảnh vào đúng nơi. Hôm nay chúng ta sẽ nói về Kohana, đó là một trong nhiều khuôn khổ PHP. Có khuôn khổ web, và có những người thân trong hầu như tất cả ngôn ngữ duy nhất, và tôi chọn Kohana Kohana vì được cho là và nói chung công nhận là khuôn khổ PHP đơn giản nhất để chọn lên. Đó là trọng lượng nhẹ nhất. Có những người khác ra khỏi đó đi kèm với nhiều người, nhiều tính năng hơn, nhưng họ có xu hướng khó khăn hơn để chọn lên. Và cuối cùng, Kohana sử dụng kiến ​​trúc MVC. Nó đủ nhẹ mà chúng ta theo nghĩa đen có thể xây dựng một dự án ngay tại đây ngay trước mắt bạn, và bạn có thể khá nhiều theo cùng khá dễ dàng. Kiến trúc MVC là gì? Nó là viết tắt của Model-View-Controller, và có thể nếu bạn nghĩ về đoạn code bạn đã viết cho đến nay cho một số psets phát triển web của bạn bạn có thể thấy một số những điều này, nhưng thông thường khi bạn bắt đầu viết một ứng dụng web phức tạp hơn, sự phân chia giữa các phân đoạn 3 càng trở nên rõ ràng hơn. Tôi đặt ra các MVC đây loại như một chồng, và thường bạn sẽ nghe thấy người ta nói về ngăn xếp trong phát triển web, và điều này là để minh họa cho ý tưởng rằng mỗi lớp, mỗi thành phần thực sự cố gắng để chỉ giao tiếp giữa 2 thành phần khác. Ai đó truy cập trang web của bạn là một khách hàng hoặc một trình duyệt. Chúng tương tác với chương trình của bạn thông qua các mã xem. Mã xem tương tác với bộ điều khiển. Bộ điều khiển tương tác với các mô hình, và mô hình tương tác với cơ sở dữ liệu SQL. Và không có nhảy ở giữa nếu bạn viết mã của bạn đúng. Làm những điều này làm gì? Mô hình cơ bản là đoạn mã mà đề với dữ liệu của bạn. Bất cứ điều gì mà những giao dịch với cơ sở dữ liệu của bạn, với các đối tượng mà bạn lưu trữ, hoặc lấy các đối tượng trong cơ sở dữ liệu, đó là tất cả các xử lý bởi các mô hình. Có thể bạn có các đối tượng trong cơ sở dữ liệu của bạn. Chúng ta sẽ tạo ra một mô hình phải làm gì với bài viết, do đó, một bài viết có thể có một số thuộc tính cho nó. Bạn có thể có chức năng xung quanh lưu trữ những bài viết hoặc lấy bài viết hoặc lọc các bài viết và vv và vv, và đó là tất cả các mã đó là xử lý bởi các mô hình. Bộ điều khiển là loại logic ứng dụng, và rất nhiều thứ khác nhau có thể đi vào các ứng dụng logic. Nếu bạn đang nói chuyện với một API khác nhau, đó có thể là nơi bạn đang làm việc với các ứng dụng logic. Nếu bạn đang cố gắng để có để mang lại dữ liệu từ nhiều mô hình khác nhau và phải kết hợp chúng một cách nào đó, thường có thể được xử lý bởi bộ điều khiển. Ví dụ, trên Facebook, nếu bạn bạn một ai đó, sau đó có lẽ đó hành vi thiết lập mối quan hệ đó có thể được thực hiện bởi bộ điều khiển. Và cuối cùng, xem là đoạn code đó là tạo ra những gì bạn thực sự nhìn thấy. Rất nhiều lần tôi nghĩ rằng trong psets CS50 họ không thực sự khuyến khích các bạn để tách những thứ 3. Có thể bạn sẽ có lớn, tập tin dài này, nơi ở đầu bạn thực hiện một số truy vấn SQL và có thể làm một số xử lý trên các dữ liệu bạn lấy từ cơ sở dữ liệu, và sau đó bạn có tất cả HTML của bạn ở phía dưới. Và bạn có thể thấy rằng khi bạn tạo ngày càng nhiều các trang rằng bạn sẽ có một số sự lặp lại mã, và cũng có thể, điều này là tập tin của bạn được thực sự lớn và dài và trở nên khó sử dụng để quản lý. Lý do tại sao MVC là rất tốt xem là một số lý do. Điều đầu tiên là một cái gì đó gọi là tách mối quan tâm đó là ý tưởng rằng khi bạn có - lý tưởng 1 đoạn mã nên làm 1 việc và làm thực sự tốt, và bạn không nên kết hợp từng phần mã mà làm những việc khác nhau. Ví dụ, xem mã và mã mô hình, họ không thực sự có được liên quan. Họ không phải là trong cùng một file, vì vậy khi bạn có thể, tách chúng ra vì vậy nó dễ dàng để duy trì. Điều khác là sử dụng lại mã. Bạn có thể tìm thấy chính mình viết các truy vấn SQL tương tự hoặc làm truy vấn tương tự có thể được trừu tượng vào 1 chức năng, và đó là ý tưởng đằng sau các mô hình và bộ điều khiển, có nó trong một chức năng riêng biệt mà bạn có thể tái sử dụng ở những nơi khác nhau trong dự án của bạn. Và cuối cùng, đó là gắn liền với khô mã của bạn, hoặc không lặp lại chính mình, không lặp lại chính mình. Điều này rất dễ hiểu trong phát triển. Bất cứ khi nào bạn có thể, bạn không muốn lặp lại chính mình, bởi vì nếu bạn lặp lại chính mình,  nó nhiều hơn nữa tốn kém để duy trì. Nếu bạn muốn thay đổi 1 điều, bạn phải thay đổi nó ở khắp mọi nơi, và dẫn đến lỗi, và đó là khủng khiếp. Rồi. Bất kỳ câu hỏi cho đến nay về Kohana ở tất cả? Tuyệt vời. Bây giờ chúng ta sẽ đi sâu vào phiên mã hóa trực tiếp, và hy vọng mọi thứ diễn ra tốt đẹp. Tôi sẽ về cơ bản xây dựng trang web này trên một máy chủ từ xa của tôi, và cách mà các bạn cũng có thể xem trang web và truy cập các trang web, và cũng là môi trường tốt hơn được cấu hình hơn máy tính từ xa của tôi, bởi vì nó đang chạy Linux thay vì OS X. Chúng ta theo nghĩa đen sẽ bắt đầu. KohanaFramework.org. Tôi sẽ tải về mã từ trang web. Tôi sẽ để sao chép địa chỉ liên kết, đi đến máy chủ của tôi, tải về nó, và tôi sẽ để giải nén nó. [Sinh viên] gì là lớn nhất bạn có thể làm cho văn bản? [Brandon Liu] Đó có phải là tốt hơn? [Sinh viên] Có phải đó là khả thi? [Brandon Liu] Vâng, đó là tốt. Tôi đã tải về một tập tin ZIP và giải nén đó vào một thư mục gọi là Kohana, và chúng ta sẽ phải đổi tên CS50-Kohana, và chúng ta hãy đi vào trong Tuyệt vời. Ở đây bạn thấy một loạt các tập tin khác nhau. Hầu hết các bạn có thể bỏ qua - we're không đi qua tất cả các tập tin duy nhất đó là ở đây vì hạn chế về thời gian của chúng tôi, nhưng nói chung khi bạn cài đặt Kohana, điều đầu tiên bạn làm là bạn hãy vào thư mục, và về cơ bản bạn sẽ làm một số xét nghiệm môi trường và những thứ linh tinh để đảm bảo môi trường của bạn được thiết lập đúng để chạy Kohana và chắc chắn rằng mọi thứ đều ổn. Bạn có thể thấy hầu hết mọi thứ trôi qua, nhưng nói chung bạn luôn luôn chạy vào vấn đề này 1 nơi nó than phiền rằng một số thư mục là không ghi, và đó là vì một số điều khoản. Tôi không biết các bạn đã học được bao nhiêu về quyền truy cập tập tin trong CS50, nhưng nếu bạn làm phát triển web, bạn sẽ chạy vào vấn đề này rất nhiều. Tôi sẽ làm cho nó có thể ghi và tôi nghĩ rằng tôi cũng phải - có chúng tôi đi. Được rồi, vậy bây giờ bạn có thể nhìn thấy tất cả mọi thứ trôi qua, và bây giờ nó sẽ cho bạn đổi tên file install.php. Tôi sẽ di chuyển các tập tin install.php để installed.php, và bây giờ nếu tôi làm mới, nó mang lại cho tôi một số lỗi, và đây là nơi mà gỡ lỗi có in Đây là nơi bạn có thể xem những gì đang thực sự xảy ra. Vấn đề là, theo mặc định, Kohana giả định rằng dự án của bạn tại thư mục gốc của tên miền của bạn, do đó, nó mong bạn để được ở demo.brandonkliu.com. Chúng ta phải nói với nó rằng nó thực sự trong một thư mục con. Đó là trong một thư mục con gọi là CS50 Kohana. Có điều là, nó hiểu sai CS50-Kohana là cái gì khác, mà tôi sẽ giải thích cho bạn trong một giây. Nhưng tôi sẽ cho bạn biết đó là một cái gì đó để được mong đợi. Những gì chúng ta sẽ làm là chúng ta sẽ đi vào thư mục này được gọi là bootstrap.php, đó là thư mục cấu hình mà rất nhiều những thứ khác nhau được thiết lập. Tôi mở mà lên. Sau đó, có lẽ một trong những điều đầu tiên tôi sẽ làm là thay đổi múi giờ. Và sau đó chúng ta hãy xem. Aha! Ngay tại đây. Có một loạt các câu nói cấu hình khác nhau ở đây, nhưng một trong tôi đang tìm là điều này được gọi là URL cơ sở, và theo mặc định tôi nhận được nó thiết lập để Kohana, nhưng tôi sẽ thay đổi điều đó để CS50-Kohana, và tôi nghĩ rằng nên sửa chữa nó. Có, tuyệt vời. Theo mặc định, để thấy rằng nó làm việc, nó nói, "Xin chào thế giới." Ở đâu ra vậy? Làm thế nào mà chúng tôi nhận được Xin chào thế giới? Chính xác là mã mà thực sự đã viết rằng? Phải hiểu rằng, tôi sẽ giới thiệu khái niệm này được gọi là định tuyến. Khá nhiều tất cả các khuôn khổ web có khái niệm gọi là định tuyến, đó là phần của phần mềm mà sẽ bản đồ một URL nhất định để một phần nhất định của mã trong khuôn khổ của bạn. Ví dụ, nếu bạn có một số URL và bạn đi đến một số URL như foo.com / blog / tất cả sau đó những gì khuôn khổ sẽ làm - hoặc ít nhất là những gì Kohana sẽ làm - là nó sẽ tìm thấy một lớp được gọi là bộ điều khiển blog, và nó sẽ chạy các chức năng có tên là hành động tất cả. Tôi biết tôi đang nói về lớp học và chức năng, và tôi biết các bạn đã không được các lớp học và chức năng trong CS50 nào, nhưng bây giờ, bạn có thể nghĩ rằng các lớp học như chỉ là một nhóm chức năng, một cách để nhóm chức năng với nhau. Đó là thực sự tất cả các bạn cần biết. Bây giờ nếu chúng ta nhìn vào cấu trúc thư mục của chúng tôi, bên trong thư mục ứng dụng có một thư mục gọi là lớp học, và các thư mục khác được gọi là điều khiển và mô hình. Nếu bạn nhìn vào bên trong thư mục điều khiển, chúng ta thấy rằng có một tập tin gọi là chào, và bạn có thể thấy đây là một lớp được gọi là điều khiển Chào và có một chức năng được gọi là hành động chỉ số, và những gì nó làm là nó đặt cơ thể của phản ứng của bạn để Xin chào thế giới. Đó là nơi mà mã đang được viết. Một câu hỏi khác được, tốt, tôi đã không đi đến blah, blah, blah, / welcome / chỉ. Làm thế nào tôi kết thúc ở đây? Vâng, đó là đơn giản chỉ vì đây ở dưới cùng của file bootstrap của chúng tôi nơi chúng tôi thiết lập các tuyến đường của chúng tôi bạn có thể thấy rằng họ thiết lập một số mặc định cho bạn. Bộ điều khiển mặc định là Chào mừng. Hành động mặc định là Index. Đó là lý do tại sao khi chúng tôi đặt không có gì trong đó nó sẽ tự động đi đến bộ điều khiển Chào mừng và chỉ số hành động. Tất cả mọi thứ có ý nghĩa cho đến nay? Bây giờ, bạn có thể làm nhiều hơn là chỉ đi để điều khiển và một hành động cụ thể. Bạn cũng có thể vượt qua trong các thông số để điều khiển. Chỉ là một ví dụ, Tôi sẽ thêm một hành động khác để điều khiển này để cho bạn thấy. Chúng ta hãy gọi hành động này Echo, bởi vì nó sẽ cho bạn biết bất cứ điều gì bạn cho nó, và do đó, tôi về cơ bản sẽ lấy một tham số đó sẽ được gửi thông qua tôi để chương trình định tuyến, và như bạn có thể thấy ở đây, dòng này ngay tại đây, bạn có thể thấy rằng này về cơ bản có nghĩa là bạn có bộ điều khiển, và bạn có một /, và bạn có hành động, và bạn có / khác, và đó sẽ là thông số, và vì chúng tôi có tên ID này trong dấu ngoặc nhọn, có nghĩa là chúng ta đặt tên ID tham số này. Sau đó trong mã điều khiển của tôi nếu tôi muốn lấy một tổ chức của tham số đó, Tôi có thể sử dụng mã tôi đã viết, tìm tham số có tên ID. Đó là những gì tôi đã làm ở đây, và tôi sẽ quay trở lại và nói, "Bạn nói" đó. Và vì vậy bây giờ nếu tôi đi đến trang web của chúng tôi, Tôi đi đến cs50-kohana/welcome/echo/Helloooo-- oh, đúng rồi. Có 1 bước tôi rời ra. Đây là một phần của ý tưởng mã hóa trực tiếp. Đây là 1 điều. Chúng ta hãy xem. Vì vậy, thông thường mặc định với rất nhiều các ứng dụng web bạn phải bao gồm điều này index.php trong URL của bạn, bởi vì ý tưởng là index.php là loại điểm vào ứng dụng của bạn, nhưng tất nhiên, đó là loại gây phiền nhiễu có. Bạn không muốn có index.php xuất hiện trong URL của bạn, và khá nhiều mỗi khuôn khổ web ra khỏi hộp có vấn đề index.php này, và vì vậy bạn phải có một số biện pháp để có thể loại bỏ. Và như vậy trong trường hợp này, những gì chúng ta sẽ làm là chúng ta sẽ sử dụng một tập tin gọi là htaccess., và điều này là một cái gì đó cụ thể cho các máy chủ web Apache, và nó có thể làm những việc như viết lại URL và các URL chuyển hướng và vv và vv, và Kohana là tốt đẹp, đủ để cung cấp một tập tin htaccess mẫu. mà chúng ta có thể sử dụng. Như bạn thấy, có một tập tin có tên là example.htaccess, và chúng ta sẽ sao chép mà đến htaccess.. Tôi sẽ mở và chỉnh sửa nó, và về cơ bản nó là một loạt các thứ khác nhau. Dòng chính mà bạn có thể muốn xem xét là ngay tại đây. Ý tưởng là điều này đặt ra một quy tắc mà nói, "Được rồi, bất cứ điều gì bạn gõ vào, thêm vào trước index.php cho điều đó." Bạn có thể thấy điều đó. Các. * Viết tắt của bất cứ điều gì, phù hợp với bất cứ điều gì, và sau đó là phần thứ hai là index.php / $ 0, và $ 0 đề cập đến bất cứ điều gì là lần xuất hiện trước đây. Điều đó có ý nghĩa? Nhưng điều thực sự quan trọng tôi muốn thay đổi là thay đổi cơ sở viết lại này, là cơ sở URL. Nó loại giả định nơi bạn đang làm việc từ. Tôi sẽ thêm CS50 Kohana đó, và cách mà bây giờ nếu tôi loại bỏ các index.php, nó phải làm việc, và tôi sẽ thêm một số con số để cho bạn thấy rằng nó thực sự đã làm việc. Âm thanh tốt. Mọi thắc mắc cho đến nay? [Sinh viên] Làm thế nào mà nó biết để làm cho 123? Là một cuộc tranh cãi? Chính xác. Bạn có thể nghĩ nó giống như một cuộc tranh cãi. Nhưng điều kỳ lạ, mặc dù là cách nào đó Kohana là họ không làm điều đó một cách chính xác như một đối số. Bạn phải lấy nó như thế này. Bạn phải lấy các đối tượng yêu cầu và yêu cầu các tham số được đặt tên ID, và rằng tên ID đến từ tập tin bootstrap mà tôi thấy trước đó, và tên ID là trong những dấu ngoặc nhọn, và đó là cách bạn lấy những thông số. Tuyệt vời. Bất kỳ câu hỏi nào khác không? Như tôi đã nói, điều khiển, họ xử lý logic ứng dụng, vì vậy đó là 1 ví dụ bạn có thể xem that - nó rất cơ bản, nhưng nó vẫn còn ứng dụng logic, ý tưởng lấy các tham số và tạo ra một chuỗi mới nói rằng, "Anh nói blah", và sau đó nhổ nước bọt mà lại cho bạn. Và nói chung là những gì bạn làm là bạn tạo các bộ điều khiển khác nhau. Bạn tạo các bộ điều khiển riêng biệt cho các bộ phận khác nhau của trang web của bạn. Hôm nay chúng ta sẽ làm cho một trang web rất đơn giản, và nó sẽ là một blog rất cơ bản. Chúng ta sẽ làm cho một bộ điều khiển mới chỉ dành cho các bài viết trong một blog. Nhưng sau đó nếu tôi cũng thêm ý kiến ​​để bài viết trên blog, sau đó tôi có lẽ sẽ muốn thực hiện một bộ điều khiển mới cho những ý kiến. Nếu tôi muốn thêm người dùng, tôi có lẽ sẽ thêm một bộ điều khiển mới cho những người sử dụng, và nói chung, ý tưởng là bất cứ khi nào bạn có một mô hình mới, một đối tượng dữ liệu mới mà bạn đang làm việc với, bạn có một bộ điều khiển duy nhất cho đối tượng dữ liệu. Hôm nay chúng tôi sẽ chỉ làm việc với 1 đối tượng dữ liệu, và đó sẽ là bài viết, và bạn cũng có thể nghĩ rằng các đối tượng dữ liệu như tương ứng với bảng. Nói chung mỗi bảng tương ứng với 1 loại đối tượng dữ liệu, do đó, các bảng bài sẽ có 1 bài viết mô hình, trong đó sẽ có 1 bài điều khiển tương ứng với đó, và tương tự cho ý kiến, tương tự cho người sử dụng, vv và vv. Và đó là một quy luật chung của ngón tay cái. Hiện đang có là trường hợp đặc biệt, nơi bạn có thể khác nhau từ đó, nhưng 90% thời gian đó là những gì bạn sẽ phải làm, và tôi sẽ chỉ cho bạn đó là những gì chúng ta sẽ phải làm ngày hôm nay. Thêm 1 khái niệm trước khi chúng ta đi sâu trở lại vào mã, ý tưởng này của đối tượng bản đồ quan hệ. Các bạn đã thực hiện một pset phát triển web, và bạn đã nhìn thấy rằng bạn thực hiện một truy vấn SQL, và bất cứ điều gì nó sẽ trả về cho bạn các hàng. Bạn sẽ có được các hàng, và chỉ số bạn chúng bằng một số tên, tên của cột và bảng, và đó là cách bạn làm việc với nó, và nó có thể là một chút rườm rà. Nhưng hơn nữa, nếu bạn có mối quan hệ trong cơ sở dữ liệu của bạn, ví dụ như nếu tôi có ý kiến ​​và bài viết, thì có lẽ tôi muốn lấy bài của mẹ xet. Nếu tôi sử dụng chỉ hàng trong SQL, sau đó tất cả tôi có thể nhận được là ID của bài viết cha mẹ và không phải là bài thực tế bản thân. Nhưng khi chúng tôi đang mã hóa, những gì chúng ta thực sự muốn là để thực sự lấy  phụ huynh gửi bản thân đôi khi. Đối tượng những gì bản đồ quan hệ không được nó có kết quả của các truy vấn cơ sở dữ liệu và đặt nó vào các đối tượng cho bạn, đó là rất đẹp để làm việc với các mảng đồng bằng và các hàng. Ví dụ, bây giờ khi tôi có một nhận xét có lẽ, và tôi muốn lấy bài mẹ của nó, và tôi có thể bình luận mũi tên bài, sau đó nó sẽ thực sự cung cấp cho tôi các đối tượng bài tương ứng với các bài mẹ thực tế, không chỉ là một số ID, mà tôi nếu không sẽ phải sử dụng và thực hiện một truy vấn SQL để lấy bài, đó là cồng kềnh và không cần thiết. Và hơn nữa, bằng cách ánh xạ tất cả các dòng dữ liệu thành các đối tượng, bạn cũng có thể đính kèm nhiều chức năng hơn cho các đối tượng, ví dụ như vậy, tôi đã nói chuyện về cách các lớp học chủ yếu là nhóm các chức năng. Bạn có thể nghĩ về nó như thế. Ví dụ, có lẽ tôi có đối tượng bài viết này, và có lẽ tôi muốn có một số loại chức năng gắn liền với nó về cơ bản nói với tôi nó đã được gần đây đã đăng? Được nó được đăng tải trong tuần trước, đúng hay sai? Và đó là một chức năng tôi có thể đính kèm vào đối tượng đó, và nó thực sự thuận tiện để có nó trong cùng một vị trí, và có một loạt các chức năng khác nhau mà bạn có thể tạo ra cho các đối tượng, và nó thực sự tốt đẹp để có thể gắn nó vào một lớp học, đến một đối tượng, trong khi nếu bạn chỉ có các hàng từ cơ sở dữ liệu của bạn, sau đó bạn có thể không thực sự gắn bất kỳ chức năng đó. Đó là nghĩa đen chỉ là dữ liệu. Bất kỳ câu hỏi về điều đó ở tất cả? ORMs là phát triển web rất phổ biến, và có rất nhiều loại khác nhau của ORMs, và Kohana có ORM riêng của mình. Nó rất cơ bản, nhưng bạn sẽ nhận được một hương vị của nó như thế nào. Hãy tạo ra một mô hình cho bài đăng trên blog của chúng tôi, và điều đầu tiên chúng ta cần làm là tạo ra một bảng thực tế trong cơ sở dữ liệu của chúng tôi để thực sự lưu trữ dữ liệu của chúng tôi cho những bài viết. Điều đầu tiên tôi sẽ làm là đi đến phpMyAdmin. Các bạn đã sử dụng phpMyAdmin trước? Được rồi, tuyệt vời, vì vậy các bạn đã biết đó là gì, và tôi sẽ tạo một bảng mới gọi là Kohana bài viết, và nó sẽ được thực sự đơn giản. Tôi sẽ cần phải đăng nhập lại in Tất cả chúng ta sẽ làm hôm nay là có một tác giả và một cơ thể, chỉ cần giữ cho nó đơn giản. Tôi sẽ tạo ra bảng đó, và bây giờ chúng tôi chỉ có một bảng đại diện cho bài viết của chúng tôi với 2 lĩnh vực cho tác giả của chúng tôi và cơ thể của chúng tôi. Một điều khác tôi sẽ làm bây giờ là cấu hình ứng dụng web của tôi để nó biết làm thế nào để kết nối với cơ sở dữ liệu, và điều này, một lần nữa, là cái gì đó bạn sẽ phải làm gì với tất cả các ứng dụng web. Bạn phải nói cho nó tên người dùng và mật khẩu và tên của cơ sở dữ liệu và vv và vv để tìm ra cách để thực sự kết nối với cơ sở dữ liệu của bạn. Trong Kohana, chúng tôi có một cái gì đó gọi là một mô-đun cơ sở dữ liệu, và trong thư mục cấu hình chúng ta có thư mục này được gọi là cơ sở dữ liệu, và như bạn có thể thấy, có một loạt các thiết lập mà bạn đã thiết lập ở đây để cho nó tên người dùng và mật khẩu là gì cho cơ sở dữ liệu vì vậy tôi thực sự có thể kết nối với nó. Và vì tôi không muốn hai người thực sự biết tên người dùng và mật khẩu của cơ sở dữ liệu của tôi, Tôi có một tập tin mà tôi đã đặt tất cả lên, và tôi sẽ để sao chép và dán hơn. Tuyệt vời. Được rồi. Tôi nghĩ rằng đó là tất cả các cấu hình tôi cần phải làm, nhưng chúng ta hãy xem. Chúng tôi sẽ tiếp tục làm việc trong nó, và nếu một cái gì đó bị treo, sau đó chúng tôi sẽ sửa chữa nó. Bây giờ những gì tôi sẽ làm là tôi sẽ tạo ra một bộ điều khiển mới. Hoặc thực sự, xin lỗi. Đầu tiên tôi có để tạo ra một mô hình mới. Tôi sẽ tạo ra một mô hình mới gọi Post.php, và những gì chúng ta sẽ làm là chúng ta sẽ gọi nó là lớp Model_Post. Nhận được một số cú pháp làm nổi bật trên, và vì vậy khi tôi nói, "mở rộng ORM," đó là cơ bản một số chương trình hướng đối tượng hơn, mà tiếc là các bạn đã không học được trong CS50 nào, nhưng nó khá dễ dàng để chọn lên. Nó mang lại cho tôi tất cả các chức năng bổ sung này mà đi kèm trong gói ORM này, và vì vậy tôi có được một loạt các chức năng bổ sung và những thứ miễn phí, trong đó bạn sẽ thấy một chút trong một giây. Ngay bây giờ thực sự tất cả những gì cần làm là tạo ra lớp này. Tôi thậm chí không cần phải thực hiện bất kỳ chức năng hoặc bất cứ điều gì, nhưng tôi đã tạo ra một lớp đại diện cho bảng, và bởi vì tôi đã mở rộng thêm lớp ORM này, Tôi nhận được một bó của những thứ miễn phí, vì vậy bây giờ bạn không cần phải thiết lập bất cứ điều gì nhiều hơn lên. Và bây giờ những gì tôi sẽ làm là tôi sẽ tạo ra một bộ điều khiển mới, mà tôi sẽ đặt tên blog.php, và tôi sẽ phải sao chép trên bộ điều khiển Chào mừng vì vậy tôi không cần phải nhập lại một số công cụ, và bây giờ tôi phải đổi tên này. Bây giờ những gì tôi sẽ làm để kiểm tra để chắc chắn rằng tất cả mọi thứ đang làm việc ra, Tôi sẽ lấy bài đầu tiên từ cơ sở dữ liệu của tôi và in cơ thể của bài viết trên màn hình. Để làm điều đó những gì tôi sẽ làm đầu tiên là tôi sẽ lưu các bài viết cho một biến vì vậy những gì chúng ta sẽ làm là - trong Kohana những gì bạn làm là để lấy các đối tượng bài đó là loại cồng kềnh, nhưng bạn phải làm điều này được gọi là ORM :: factory, và sau đó bạn vượt qua trong tên của mô hình mà bạn muốn, và nó trả về đối tượng ORM đại diện cho mô hình đó. Và sau đó, như tôi đã nói, khi chúng ta mở rộng đối tượng ORM, chúng tôi nhận được tất cả những phương pháp này miễn phí, ví dụ như vậy, chúng tôi có được chức năng này mới được gọi là "tìm thấy tất cả" tự động trả về mọi bài duy nhất trong cơ sở dữ liệu, mà là khá thuận tiện. Và bây giờ trong cơ thể tôi sẽ trở lại bài viết đầu tiên và trở lại cơ thể của nó. Và tất nhiên, tôi cần phải tạo ra một bài, vì vậy hãy chèn một bài mới. Tôi sẽ nói, "Brandon, bài đầu tiên của tôi." Tuyệt vời. Và bây giờ chúng ta sẽ đi đến các blog và nếu tất cả hoạt động tốt - oh, đây là một số điều cho phép tập tin câm khác nữa. Giữ trên 1 giây. Đó là loại ngớ ngẩn. Có chúng tôi đi. Được rồi. Tôi cố định vấn đề cho phép. Nó đã cố gắng để tạo ra một số tập tin và một số nhật ký, và các điều khoản, một lần nữa, không được thiết lập đúng, vì vậy tôi đã làm cho nó do đó, những tác phẩm đã được ghi và thực thi do đó, nó thực sự có thể đăng nhập vào mọi thứ. Bây giờ nó đem lại cho tôi một câu nói ngoại lệ, "lớp ORM không tìm thấy" và đó là bởi vì tôi đã quên một bước. Đó là quá xấu. Trong các tập tin thư mục khởi động, có các mô-đun đây, mà bạn có thể chọn để kích hoạt hoặc vô hiệu hóa. Đây là một loạt các tính năng khác nhau mà bạn có thể chọn để sử dụng trong Kohana, đó là loại tốt đẹp. Ví dụ, họ có một mô-đun xác thực mà bạn có thể sử dụng để xác thực người sử dụng. Họ có một mô-đun bộ nhớ đệm nếu bạn muốn thực hiện một số loại bộ nhớ đệm trở lại cuối cùng để làm cho công tác ứng dụng nhanh hơn và những thứ linh tinh. Chúng tôi cần phải kích hoạt cơ sở dữ liệu và các mô-đun ORM, bởi vì như tôi đã nói, chúng tôi đang sử dụng cơ sở dữ liệu, rõ ràng, và chúng tôi cũng cần phải kích hoạt module ORM, bởi vì chúng tôi muốn có chức năng bổ sung, đó là tốt đẹp để có. Tất cả tôi phải làm là bỏ ghi chú những 2 dòng, và bây giờ nếu tôi làm mới, nó đã cho tôi một lỗi khác. Nó nói, "Class Model_Post không tìm thấy." Bây giờ đây là một vấn đề tốt để có. Chúng ta hãy xem. Làm cho nó công cộng. Giữ số trên. Oh, em yêu. Tôi không biết tại sao nó không thể tìm thấy điều đó. Đó là thực sự lạ. Tôi có lớp học này ngay tại đây. Tôi đoán tôi có thể phải - oh. Tôi rất ngớ ngẩn. Tôi quên thêm một thẻ PHP. Đó là lý do tại sao. Bây giờ tôi phải lùi lại 1 sự thay đổi mà tôi chỉ cần làm. Rồi. Có chúng tôi đi. Đó là thực sự ngớ ngẩn. Tôi không có một thẻ PHP mở. Nhưng như bạn thấy, bây giờ nó hoạt động đúng, phải không? Chúng tôi có 1 bài viết. Chúng tôi nắm lấy bài đầu tiên, và bây giờ chúng tôi in ra cơ thể của nó. Tuyệt vời. Tuyệt vời. Bất kỳ câu hỏi cho đến nay? Nope? Bất kỳ câu hỏi? Được rồi, vì vậy chúng tôi chỉ tạo ra mô hình bài, rất cơ bản, và chúng ta sẽ thêm một số chức năng sau này. Chúng ta có thể thêm kiểm chứng thực và lọc. Kiểm chứng thực là một trong những điều mà khuôn khổ giải quyết cho bạn thực sự, thực sự tốt, và tôi không nghĩ rằng các bạn phải làm điều này cho pset CS50 của bạn, nhưng nếu bạn làm phát triển web cho dự án cuối cùng của bạn, bạn đang có khả năng sẽ muốn làm một số loại xác nhận, như không có tên người dùng trống, có thể có một mật khẩu có ít nhất một số chiều dài, những điều như thế. Và nó thực sự cồng kềnh để thực hiện những điều này bằng chính mình, và khá nhiều mỗi khuôn khổ web duy nhất nào đó cho bạn và cho phép bạn làm điều đó một cách rất sạch sẽ. Và mô hình là nơi bạn thường thể hiện những quy tắc xác nhận, bởi vì nó xác định một mô hình có giá trị hay không. Nhưng hiện nay, chúng ta sẽ đặt cho đến khi sau đó, và bây giờ chúng ta sẽ làm việc trên một phần khác, và chúng tôi sẽ cố gắng và làm cho một cái nhìn mới liệt kê tất cả các bài viết. Các bước liên quan trong việc đưa ra một hành động mới cho danh sách tất cả các bài viết là để lấy một danh sách của tất cả các bài viết và sau đó hiển thị danh sách của tất cả các bài viết thông qua một cái nhìn. Ngay tại đây, may mắn thay đủ, chúng tôi đã nắm lấy tất cả các bài viết sử dụng dòng đầu tiên này, tìm thấy tất cả các chức năng, và bây giờ những gì chúng ta sẽ làm là cho đến nay Tôi đã trực tiếp thiết lập các cơ thể của phản ứng bằng cách đi qua chuỗi, nhưng bây giờ tôi muốn sử dụng một cái nhìn, và sự khác biệt giữa quan điểm và chỉ làm điều này được với quan điểm tôi có thể có một tốt đẹp, lớn mẫu HTML, và những gì tôi có thể làm là vượt qua nó biến nhất định và sau đó đã xem tự động cư mẫu của nó sử dụng các biến. Những gì tôi sẽ làm là tôi sẽ tạo ra một cái nhìn mới, và tôi sẽ đặt tên cho xem một cái gì đó như "blog / chỉ," và tôi sẽ về cơ bản liên kết này - oh, những gì tôi viết? Bộ não của tôi là ở một nơi khác. Tôi sẽ để ràng buộc các bài viết biến để xem, vì vậy cách mà xem đã truy cập vào biến bài này. Và vì vậy bây giờ tôi cần phải tạo quan điểm này, vì vậy ở đây chúng tôi có thư mục này được gọi là "Xem" và lần đầu tiên, tôi sẽ tạo ra một thư mục mới theo đó được gọi là "Blog". Này là tốt đẹp. Bằng cách đó chúng ta có thể có một hệ thống phân cấp tốt đẹp cho quan điểm của mình. Và sau đó tôi sẽ tạo ra một tập tin trong đó được gọi là "index.php". Tuyệt vời. Trên thực tế, chúng ta có cả hai ở đây. Làm cho một tập tin xem có lẽ là một phần đơn giản nhất của tất cả điều này, và đây là những điều có thể bạn đã quen thuộc với. Chúng ta sẽ làm một cái gì đó thực sự đơn giản, bắt đầu nói, "danh sách bài đăng trên blog của tôi." Sau đó chúng ta có thể đi qua, và chúng tôi có thể lặp qua mảng bài viết, lấy tất cả các bài viết và nói điều gì đó như - có thể thêm một dòng và sau đó in ra tác giả và cơ thể. Đó có ý nghĩa cho đến nay? Và chúng ta hãy xem nếu nó hoạt động. Không có gì xảy ra. Tôi tự hỏi tại sao. Oh, tôi bị mất 1 bước. Rất ngớ ngẩn của tôi. Tôi tạo ra một cái nhìn, nhưng tôi đã không đặt xem như là phản ứng, vì vậy bạn phải làm điều 1 hơn. Bạn phải làm "cơ thể phản ứng này" và đặt nó là quan điểm. Có chúng tôi đi. Chúng tôi có tiêu đề của chúng tôi, và sau đó chúng tôi có một bài viết, và chỉ cần cho đá, chúng ta hãy chèn bài khác vì vậy chúng tôi có thể thấy một danh sách. Và chèn những 2 bài viết, và bây giờ nếu tôi làm mới trang, chúng ta thấy tất cả những bài viết ở đây. Điều đó có ý nghĩa cho đến nay? Vâng, một câu hỏi? Oh, không sao. Như bạn có thể thấy, chúng ta đã có thể tách tất cả các mã số ra thành phần khác nhau, và sau đó bạn có thể thấy rõ ràng nhất với mã xem. Tập tin này ở đây thể hiện quan điểm, nó chỉ quan tâm đến đại diện cho dữ liệu, hiển thị dữ liệu. Nó được thông qua một số loại dữ liệu, và tất cả nó chỉ là hiển thị nó cho bạn. Trong tất cả các phần khác của mã của bạn, bạn sẽ không phải lo lắng về điều đó, và tương tự, mã tầm nhìn của bạn không phải lo lắng bất cứ điều gì về làm thế nào để truy cập vào cơ sở dữ liệu và vv và vv, đó là thực sự tốt và làm cho mã của bạn rất nhiều bảo trì hơn. Như tôi đã nói, quan điểm, họ năng động trong đó đó là 1 tập tin, nhưng nó sẽ tạo ra quan điểm khác nhau dựa trên các biến bạn thực sự vượt qua trong, và hơn nữa, có rất nhiều các chức năng trợ giúp khác nhau mà bạn có thể sử dụng để giúp bạn viết mã của bạn nhanh hơn, mà tôi sẽ chỉ cho bạn chỉ trong một giây. Yeah. [Sinh viên] Vì vậy, $ 0 là một bộ điều khiển, phải không? Đó là điều thứ hai. Câu hỏi đặt ra là được $ 0 một bộ điều khiển? $ 0 là một biến tôi tạo ra ở đây. Tôi tạo ra một cái nhìn đầu tiên. Tôi được giao cho một số biến. Sau đó, tôi chuyển nó vào chức năng này, thiết lập nó như là cơ thể của các phản ứng. Điều đó có ý nghĩa? [Sinh viên] Vì vậy, xem :: nhà máy, là xem như một lớp học hoặc một thư viện [nghe được] chức năng nhà máy? Câu hỏi đặt ra là về chức năng xem :: nhà máy, và về cơ bản đây là một số chi tiết lập trình hướng đối tượng cơ bản. Xem là lớp xem, và nó có một phương pháp gọi là "Nhà máy" và đó là một cách để lấy các đối tượng đó được đặt tên "blog / chỉ." Và đó là một số công cụ lập trình hướng đối tượng hơn rằng tôi sẽ không đi vào đây quá nhiều. Bây giờ rõ ràng, chúng tôi muốn tạo bài viết mới, nhưng chúng tôi không muốn có để làm điều đó thông qua một cơ sở dữ liệu, vì vậy chúng tôi đang đi để tạo ra một hành động mới để tạo ra một bài mới, và có rất nhiều thứ chúng ta phải làm. Điều đầu tiên chúng ta sẽ làm gì - hãy giải quyết những việc này một. Điều đầu tiên chúng tôi sẽ làm là chúng ta phải tạo ra một hình thức để chèn một bài mới, nhưng tôi cũng sẽ thêm một hành động mới nhất, để thêm một hành động mới chỉ là dễ dàng như thêm một chức năng mới với bộ điều khiển của bạn, và bây giờ tôi sẽ làm một cái gì đó rất cơ bản, chỉ cần lấy quan điểm này và gửi nó, chỉ cần hiển thị nó cho bạn. Và sau đó bây giờ tôi sẽ tạo ra một tập tin mới xem, và tôi sẽ bắt đầu viết một số công cụ. Những gì tốt đẹp về Kohana là họ cung cấp một số chức năng trợ giúp khác nhau để bạn có thể viết mã xem dễ dàng hơn, và 1 trong những chức năng trợ giúp hoặc mô-đun trợ giúp được xung quanh văn bản hình thức. Đối với văn bản hình thức, tôi không thực sự phải trực tiếp viết bất kỳ HTML bản thân mình. Các bạn đã viết các hình thức HTML. Bạn biết làm thế nào nó có thể được thực sự, thực sự đau đớn và phức tạp để viết các hình thức. Nó không phải vui vẻ, vì vậy may mắn thay, chúng tôi về cơ bản có thể viết một hình thức sử dụng Kohana của hình thành các chức năng trợ giúp để làm điều đó cho chúng ta. Chúng ta sẽ về cơ bản có các lĩnh vực cho mọi điều duy nhất chúng ta có, do đó, một cho các tác giả và một cho các cơ quan. Chúng ta sẽ có một nhãn, và chúng ta sẽ có một đầu vào. Và cuối cùng, chúng ta sẽ có một bài nộp. Và như bạn có thể thấy, đây là sạch hơn nhiều để viết hơn tất cả những gì HTML lộn xộn, đó là loại tốt đẹp. Cấp, có khuôn khổ web khác có nó thậm chí còn sạch hơn, nhưng ít nhất đây là tốt hơn so với văn bản HTML mình. Tuyệt vời, vì vậy đây là những gì bạn nhìn thấy. Đó là loại lộn xộn, vì vậy tôi sẽ để thêm vào một dòng có để làm cho rằng nhìn một chút đẹp hơn. Vâng, tất nhiên, nó vẫn có vẻ thực sự, thực sự xấu, nhưng chúng tôi chỉ tập trung về các chức năng cho bây giờ và không về thẩm mỹ. Không có thời gian để làm tất cả mọi thứ. Và bạn có thể thấy, chúng ta có một hình thức siêu cơ bản, đó là loại tốt đẹp. Mã này tôi sẽ nói là sạch hơn cố gắng để viết một HTML hình thành chính mình, vì vậy đó là tốt đẹp. Cái gì tiếp theo? Bây giờ chúng ta cần phải làm việc với hành động. Thông thường khi bạn viết các hình thức HTML, bạn phải cho nó, nơi nó sẽ gửi biểu mẫu để. Theo mặc định trong hầu hết các web framework nó trình với cùng URL chính xác, vì vậy điều này là, nếu bạn gửi một yêu cầu get to / blog / mới, nó sẽ hiển thị cho bạn mẫu đơn, nhưng nếu bạn gửi một yêu cầu đến bài / blog / mới với các dữ liệu, nó thực sự nên cố gắng tiết kiệm bài đó và làm điều gì đó với nó. Những gì chúng tôi sẽ làm là về cơ bản tất cả chúng ta phải làm gì để kiểm tra xem đó là một yêu cầu bài hoặc nhận được yêu cầu là để kiểm tra các biến bài bạn có thể thiết lập là gì. Và nếu biến bài được thiết lập, sau đó chúng tôi sẽ cố gắng và tạo ra một bài mới. Một lần nữa, chúng tôi chỉ làm điều này, và tạo ra một bài mới, và chúng tôi đang theo nghĩa đen sẽ thiết lập các lĩnh vực của mình như thế này, và sau đó chúng ta sẽ lưu nó. Và sau đó tôi sẽ chuyển hướng để trang chỉ mục để họ có thể xem danh sách của chúng ta về bài viết một lần nữa. Chúng ta hãy cố gắng đó. Tôi sẽ nói, "Brandon" và sau đó nộp bài, và nếu mọi việc suôn sẻ, như bạn có thể thấy, nó chuyển hướng tôi đến trang chỉ mục, và nếu tôi di chuyển xuống phía dưới, chúng ta có một bài mới được chèn vào. Yay! Vâng, câu hỏi. [Sinh viên] Điều gì nếu bạn đã bước vào một điều chính xác bạn đã nhập trước? Liệu nó kiểm tra để chắc chắn rằng bạn đã không bị trùng lặp nộp cùng? Được mặc định, không có, bởi vì theo mặc định - xin lỗi, câu hỏi là nếu bạn nhập vào các dữ liệu chính xác cùng một trong các hình thức trình đó, nó sẽ cho phép bạn chèn một đối tượng trùng lặp, một bản sao nhập cảnh, về cơ bản? Ngay bây giờ, vâng, nó sẽ cho phép bạn làm điều đó, bởi vì trong cơ sở dữ liệu đó là hoàn toàn hợp lệ để có hàng hoàn toàn trùng lặp, nhưng nếu đó là một mối quan tâm, sau đó bạn có thể thêm kiểm chứng, ví dụ, để đảm bảo rằng nếu điều này là chính xác giống như một cái gì đó đã tồn tại, sau đó nói rằng đó là một đối tượng không hợp lệ, và sau đó bạn thậm chí có thể xác định thông báo lỗi của bạn và nói, "không hợp lệ vì điều này đã tồn tại" hoặc một cái gì đó như thế. Nhưng trong trường hợp này, tôi chỉ có thể tạo ra một cái gì đó trùng lặp. Bây giờ chúng ta hãy cố gắng và thêm một số kiểm chứng thực. Vấn đề này ngay bây giờ là Tôi nghĩa là có thể gửi một bài hoàn toàn trống. Tôi có thể nhấp vào nút này ngay bây giờ, và có chúng tôi đi. Bạn có thể không thực sự nhìn thấy nó, nhưng dòng này thêm ở đây chỉ ra rằng tôi thật sự có một bài viết mới. Nó chỉ có một tác giả trống và một cơ thể trống, và chúng tôi không muốn để cho phép mọi người làm điều đó. Đây là nơi xác nhận có in Tôi có thể đi đến đối tượng mô hình của tôi, và bây giờ tôi có thể thêm một chức năng mới xác định những gì quy tắc xác nhận tôi nên thêm vào mô hình này để đảm bảo rằng nó có giá trị và xác định những gì nó có nghĩa là một bài hợp lệ? Và tôi muốn nói đó chỉ là một bài hợp lệ nếu cả tác giả và cơ thể không trống, và đây là cách bạn làm điều đó trong Kohana. Bạn tạo ra một chức năng mới được gọi là "Nội quy" và sau đó về cơ bản bạn trả lại một mảng kết hợp định nghĩa các quy tắc xác nhận cho đối tượng này. Chúng ta sẽ quay trở lại mảng, và sau đó những gì chúng ta sẽ làm là nói "tác giả", nó đi vào một mảng, đó đi vào một mảng được gọi là "không có sản phẩm nào." Và sau đó tôi sẽ nói "thể xác". Được rồi, và cú pháp cho việc này và cơ cấu này có thể nhìn một chút rườm rà và phức tạp một chút. Nếu bạn đọc những tài liệu hướng dẫn, nó khá đơn giản để tìm ra, Nhưng về cơ bản đây là những gì bạn cần làm để xác định một số quy tắc xác nhận, và có rất nhiều quy tắc khác nhau rằng Kohana sẽ cung cấp cho bạn miễn phí, như bạn có thể thêm các quy tắc để nói nó phải được ít nhất là chiều dài này. Có lẽ nó phải là số. Có lẽ nó phải được số alpha. Có lẽ nó đã được nhiều nhất là chiều dài này, vv và vv. Có rất nhiều quy tắc khác nhau mà Kohana cung cấp cho bạn, và bạn có thể đi trên trang web của họ, xem xét các tài liệu, và bạn có thể thấy tất cả những điều khác nhau mà bạn có thể làm. Nhưng điều này là tất cả tôi phải làm, và bây giờ chúng ta hãy xem những gì xảy ra nếu tôi gửi một bài trống. Điều gì sẽ xảy ra? Ồ, không, tôi nhận được một lỗi. Tôi nhận được một ngoại lệ xác nhận. Vâng, đó là tốt. Nó nói với tôi rằng mô hình của tôi là không hợp lệ, nhưng tôi không muốn hiển thị một ngoại lệ cho người sử dụng của tôi khi họ cố gắng để gửi một cái gì đó không hợp lệ, phải không? Tôi muốn cung cấp cho họ một số loại thông báo lỗi thân thiện khi gặp khó khăn. Những gì chúng ta sẽ làm là chúng ta sẽ bọc tất cả mọi thứ trong một vòng lặp cố gắng nắm bắt. Trên thực tế, tôi nghĩ rằng đây cũng là một cái gì đó bạn không biết được chưa trong CS50, bởi vì C, ngôn ngữ lập trình C, không có trường hợp ngoại lệ, nhưng hầu hết các ngôn ngữ khác duy nhất có trường hợp ngoại lệ, như vậy thực sự, thực sự một thời gian ngắn, một ngoại lệ là cái gì đó một đoạn mã có thể ném một ngoại lệ khi họ gặp khó khăn, nhưng sau đó có thể một số phần khác của mã cao hơn có thể bắt ngoại lệ đó và làm điều gì đó với nó. Ví dụ, trong trường hợp này, các đoạn mã đó là cố gắng để tiết kiệm một mô hình, nó xác nhận các mô hình, và nếu nó nói, "Được rồi, mô hình này là không hợp lệ" nó sẽ ném một ngoại lệ, và đây là loại tương đương trong C, bạn có thể trả về một -1 hoặc một cái gì đó như thế. Và sau đó đối với tôi, chức năng này, mã của tôi ở một mức độ cao hơn, tôi có thể thử và bắt ngoại lệ và về cơ bản nói, "Được rồi, nếu tôi bắt ngoại lệ, những gì tôi sẽ làm gì?" Hoặc tôi có thể chọn không bắt ngoại lệ và cho phép một người nào đó cao hơn bắt các ngoại lệ, hoặc nếu không có ai bắt nó, sau đó toàn bộ chương trình bị treo và nói: "Một cái gì đó đã đi sai, và tôi không thể xử lý nó." Nhưng những gì chúng tôi làm là bạn quấn một đoạn mã trong một khối thử, và sau đó bạn cũng có thêm một cái gì đó gọi là một khối catch, đó là loại mã mà sẽ cố gắng và bắt ngoại lệ có thể xảy ra. Và do đó, nếu tôi bắt ngoại lệ đặc biệt này hoặc huỷ bỏ hiệu lực ngoại lệ, sau đó những gì tôi sẽ làm là Tôi sẽ thiết lập lỗi - Tôi nghĩ rằng đó là cách tôi làm điều đó - và tôi sẽ thiết lập các lỗi cho một số đối tượng. Và sau đó những gì tôi sẽ làm là nếu nó chạm ngoại lệ này, nó sẽ không để chuyển hướng, và nếu nó không chuyển hướng, nó sẽ đi ra khỏi nếu blog và nhấn blog này / mới, được muốn tôi muốn làm. Nếu có một lỗi, sau đó tôi muốn quay trở lại với hình thức và hiển thị những sai sót. Bây giờ những gì tôi muốn làm là tôi muốn vượt qua trong những lỗi để xem. Được rồi, tôi nghĩ rằng tôi có quan điểm ngay tại đây, và về cơ bản tôi muốn để hiển thị các lỗi nếu chúng tồn tại. Trước khi tôi viết HTML cho rằng, tôi sẽ thực sự nhanh chóng bạn thấy những gì cấu trúc của lỗi này trông biến thích, và điều này là một thực hành tốt nói chung. Rất nhiều lần bạn sẽ có được một cái gì đó trở lại từ một số phương pháp, một số chức năng trong khuôn khổ web, và bạn không biết những gì các biến như thế nào, do đó bạn không biết làm thế nào để làm việc với nó. Tôi sẽ sử dụng một phương pháp in r cơ bản in ra. Và như bạn thấy, nó nói với tôi nó là một mảng liên kết, và bạn có một chìa khóa, tác giả, điểm chuỗi này, tác giả không phải là trống rỗng, và quan trọng khác, cơ thể, điểm khác chuỗi, cơ thể không phải là sản phẩm nào. Tôi như, sao, mát mẻ. Sau đó, tôi có thể lặp qua mảng và in ra tất cả các tin nhắn đơn. Đó là cơ bản giống như một mảng kết hợp với một loạt các tin nhắn. Những gì tôi sẽ làm là "nếu lỗi" và tôi sẽ tạo ra một danh sách không có thứ tự, và tôi sẽ để lặp qua tất cả các lỗi. Và điều này, và bây giờ tôi sẽ cố gắng trình này một lần nữa, và chúng ta hãy xem những gì chúng tôi nhận được. Bây giờ chúng ta có được danh sách này tốt đẹp của lỗi, và điều này vẫn còn khá xấu xí, nhưng điều này rõ ràng có thể được định dạng để nhìn đẹp, nhưng ý tưởng cơ bản là chỉ trong một vài dòng mã, chúng tôi có thể xác nhận mô hình của chúng tôi, đảm bảo rằng các lĩnh vực nhất định là không có sản phẩm nào, và nếu một cái gì đó đã đi sai, sau đó trở lại một số loại thông báo lỗi Sau đó tôi có thể trình bày lại cho người sử dụng. Bạn cũng có thể tùy chỉnh xác nhận của bạn để bạn thực sự có thể có một thông báo lỗi đó là cụ thể hơn để ứng dụng của bạn hoặc một cái gì đó như thế. Tất cả những gì nói chung là tùy chỉnh. Thật không may, chúng tôi đang sắp hết thời gian, vì vậy tôi sẽ phải cắt đứt các phiên mã hóa trực tiếp ở đây. Có một loạt các tính năng khác mà tôi muốn chứng minh cho bạn trong ví dụ này. Ví dụ, bạn có thể thêm các mẫu để trang web của bạn, như vậy có lẽ có một số loại mã HTML mà bạn muốn áp dụng để mỗi trang duy nhất trong trang web của bạn, và thay vì dán mà trong mỗi tập tin hình duy nhất bạn có, mà rõ ràng sẽ là một thực tế xấu, về cơ bản bạn có thể xác định các mẫu này, và sau đó trong bộ điều khiển của bạn nói, "Được rồi, tôi đang sử dụng mẫu này." "Có tất cả các quan điểm của tôi sử dụng mẫu này." Và một điều cuối cùng tôi muốn chứng minh cho bạn là tốt rằng chúng ta không có thời gian cho là cross-site scripting, và về cơ bản tôi nghĩ các bạn có thể nhìn thấy trong CS50 - Tôi nghĩ rằng David Malan có thể nói chuyện về cách bạn thường có thể tiêm Mã JavaScript vào - có bạn nói về điều này? Có thể? Có thể không? Nhưng rất nhiều lần bạn có thể đưa mã JavaScript độc hại vào cơ sở dữ liệu của một ai đó, và nếu họ không thoát khỏi điều đó đúng, sau đó khi họ trình bày dữ liệu lại cho rằng người sử dụng, sau đó nó có thể chạy một số loại mã JavaScript ngẫu nhiên bạn không muốn xảy ra, và tôi sẽ chứng minh làm thế nào bạn muốn làm điều đó trong Kohana. Nó thực sự thực sự, thực sự dễ dàng. Tôi có thể làm điều đó ngay bây giờ trong 2 giây theo nghĩa đen. Tất cả bạn phải làm là về cơ bản bọc những điều này trong điều này được gọi là các thực thể HTML. Và điều đó sẽ tự động thoát khỏi tất cả các ký tự đúng và chắc chắn rằng bạn không nhận được vấn đề này. [Sinh viên] Bạn viết thử nghiệm đầu tiên không chính xác. [Brandon Liu] Oh, oops. Được rồi, đó là tất cả tôi đã chia sẻ với bạn ngày hôm nay. Các slide sẽ được đăng, nhưng đây là những thường các nguồn tài nguyên duy nhất mà bạn thực sự nên cần phải bắt đầu với Kohana. Bạn có thể vào trang web. Họ có một hướng dẫn sử dụng, và họ cũng có một nhà thám hiểm API. Chúng ta có thể khám phá tất cả các chức năng khác nhau và chức năng trợ giúp mà họ dành cho bạn. Họ thường có đầy đủ thông tin trên trang web mà bạn có thể sử dụng để bắt đầu và có được đi với Kohana. Hiện có không có nhiều hướng dẫn, tôi nghĩ rằng, cho Kohana, bên ngoài những gì họ có trên trang web ở đây, vì vậy điều này có lẽ là đặt cược tốt nhất của bạn. Nhưng nếu bạn muốn đi với khuôn khổ web và bạn không muốn phải nhận một ngôn ngữ mới, và bạn muốn cái gì đó là tương đối nhẹ và có một đường cong học tập dễ dàng, Tôi chắc chắn sẽ đề nghị Kohana. Đó có thể là cung cấp tốt nhất cho điều đó. Điều buồn cười, mặc dù, là nếu chúng ta đang sử dụng Ruby on Rails, chúng ta có thể nhân rộng những gì chúng ta chỉ cần làm và có lẽ trong dưới 3 phút. Không phải trò đùa, nhưng học Ruby on Rails mất lâu hơn rất nhiều hơn nó sẽ làm để tìm hiểu Kohana. Đó là cơ bản sự lựa chọn của bạn về những gì bạn muốn chọn để tìm hiểu, nhưng nếu bạn muốn nhận được và chạy một cách nhanh chóng, Kohana chắc chắn là một lựa chọn rất tốt. Bất kỳ câu hỏi cuối cùng trước khi chúng tôi kết thúc? Vâng. [Sinh viên] Làm thế nào chúng tôi sẽ tích hợp mà trong một khuôn khổ CSS như bạn đang sử dụng khi bạn đã được hướng dẫn? Câu hỏi đặt ra là làm thế nào chúng tôi sẽ tích hợp điều đó với một khuôn khổ CSS? Những gì chúng ta có lẽ sẽ làm là chúng ta có thể sẽ bao gồm một thư mục mới, nơi chúng tôi sẽ đổ tất cả các tập tin CSS của chúng tôi, và sau đó chúng tôi cũng muốn thêm một mẫu mới. Trong các mẫu chúng tôi bao gồm các tập tin CSS để đảm bảo rằng họ đang được giới thiệu trên mỗi trang duy nhất, và sau đó khi bạn thực sự đang viết HTML, bạn chỉ cần thêm các lớp học và những thứ linh tinh thích hợp, và ví dụ, khi bạn đang sử dụng một cái gì đó giống như hình thức chức năng trợ giúp, bạn có thể thêm các thông số hơn sau đó để xác định những gì các lớp học bạn muốn được gắn liền với những điều khác nhau để họ có thể phong cách nó đúng, và đó là cơ bản làm thế nào bạn sẽ đi. Bất kỳ câu hỏi khác? Tuyệt vời. Cảm ơn bạn đã dành thời gian của bạn, và cảm ơn các bạn đã đến. Tôi sẽ không để thêm rất nhiều người khác, nhưng 1 điều thực sự nhanh chóng là chúng ta không có một liên kết mẫu. Thực sự câm. Chúng ta hãy thêm một - thực sự trong quan điểm, blog, chỉ số, chúng ta hãy thực sự nhanh chóng thêm một liên kết mà đi đến trang mới, trang mà chúng ta có thể chèn một bài mới. Chúng ta sẽ làm điều này. Những gì tốt đẹp là có nhóm này toàn bộ các chức năng trợ giúp HTML mà làm những việc khác nhau cho bạn, vì vậy bạn đã thấy các thực thể hoạt động ở đây, nhưng họ cũng có một chức năng được gọi là "neo" mà bạn có thể gõ vào blog / mới và nói, "Đăng một blog mới." Và nó sẽ tạo ra rằng liên kết cho bạn, và điều này dường như thực sự tầm thường để làm, nhưng điều này là tốt đẹp, vì giả sử rằng bạn đang di chuyển trang web của bạn từ 1 tên miền khác. Và nếu bạn chỉ cần viết ra các URL chính mình, sau đó bạn sẽ phải thay đổi tất cả các URL. Hoặc có thể bạn di chuyển nó từ 1 thư mục con để thư mục con khác. Bạn sẽ phải thay đổi tất cả các URL chính mình, và đó là không có niềm vui. Bạn có thể sử dụng neo này ngay tại đây, và bạn có thể thay đổi tên miền hoặc tiền tố thư mục con trong file cấu hình một lần, và sau đó nó sẽ được áp dụng ở khắp mọi nơi, và điều này là, một lần nữa, một ví dụ tuyệt vời của không lặp lại chính mình, làm khô mã của bạn ra. Bất cứ nơi nào bạn đang lặp lại chính mình, cố gắng và trích xuất trong một số loại tập tin cấu hình hoặc đến một chức năng khác nhau và có nó xử lý đó cho bạn. Và điều cuối cùng mà tôi muốn cho các bạn là giả sử chúng ta đang trở lại tại bài viết này, và tôi đã sáng tác một số bài luận thực sự lâu dài, nhưng tôi quên bao gồm tác giả của tôi. Bây giờ khi tôi nhấp vào "Gửi bài viết" Tôi chỉ mất tất cả mọi thứ. Không! Thực sự buồn. Vậy làm thế nào để bạn đối phó với điều đó? Đây là những gì chúng tôi làm. Những gì chúng tôi làm là ở đây cho các chức năng đầu vào và vùng văn bản, nếu chúng ta bao gồm một tham số thứ hai, thì giá trị của tham số thứ hai là là có được những gì lĩnh vực này sẽ được ban đầu dân cư với. Những gì chúng ta có thể làm là trong điều khiển blog của chúng tôi, chúng ta có thể ràng buộc một biến khác. Gọi nó là "giá trị" có thể. Và vượt qua trong mảng bài, theo nghĩa đen. Điều đó có nghĩa rằng nếu xác nhận không thành, vượt qua để tôi viết mảng mà tôi gửi từ yêu cầu cuối cùng, và cách mà tôi có thể sử dụng các giá trị từ trình cuối cùng của tôi để phục hồi lại các lĩnh vực. Bây giờ tôi có thể làm một cái gì đó như giá trị tác giả và các giá trị cơ thể, và cách mà bây giờ nếu tôi làm một số công cụ ngẫu nhiên và nhấn "Gửi bài viết", sau đó nó vẫn ở đó. Nhưng chúng ta sẽ chạy vào một vấn đề khác. Điều đó làm việc, nhưng nếu tôi đi đến trang lần đầu tiên, nó sẽ sụp đổ, và đó là bởi vì lần đầu tiên chúng tôi đi đến trang, biến bài viết này chưa được xác định được nêu ra. Nó là vô giá trị. Nó không tồn tại. Và những gì chúng tôi muốn nói là nếu phím này tồn tại, sau đó trả về giá trị của mảng này, nhưng nếu phím không tồn tại, sau đó trả về một chuỗi trống. Đó là chức năng chúng tôi muốn ở đây. Chúng tôi muốn kiểm tra xem phím tồn tại trước khi cố gắng truy cập mảng, và may mắn thay đủ, Kohana cũng cho chúng ta một chức năng trợ giúp cho điều đó. Họ có toàn bộ phần mềm này các chức năng dưới tên ARR, viết tắt của mảng, và họ có 1 chức năng được gọi là "có" và bạn có thể vượt qua trong mảng, và bạn có thể vượt qua trong tên của khóa. Sau đó, về cơ bản những gì nó sẽ làm là nó sẽ cố gắng để có được chìa khóa, nhưng quan trọng đó không tồn tại trong mảng, sau đó nó sẽ trở lại để trống, hoặc chúng ta cũng có thể chỉ định một mặc định, tôi tin rằng, đó là tốt đẹp. Bây giờ nếu chúng ta làm điều tương tự một lần nữa, sau đó bạn nhìn thấy bây giờ nó hoạt động lần đầu tiên, và một lần nữa, nếu chúng ta gõ vào một số công cụ ngẫu nhiên và cố gắng gửi, sau đó nó vẫn ở đó. Và tôi đoán tôi cũng có thể chỉ cho bạn cách để thêm một mẫu thực sự nhanh chóng. Những gì chúng ta có thể làm đầu tiên là chúng ta có thể thêm một cái nhìn mới gọi là "template.php" trong thư mục Views, và những gì tôi sẽ làm là tôi sẽ in ra một cái gì đó gọi là "nội dung" mà là có được nội dung chính của tôi. Và có thể ở rất dưới cùng tôi sẽ thêm, nói, bản quyền. [Câu hỏi sinh viên không nghe được] [Brandon Liu] Có lẽ đây là một mẫu siêu cơ bản tôi muốn sử dụng. Tôi muốn có một thư mục với quyền tác giả của tôi trên mỗi trang duy nhất, và bây giờ những gì tôi sẽ làm trong điều khiển của tôi bây giờ là thay vì nói, "mở rộng điều khiển" Tôi sẽ nói, "mở rộng Controller_Template" và bây giờ thay vì nói, "cơ thể phản ứng bằng quan điểm này," Tôi sẽ nói, "nội dung mẫu này là -" và tôi nghĩ rằng - để tôi đặt một dấu bằng? Tôi quên. Vâng, tôi nghĩ vậy. Và bây giờ tôi thiết rằng biến nội dung tương đương với xem. Tôi có thể làm như vậy ở đây. Và bây giờ nếu tôi làm mới, bạn có thể nhìn thấy bây giờ bản quyền này được thêm vào đó, và chỉ cần thực hiện một số bài ngẫu nhiên, và sau đó, một lần nữa, bạn sẽ thấy rằng bản quyền là ở dưới cùng của trang. Đại. Đó là tất cả tôi muốn cho các bạn thấy. [Vỗ tay] Bất kỳ câu hỏi? [CS50.TV]