[MÜZİK OYUN] ERIC Ouyang: Hey, herkes. Hoşgeldiniz. Bu Bina Dinamik olduğunu Web Laravel ile Uygulamalar. Benim adım Eric Ouyang olduğunu. Ben sosyal çalışmalar okuyan bir ikinci sınıf öğrencisi değilim bilgisayar bilimi sekonder, ve ben Adams yaşamak Burada Harvard Evi. Peki Laravel, en özünde, MVC web uygulaması çerçevedir. Yani siz ne gibi CS50 Maliye ile yapıyor, Laravel izin veren bir çerçeve Eğer dinamik web uygulamaları inşa etmek. Yani bazı anlamda düşünmek olabilir malzeme tipi için bir uzantısı olarak Eğer CS50 yapıyor oldum Maliye, ama var bir sistem çok daha sağlam, çok Bazı duyu daha şık, ve bir sürü sağlar Sizin için işlevsellik oldukça karmaşık inşa etmek web uygulamaları. Yani bazı yoluyla gidelim temel özellikleri, ve sonra bir dalmak Bir blog oluşturma örneği Laravel ile uygulama. Ilk şeylerden Yani bir o çalışma MVC Çeşidi ayırdeden Eğer CS50 ile yapıyorum ki Bir ORM motoru içerir olduğunu. Böylece orm nesne anlamına gelmektedir ilişkisel haritalama. Yani bu oluşturmanızı sağlar soyutlama katmanı veritabanı arasında ve denetleyicileri. CS50 Finans nerede Yani aksine doğrudan, sorguları yapmak ORM katmanı yapmanıza olanak sağlar soyut uzakta ve oluşturmak daha güçlü modeller SQL sorguları ile doğrudan yapabilirsiniz. Gerçekten başka bir şey yararlı kalıtsal şablonları. Yani CS50 Finans fark edeceksiniz, Eğer bir çok şey yeniden sonuna kadar, yerleştirir nerede potansiyel olabilir Eğer mümkün değil, şeyleri yeniden. Yani burada Laravel içinde, sen ne kullanabilirsiniz bıçak şablon motoru olarak bilinen Bir ana düzen oluşturmak için. Ve oradan, sen devralabilir böylece alt şablonlar aslında can içinde öğeleri içerir Daha büyük taban şablonuna söyledi. Göç. Yani bu konuda oldukça standart özellikler olduğunu en modern web uygulama çerçeveleri. Yani bu temsil sağlar kod veritabanı şema değişiklikleri. Yani demek gitmeden, phpMyAdmin, aslında bu göçler oluşturabilirsiniz veritabanını temsil etmektedir şema doğrudan kod değişir. Ve bu özellikle aşağıdaki amaçlara veriyor Eğer çalışma birden fazla kişi varsa Aynı web application-- üzerinde Bu değişiklikleri izlemek, GitHub, ya da başka bir depoda söylüyorlar. Peki bu gerçekten yararlı ve ihtiyaç azaltır diyelim ki, SQL dökümlerini bir sürü etrafında geçmektedir. Ve nihayet, Besteci Gerçekten, gerçekten yararlı bir şey Bu diğer kullanmanızı sağlar İnsanların kod müthiş şeyler yapmak. Yani Laravel en olarak yapılandırılmış Birkaç besteci paketleri. Yani getirmek istedim ki bir doğrulama paketine veya bazı getirmek istedim jeneratör komut dosyası veya bir yönetici tür arabirimi, tak ve çalıştır olabilir Composer ile bu bileşenler. Yani başlayalım. Sizden herhangi bir sorunuz biz önce çocuklar Başlamak? Hiçbir soru? Serin. Bu yüzden ilk adım Besteci yükleme. Yani Besteci yapmanıza olanak sağlar Bu bağımlılıkları yönetmek, bu Laravel çerçeve olsun veya diğer bazı üçüncü taraf uzantısı. İlk komut veriyor Eğer, Composer indirmek için ve ikinci komut yapmanızı sağlar Yerel bin klasörüne taşıyın böylece Besteci çalıştırabilirsiniz doğrudan terminal üzerinden. Bundan sonra, go ahead ve Yeni Laravel projesi oluşturun. Biz aslında gidiyoruz bazı örnek kod kullanmak Ben araya ettik Bu blog oluşturmak için. Ama başlayarak eğer çizik, bu komutu kullanmalısınız Burada, besteci oluşturmak-proje, Laravel sonra Laravel slash, ve senin projenin adı. Ve bu içerecektir Tüm dağıtım kodu Yeni Laravel proje başlangıç ​​için. Senin CS50 son projeler için Yani, olacak muhtemelen bu komutu kullanmak istiyorum. Ama biz bu ile başlamak için gidiyoruz. Yani yaptığın kez , sen almak için gidiyoruz oldukça geniş bir sayı blog50 dosyaların. Yani sadece üzerinden gidelim Bu bileşenlerden bazıları. Bu rota de fark edeceksiniz Dizin, bir uygulama klasörü vardır. App klasörünün içinde, orada Bir kaç yardımcı klasörler. Ile başlayan notun Bu yapılandırma klasörü olduğunu. Yani bu kadar nasıl ayarlar Web uygulaması , diyelim ki, insanlar kimlik gidiyor ya Nakit şeyler ya da veritabanına bağlanmak. Ve gerçekten var faydalı olduğunu Laravel yukarı farklı ayarlamanıza olanak verir geliştirme ortamları. Peki burada yaptık durumunda olduğunu yerel klasör altında gidin, Bir DatabaseFunctions.php dosyası var. Ve burada fark edeceksiniz ki MySQL bağlantısı olduğu kurmak bireyler bağlamak olanak sağlar bu MySQL sunucusuna doğrudan CS50 cihaz üzerinde. Ve biz bir veritabanına bağlanırken ediyoruz Ben kurmak olduğunu Blog50 denir. Yani aslında öncesinde gidelim ve Bu çalışma sürümünü çalıştırın sadece ne bir fikir edinmek için Biz inşa ediyoruz uygulama gibi görünüyor. Yani bir kopyası var Bu Blog50 tamamladı. Yani Laravel aslında Bir sunucu inşa etti doğrudan çalıştırabilirsiniz Komut satırından. Yani bu benzer PSET size aslında önce C kendi sunucusu kurmak Yani öylesine bir inşa var Eğer Laravel uygulamaları çalıştırabilirsiniz doğrudan komut satırından. Biz php esnaf yaparsak Peki, bu hizmet Bir gelişme sunucusu başlatacak port 8.000 üzerinde. Yerel konağa gitmek Yani eğer 8.000, hey, fark edeceksiniz. Biz blog ve çalışan var. Yani Laravel burada oluşturuyor Bizim blogun ön sayfa. Çok basit bir uygulama. Ama bir çift var Gerçekten şık özellikler bu başlık altında sağladığı. Yani blog uygulaması en basit. Bir yazı oluşturmak istedim, biz bu butona tıklayarak yapabilirsiniz. Biz, "Hey, herkes söyleyebiliriz. Bu gerçekten eğlenceli Örneğin seminer, ". Ve buraya bir şeyler yazmak. Burada Metin. Biz Gönder'i tıklayın ederseniz, olacak fark bizim yeni blog mesaja eklendi blogun ön sayfa. Biz buraya giderseniz, o fark edeceksiniz zaten bazı yorumlar olmuştur blogda. Biz aşağı kaydırma eğer, sen olacak Yani Jonathan Tan diyor ki fark O çok bu yazı ile ilgisini olduğunu. Peki biz nasıl nesne içine gidersiniz ilişkisel eşleme veriyor Eğer bu ilişkileri yapmak yanı sıra oldukça sorunsuz bir yol. Serin. Işlevselliği hakkında herhangi bir sorunuz biz inşa edeceğiz ne? Serin. Yani aslında ile başlayalım Veritabanı tablo oluşturma. Peki, CS50 Finans hatırlamak kullanıcılar için bir tablo araya yanı sıra portföy hisse senetleri. Daha önce de belirttiğim gibi, ne Laravel kullanmak göçler olarak bilinen bir şeydir. Biz geri gitmek Yani eğer Burada dağıtım kodu, ilk komutu Laravel size sağladığı yararlı Bu geçirmek komut. Bu yüzden php esnaf migrate yapabilirsiniz: olun. Yani bu bize bir göç oluşturmanıza olanak sağlar. Ve sonra biz isteyeceksiniz Bir göç oluşturmak için , create_posts_table denilen hangi gidiyor olmak üzere nereye gidiyoruz blog mesajları saklamak olacak. Ve bunu çalıştırır burada fark edeceksiniz Bazı kod aracılığıyla aslında bir dosya oluşturur Bunun üzerine bir zaman damgası. Biz gidip Veritabanı bakarsanız Yani Biz Göçler altında fark edeceksiniz o yarattı ki bir Bizim için boş dosya hangi adıyla klişe kodu vardır Biz belirtilen, mesajlar tablo oluşturun. Ve bunun iki işlevi vardır. Yukarı biz ne zaman çalıştırmak istediğiniz ne geçiş veritabanı uygulanır. Ve aşağı biz yapacağız ne Biz göç tersine istediğinizde. Yani burada en başlayalım Bu göç yazma ile. Yani bir yardımcı sınıf var Laravel içinde Şeması çağırdı. Bu yüzden Şema :: oluşturmak çalıştırmak için gidiyoruz. Ve biz oluşturmak için gidiyoruz Bir tablo mesajları çağırdı. Ve burada bir işlevi kullanarak bu geçerlidir. Ve burada içinde, biz aslında gidiyoruz Bizim tablonun içeriğini belirtin. Biz bir kimlik oluşturmak için gidiyoruz, hangi otomatik artan olduğunu. Ayrıca, biz gidiyoruz bir alan oluşturmak için Bizim blog yazısı başlığı temsil eder. Biz de bir alan oluşturmak için gidiyoruz Bizim blog yazısı metnini saklamak için. Ve nihayet, biz gidiyoruz Bazı zaman damgaları depolamak için Bizim sonrası oluşturulduğunda için ve güncellendi zaman. Ve aşağı için, oldukça basit. Bizim yapmak istediğimiz tüm damla biz yarattık tablo. Büyük. Herhangi bir sorunuz? Yani şimdi biz önde gitmek durumunda ve- aslında, yerel ana, Beni daha önce ne vardı silmenize izin. Veritabanları gidin. Ben daha önce ne vardı silmek için gidiyorum. Bu Bırak oluşturmak Yeni bir veritabanı Blog50. Peki şimdi ne büyülü bölüm burada ki doğrudan bu göçler uygulayabilirsiniz Komut satırını kullanarak veritabanına aracı. Bu yüzden php esnaf migrate yaparsanız, hey, fark edeceksiniz. Bu göç tablosu yaratmış, hangi biz biraz bakmak gerekir, ve bu ilk göç uygulandığında. Biz Blog50 bakmak Yani, fark edeceksiniz Bu bizim için iki tablo yarattı. Öncelikle bu göçler tablodur. Bu göz Yani eğer, o fark edeceksiniz Bu tabloyu oldukça basittir. Sadece, hey, söylenir. Biz bu göçü uygulanan ettik. Biz geri gitmek ve mesajların bak. Sen yapısı olduğunu fark edeceksiniz biz onu sormuştu tam olarak ne olduğunu. Biz otomatik artan kimliğine sahip. Biz depolamak için bir dize var başlık ve bir metin alanı muhteviyatının muhafaza edilmesine yönelik. Büyük. Serin. Göçler hakkında herhangi bir sorunuz iş, biz bunları nasıl uygulayabilirsiniz? Hayır mı? Serin. Yani şimdi biz önde gidiyoruz ve aslında bir model oluşturmak. Yani biz bir mesaj model oluşturmak istediğiniz veritabanının bir soyutlama saklar. Yani oldukça MySQL sorguları yaparken daha doğrudan, biz oluşturmak için gidiyoruz. Yani biz bir oluşturmak zorunda Burada adlandırılan modellerde klasör. Ve burada içinde biz gidiyoruz post.php adında bir dosya oluşturun. Bu PHP dosyası içinde, Biz oluşturmak için gidiyoruz beliğ genişleten bir sınıf sonrası. Etkili ORM adıdır Laravel sağlar motoru. Ve burada, biz bekliyoruz olabilir Aslında bazı kod yazmak gerekir. Biz bazı yazmak için gidiyoruz Daha sonra yardımcı fonksiyonlar. Kutunun dışında Fakat, bu zaten olacak veritabanında ne tanımak ve biz, demek, metin erişebilirsiniz Bizim blog yazısı veya başlığı, ve doğrudan olan şeyler oluşturmak olursa olsun hemen hemen hiçbir kod. Yani sihirli bileşenlerinden biri. Ve bu sınıfın bir kez rüzgar daha tam teşekküllü bir, Biz ilgili bilgiler ekleyeceğiz ne bu yorumların nedenle, ilgili oluyor. Ayrıca bir işlev oluşturmak bu yüzden aslında can doğrudan URL olsun Bir blog yazısı sayfasının. Serin. Bu konuda herhangi bir sorunuz? Hayır. Serin. Peki şimdi bizim modeli var bir kez, biz olan bir denetleyicisi oluşturmak istiyor Bu modeller ile arayüz mümkün, ve daha sonra, veri tabanı. Biz bir göz at almak Yani eğer BlogController, sen olacak orada değil ki fark Şu anda burada çok. Orada tüm bir dizin fonksiyonudur O ana sayfa oluşturur, ama bir şey olmadan henüz görüntülemek için. Yani ilk fonksiyonu Biz oluşturmak için gidiyoruz Bizi sağlayan biridir Bir blog yazısı oluşturmak için. Yani biz bir ilan için gidiyoruz newPost denilen yeni bir işlev. Ve burada sadece içinde, biz gidiyoruz Bu sayfanın düzenini ayarlamak için Bir versiyonunu işlemek olmak, Eğer CS50 gelen hatırlayacak olursak, blog.new adlandırılan bu şablonun, hangi Biz biraz oluşturmak için gidiyoruz. Sen sıralı altı burada fark edeceksiniz biz düzen bu değişkeni belirtildi. Ve biz bir göz atın, eğer Görüntüleme klasörde, Bir Düzenleri klasör var olan Bir çok temel HTML dosyası içerir. Ve notun, fark edeceksiniz Bu kabı var Burada içeriği verir ki. Bizim şablon içinde çok ne yapacağız olacak ne oluşturmak olduğunu Bu düzen içinde doğrudan yer değiştirmiş. Yani biz işlemek istiyoruz dedi Bir şablon blog.new denir. Ama Blog içinde, orada henüz bu yeni şablonu. Yani biz bir oluşturmak için gidiyoruz Dosya new.blade.php çağırdı. Bu Laravel söyler Bu PHP dosyası gerekir ile işlenip Bıçak motor şablonu. Yani bu oldukça olduğunu basit dosya. Bu form olacak biz aslında bir blog yazısı ekleyin. Burada büyü Yani miras, hey, yani. Biz belirtmek istiyoruz bölüm, içerik bölümü Burada, burada tarif edilmektedir section vestop tarafından. Peki arasında burada var gidiyor ana düzeni içine ikame edilebilir. Ve biz burada yapmak istediğim şey çok basit bir yeni bir HTML dosyası oluşturun. Sadece hızlı bir başlık ekleyelim. Bir blog yazısı ekleyin. Ve bunun içinde, konum Bir form oluşturmak için gidiyor. Bu form bir eylem sahip oluyor. Ve bu şey olacak Biz daha sonra yerine o, ve biz nasıl göreceğiz yönlendirme burada sığar. Ama biz şimdi için tanımlamak için gidiyoruz Bu rota ile bir URL'ye gider createPost dan. Ve sonra bu oluyor yöntem sonrası için. Burada içinde, biz gidiyoruz iki alan var. Div class = "form-grubu". Biz Bootstrap CSS kütüphanesi kullanıyorsanız nazikçe Twitter sağladığı. Bu yüzden bu iki oluşturmak için gidiyoruz. Yani bu ilk girişi gidiş başlık olmak. Yani input name = "title". Class = "formcontrol". Type = "text". Ben bir yer tutucu = "Başlık" eklemek için gidiyorum. Ve sonra ikinci biridir Bir metin alanı olacak. = "Içerik" olarak adlandırın. Class = "formcontrol". Ve tutucu = "Buraya yazın". Biz oraya gitmek. Son olarak, biz gidiyoruz Hızlı Gönder düğmesini ekleyin. Type = "submit" class = "btn btn-birincil". Yani bunların hepsi vardır Bootstrap özellikleri çok Bu döşenebilir ki olan bir şekilde dışarı kullanıcıya av, yerine çıplak HTML daha. Yani biz burada denetleyicisi tanımladığınız. Biz çok basit bir görünüm tanımladığınız. Ama ne eksik olduğunu Bağ dokusu. Bu noktada Yani Laravel nasıl hiçbir fikrim var biz aslında gidiyoruz Bu denetleyici erişmek. Yani bu bir tanımlanmıştır Dosya routes.php çağırdı. Ve şimdi, biz bir rota var. Hangi biz gitmek olduğunu Bu web sitesi için ev yolu, o işlemek için gidiyor indeks denetleyicisi. Yani burada biz uygulamak yapmamız gerekenler Bizim için yeni bir rota bir yazı oluşturmak için. Bu yüzden bu yöntemi kullanmak belirten, hangi olsun Bir kullanıcı çalıştığında o Bu özellikle page-- olsun sonrası yeni page-- çizgi ne yapacağız denilen denetleyicisi kullanmak olduğunu BlogController okunmamış Mesaja. biz sadece oluşturduğunuz bir. Ve sonra gidiyoruz newPost olarak diğer ad için. Biz başka oluşturmak için gidiyoruz Biraz işlevi. Ama altında burada ne "gibi" tuşuna ne olduğunu içimizdeki yerini alabilir Bizim Blade şablonları. Şimdi Yani, diyelim gerçekten de rotayı söylüyorlar. Yani biz de gidiyoruz Bir denetleyicisi oluşturmak için ki biz bu mesajları oluşturabilirsiniz. Yani eğer sayfa mesaja bir kullanıcı Mesajları biz yapacağız, ne yeni yırtmaç bir denetleyici kullanan kısaca oluşturmak için gidiyoruz createPost de BlogController denir. Ve biz takma gidiyoruz createPost olarak bu. Serin. Herhangi bir sorunuz? Serin. Bu yüzden biz bugüne kadar ne çalışmasına izin. Biz php esnaf yapmak eğer öyleyse, hizmet Biz hataların çok göreceksiniz. Biz var gibi Yani görünüyor yolları üzerinde sözdizimi hatası 27 hat. Ah. Noktalı virgül eksik. Yani biz 8,000 giderseniz, Burada henüz bir şey görürsünüz. Yani bu varsayılan ana sayfası. Ama biz hey, yeni çizgi göndermek için giderseniz. Biz sadece oluşturduğunuz formu olacak. Şu anda, biz var işlevselliği uygulamaya Biz bastığınızda düğmesini gönderin. Biz tıklarsanız Yani Gönder düğmesi, bir hata çalıştırmak için gidiyor. Ama biz kod gidiyoruz Şu anda, tam olarak ne biz zaman kullanıcıyı yapmak istiyorum Bu formu gönderir. Yani bu yapalım. Geri Kontrolörleri dosyaya gidin. Ne yapacağız olduğunu Bu yeni işlevi uygulamak Bu bize bir yazı oluşturmak için olanak sağlar. Yeni bir fonksiyon bildirin. Kamu fonksiyon createPost. Ve bu fonksiyon olacak daha sofistike biraz ne Daha önce vardı. Ama biz değiliz ki burada göreceksiniz Aslında herhangi bir SQL yazacağız. ORM, Etkili ORM, izin gidiyor bize bazı bunu yapmak yolları daha zarif bir şekilde. Yani biz yeni bir yazı oluşturmak için gidiyoruz. Ve burada konum Yeni bir nesne örneğini modelinden biz sadece oluşturulan, sonrası modeli. Ve ne yapacağız ayarlanır Bu kullanarak şey başlık özniteliği Biz sunucudan almak. Yani buna benzer ne Biz CS50 Finans önce vardı Yapmamız nerede, Süper kullanarak Küresel Mesaj başlığı arıyor. Peki Laravel bazı sanitasyon sağlar ve etajer bu yardımcı işlevini kullanarak. Yani biz bu yerine kullanmayı tercih ediyorum PHP bu çok temel ham formu. Ve sonra ne yapacağız ayarlanır Girişine bunun içerik, içeriği olsun. Biz aslında sarmak için gidiyoruz yararlı bir fonksiyonu olarak, bu Bu PHP nl2br adlandırılan temin eden, Yeni hatlar, NLS, BRS içine tatili döner biz aslında olabilir böylece Bunun içinde farklı paragraflar. Ve nihayet biz gidiyoruz ne yapmak için bu yazı kaydetmek olduğunu. Bu yüzden işlevi diyoruz Bu model üzerinde tasarruf. Biz yazı kurtarmak için gidiyoruz. Ve biz yapacağız nihayet ne özellikle kullanıcıyı yönlendirmek olduğunu biz gidiyoruz rota viewPost tarafından, kısa bir süre ad oluşturun. Ve biz argümanları geçmek için gidiyoruz id, bu yeni yazı id olmak. Büyük. Yani şimdi biz aslında gitmek ve bu çalıştırırsanız. Biz yeni bir yazı eklemek için gidiyoruz. Şimdi bu seminer 50 diyelim. Ve tabii, demek. ASDL. Her Neyse. Içerik çeşit. Ve bunu gönderin. Ve biz fark edeceksiniz, hey. yolları tanımlı değil. Ama biz phpMyAdmin bakmak ve eğer olsun veya olmasın, bizim işlevi için bakmak bir şey yaptım. Blog50 mesaj bak. Biz, hey, fark edeceksiniz. Aslında, biz sadece bu blog yarattı belirtilen damgaları ile göndermek. Peki şimdi geri dönmek ve aslında oluşturmanıza izin Bizim denetleyicisi bu diğer işlevi, özellikle viewPost denetleyicisi. Yani public function viewPost. Yani burada biz yapacağız, ne yerine Boş parantez sahip, biz kimliği geçmek isteyeceksiniz Biz yaratıyoruz sonrası. Ve buradan ne yapacağız Aslında bunun için veritabanını sorgulamak olduğunu. Peki sonrası yoksa, adında bir işlev var Bu bize KODU onu sorgulamak için izin verir bulun. Özellikle, aslında, biz gidiyoruz denilen bu alternatif sürümünü kullanın Bize izin verir bul veya Fail, Bu fonksiyon dışı bırakmak, ID eğer bir özel durum Biz yok geçmek. Ve sonra bir şey yapacağız Daha önce yaptığımıza benzer nerede içeriği set Bu sayfanın olmak Bu yeni bakış hale sürümü biz blog.view oluşturmak için gidiyoruz hangi. Ve biz içine geçmek için gidiyoruz bu-- sadece işlemek CS50 severim değişkenlerin bir sözlük function--. Bu ilişkisel dizi anahtarları şablonu içinde değişkenler haline gelir. Bu yüzden sonrası yazı yapmak için gidiyoruz. Yani dolaylı yazı geçmek veritabanından sorgulanan ettik. . Şimdi ne gidiyoruz yapmak bu görünüm oluşturmak olduğunu biz aslında görüntülemek böylece Biz inşa ettik günlüğü gönderileri. Bu yüzden oluşturmak için gidiyoruz Dosya view.blade.php çağırdı. Yani bu şablonun içinde, ne yapacağız Basit bir sayfa araya olduğu Bize içeriği görüntülemek için izin verir. Biz bölümünü yapmak Yani, bu içerik önce var. Dur. Ve ne gidiyoruz Burada içinde yapmaktır Bu sayfayı görüntülemek için bazı HTML yazmak. Yani biz bir fantezi ile sarın gidiyoruz Yeni HTML5 elemanı Madde çağırdı. Ve burada, biz gidiyoruz Bir başlık nerede var biz sadece bir h1 zorunda gidiyoruz, sonrası hangi başlık içerir. Yani burada, biz bu bakarsanız Çift kaşlı ayraç notasyonu, Bu aslında yapacak PHP sonrası başlığı yankı. Yani bir yardımcı kestirme var Laravel bizi sağladığı. Yani biz kullanmak için gidiyoruz Bunun yerine bu gösterim. Ve burada, biz de gidiyoruz Bunun içeriğini yazdırmak. Ve burada, biz gidiyoruz sonrası içeriği yapmak. Ve biz konum ne altındaki aşağı yapacağım bir altbilgi oluşturmak olduğunu. Ve altbilgi, biz gidiyoruz Bu haberi ilk ekran. Yani bu, yayınlanmıştır oluşturuldu. Ve Laravel gerçekten güzel kullanır Tarih kütüphanesi Karbon çağırdı. Yani biz aslında denilen şey yapabilir Daha önce gördüm difforHumans. Biz yayınlanmıştır zaman. o, söyleyeceğim gibi, beş saniye önce. Yani bu gerçekten güzel Laravel işlevselliği. Ve nihayet, biz gidiyoruz Bu altbilgi kapatmak için. Peki şimdi geri dönmek durumunda Ana Sayfa gidiyoruz Burada henüz çünkü hiçbir şey görmek biz ev sayfasını kodlu değil. Ama biz çizgi bir tane göndermek için giderseniz, bir istisna görmek için gidiyoruz. Herkes neden biliyor mu bir istisna görüyor musun? Ne eksik? Herhangi bir fikir? Yani biz ne yaptık ne Daha önce bizim için aslında biz almak nasıl tanımlamak için Belirli kontrolörleri? HOPARLÖR 1: rota? ERIC Ouyang: Evet. Yani biz hala rotayı tanımlamak zorunda. Yani biz routes.php için buraya gidin. O biz fark edeceksiniz Aslında tanımlı değil nasıl almak için gidiyoruz Bu kontrolöre. Yani şimdi biz bu yolu tanımlamak için gidiyoruz. Bu, oldukça basittir Daha önce yaptığımıza benzer. Ama biz burada fark gidiyoruz ne bir yer tutucu olması için gidiyoruz. Biz route.get çizgi sonrası kimliği yapmak eğer öyleyse. Yani kimliği artık gidiyor ne kontrolöre aktarılabilir. Bu kullanmak için gidiyor kontrolör biz sadece oluşturulur, viewPost de BlogController. Ve biz gidiyoruz viewPost olarak ad bu. Büyük. Yani şimdi biz bu rota oluşturmak için gidiyoruz. Şimdi burada biz gitmek durumunda ve bu sayfayı yenileyin, Aslında biz yeni bir blog yazısı var. Yani bu bizim daha önce oluşturduğunuz budur. Çok basit sayfa, ama görüntüler biz sadece oluşturduğunuz blog yazısı. Serin. Ve biz aslında bütün geçmesi durumunda yeni bir blog yazısı oluşturma süreci, Biz her şeyi fark edeceksiniz düzgün yönlendirir. Ben derseniz, "Merhaba. Ben Jonathan Tan değilim. " "Bu benim blog yazısı olduğunu.", Say Ve bunu gönderin, bu yaratacak ID 2 ile bu yeni blog yazısı, Biz ne hangi artışlarla Daha önce ve düzgün görüntüler onu. Korku. Herhangi bir sorunuz? Evet? HOPARLÖR 2: Laravel kolu mu sanitization ve sizin için her şeyi? ERIC Ouyang: Evet. Bu yüzden daha önce ne gördüm biz girdi kolon kolon aldın herhangi bir SQL sanitates enjeksiyonlar ve etajer Biz eğer gerçekleştirmek isteyebilirsiniz Web sitesinde bir kötü niyetli kullanıcı konum. Yani Laravel çok kolları perde arkasında bunun. İyi bir soru. Yani ana sayfasında bir göz atalım. Ilk geri dönmek Yani eğer ana sayfa kontrolör, bunu fark edeceksiniz çok burada yapmaz. Biz değiliz fark edeceksiniz Bu kontrolör içine geçen şey özellikle yararlı. Sadece bu indeks dosyası var. Yani içine geçmesine izin bu şey. Ve özel olarak ise, we ' mesaj geçmek olacak. Ve Laravel bize izin verir Tüm yazı yapmak için hangi Bizi tüm mesajları almak için izin verecektir. Şimdi biz geri giderseniz index.php, hey, göreceksiniz. Hiçbir şey burada henüz. Ama biz istediğimiz burada yapılacak aslında yineleyemezsiniz, mesajlar üzerine bir foreach döngüsü yapmak Bize mesajları yazdırmak için izin verir. Peki, foreach mesajlar olarak Yapmak istediğimiz şey sonrası, içeriği yazdırmak olduğunu blog yazısı. Ama fark edeceksiniz bir şey olduğunu biz aslında bu kod çoğu yazdı Zaten, view.blade.php içinde. Yani biz aslında yapacağız ne Blade güzel yararlı özelliği kullanmak ve bu ortak kodunu faktör. Yani burada biz gitmek. Bu içeriği almak için gidiyoruz Burada, ve biz yapmak için gidiyoruz ne Yeni bir klasör oluşturmak olduğunu. Sadece Partials diyelim. Ve burada, biz gidiyoruz Bir post.blade.php oluşturmak için. Yani burada, biz yolu çarpanlarına hangi bu mesajları görüntülemek istiyorum. Ve biz burada yerine ne yapacağız aslında doğrudan bu HTML sahip, Bu yönergeyi kullanmak için gidiyoruz adı blog.partials.post içerir. Ve biz burada yapacağız ne Sayfanın sonrası geçmesi olduğunu. Yani şimdi biz buraya giderseniz, biz olacak işlevselliği hala olduğunu fark Aynı. Ama şimdi bu var Bu HTML kodunu çarpanlarına. Bu yüzden Endeksi'nde kullanabilirsiniz. Yani burada, bu çok basittir. Yaptığımız tüm dahil olduğunu blog.partials.post ve dizi. Ve bir yere önce, biz sonrası yazı yapmak. Peki şimdi geri dönmek durumunda ana sayfa, biz, hey, göreceksiniz. Hepimiz bir listesi var Daha önce vardı günlüğü gönderileri. Biz bazı "eğer" eklemek isteyebilirsiniz koşulları ve "başka" koşullar bu yüzden yoksa o blog şey, Biz yardımcı bir şey göstermek istiyorum. Hey, gibi. Blogda henüz hiçbir içerik yok. Ve siz aslında bakarsanız GitHub dağıtım kodu, Eğer biz bunu nasıl bir örnek göreceksiniz. Serin. Herhangi bir sorunuz? Evet. HOPARLÖR 2: Ben sadece tahmin temel bir soru. Geri güzergahında. ERIC Ouyang: Evet. Biz yolları bir göz atacak olursak. HOPARLÖR 2: nerede uses.blogcontroller de, yazı oluşturmak Bu bize ne doğrudan geliyor? ERIC Ouyang: Evet. Evet. HOPARLÖR 2: Ya ne ki- olduğunu ERIC Ouyang: Yani, demek, bir göz atın Örneğin, burada bu rota. İlk bölüm, gerçek olan Kullanıcı gidecek URL. Ve burada bu dizi, ilişkisel dizi, tanımlar biz istiyorum nasıl buna karşılık olarak uygulama hareket eder. Yani kullandığı denetleyicisi olduğunu, fonksiyonu biz zaman aramak istediğiniz Kullanıcı bu URL'ye gider. Yani viewPost burada bir Biz içinde tanımlı fonksiyonu BlogController-- ve HOPARLÖR 2: Anlıyorum. ERIC Ouyang: Bu biz -SO aslında bir görünüm oluşturabilirsiniz, Bazı hesaplamalar SQL veritabanı ile etkileşim. HOPARLÖR 2: Tamam. Ve sonra diğer: ERIC Ouyang parçası "gibi" Biz kullanmak bir takma addır. Biz ne zaman fark Yani eğer Biz formu yarattı, Eğer bu URL'yi fark edeceksiniz :: routecreatePost. Yani gerçek olarak yerini URL ki biz zor değil Bu kodlama böylece biz onu değiştirebilirsiniz bir kez, biz yeniden adlandırmak istedim söylüyorlar. Yerine sonrası Bölme Yeni, biz, p gibi yapmak istiyorum sadece temizlemek için yeni çizgi Bizim URL biraz yukarı. Biz yerine tek bir noktada bunu değiştirmek istiyorum tüm farklı dosyalar arasında daha. Serin. Bu iyi. Yani şimdi biz çok Temel bir blog platformu. Biz muhtemelen bu yüzden bir düğme eklemek istediğiniz biz aslında yeni mesajları oluşturabilirsiniz. Bir göz atın Yani eğer Düzen Lisans at, Biz Üstbilgi Sağ adlı bir bölüm var Biz sadece en üstünde tanımlanan ettik. Bu yüzden düğmeleri ekleyebilirsiniz başlığının üst. Yani biz aslında, index.blade.php giderseniz yapmak buradan içinde ne gider tanımlamaktır. Yani bu Üstbilgi Sağ bölüm, ne yapacağız gitmek için bir düğme ekleyin olan Rota yeni görevi ile tanımlı URL. Sadece bunu temizlemek ve yapmak oldukça ve tüm Bootstrap, Biz yapmak için gidiyoruz Bu varsayılan düğme. Sadece eğlence için geniş yapalım. Ve bunun içinde, bazı metin koymak olabilir. Ama ne Bootstrap sağlayan glyphicons olduğunu. Yani biz aslında ekleyebilirsiniz Daha önce gördüğümüz güzel kalem. Glyphicon. Glyphicon-kalem. Yani bu bize koymak sağlayacak metin yerine bir simge. Şimdi biz durdurmak yoksa, bu Bu bölümü tanımlayacaktır. Ve, hey. Bizi bağlayan güzel bir düğmesi var doğrudan bir blog yazısı sayfası eklemek. Yüzden oldukça basit bir bloga sahip. Biz buna şeyler ekleyebilirsiniz. Ama biz genelde ne bekliyoruz bloglardan görüş bildirmektedir. Bize sahip Yani, gerçekten önemli Başka birisi bir web sitesi ziyaret ederse, demek ve gerçekten sonrası seviyor onlar tartışmaya meşgul olabilir sayfasını ziyaret diğer insanlarla. Bu yüzden gidip oluşturmak için gidiyoruz bir Yeni bir veritabanı tablosu ve yeni bir model Biz ilişkilendirmek böylece mesajlar yorumluyor. Yani ilk adım, önceki gibi, Biz göç çalıştırmak için ihtiyaç vardır. Eskisi gibi Yani, biz yapmak php esnaf geçirmek: yapmak. Ve biz bir tane oluşturmak için gidiyoruz create_comments_table denir. Bu bir dosya oluşturur Bu yeni göç vardır. Ve biz gibi, gidiyoruz önce, yeni bir tablo tanımlar. Yani Şema :: bir oluşturmak masa yorumlar çağırdı. Buradaki işlev. Ve bu tablo içinde ne Biz ilk yapmak olduğunu gidiyoruz gibi daha önce, bir kimliği atayın. Kimliği artırır. Kullanıcıların ilişkilendirmek için izin gidiyoruz Belirli bir açıklama ile isim. Biz bazı içeriğe sahip gidiyoruz Bu, metin içeriği ile birlikte gider. Ve burada biz gidiyoruz yapmak farklı bir şeydir. Biz bir tamsayı oluşturmak için gidiyoruz Bu post_id denir ki ne yazı belirtmek için gidiyor Belirli bir açıklama ile gider. Ayrıca, biz aslında gidiyoruz Bu bir yabancı anahtar kısıtlamasını ayarlamak. Yani MySQL zorlamak olacaktır. Biz çalışıyoruz değil Yorum numarasını atamak Biz varsa 5 5,000 göndermek için Bunun 5.000 mesajları vardı. Yani biz burada ne, yabancı post_id yapmak ile ilişkili olacak Masa görevlerinden Kimliği alanı. Ve biz aslında bir şey yapacağız Başka yararlı, OnDelete olduğunu. Bazı silerseniz Yani veritabanından sonrası, Biz basamakla istiyorum yanı sıra yorumlar için siler. Çok yararlı değil, çünkü Bize yazılarda yorumlarınız için Bu yoktur. Ve son olarak, daha önce olduğu gibi, biz konum Bu konuda zaman damgaları ayarlamak olacak. Ve daha önce olduğu gibi, biz gidiyoruz ters göç olmak var Yorumlar tablo bırakarak. Peki şimdi geri giderseniz burada, biz gidiyoruz Bu göç, esnaf migrate çalıştırmak için. Ve şimdi bu uygulandığında biz sadece oluşturduğunuz göç. Biz bir göz at phpMyAdmin Yani Şimdi, aslında, mutlaka olan bir yorum tablo var biz sadece belirtilen yapı. Eskisi gibi Yani, biz konum yeni bir model oluşturmak için gidiyor soyut bir SQL tablosuna biz sadece yarattığı. Yani yeni bir dosya ekleyin verelim. Biz onu comment.php aramak için gidiyoruz. Ve bu aslında oldukça olacak hafif bir değişiklik ile basit Ne biz daha önce vardı. Yani sınıf Yorum Etkili uzanır. Ve ne gidiyoruz tanımlamak olduğu burada yapılacak bir fonksiyon Diğer modelleri ile ilişkisi. Yani biz bir post fonksiyonu için gidiyoruz Burada bu ilişkiyi döndürür. Bu yüzden belirterek ediyoruz Bu sonrasına ait, bir mesaj olduğunu söyleyerek bu yorum aittir. Bu aslında olmak zorunda model için sermaye P. Ve şimdi sadece diğer kapak üzerinde Yan, hey, söylemek zorundayım. Mesajlar yorum var. Peki ne yapacağız olduğunu public function yorumları tanımlar. Ve burada döndürülür Bu çok Yorum sahiptir. Şimdi sihirli bir yazı varken, Biz nitelik yorumları alabilirsiniz ve bunu doldurmak edeceğiz veritabanından bilgi. Yani aslında yoluyla gidelim ve Bizim bakış dosyasına yeni bir özellik eklemek Böylece biz hem ekran ve yorumlar oluşturun. Bu yüzden yeni bir bölüm tanımlamak için gidiyoruz. Sadece ayırmak Let yatay kural ile. Bölüm id = "comments". Ne yapacağız Burada isimli, daha önce olduğu gibi, Tüm yorumlar yineleme. Yani aslında biz bu işi nasıl, Ben de belirtildiği gibi, oldukça büyülü. Biz yorum gönderme yapmak. Ve sonra her biri için bunu yapabilirsiniz Yorumların üzerinden her döngü. Ve biz gidiyoruz yapmak, div class yorumdur ve biz aslında gidiyoruz Bu yorumu çıktı. Yani hey görüntülemek, kişi aşkına-- yorum kim bu comment-- yayınlanmıştır nokta nokta nokta diyor. Biz bir blok içinde bu koymak için gidiyoruz alıntı, sadece güzel görünmesi için. Ve sonra içerik blok teklifi yorum. Ve foreach. Yani şimdi bu döngü gidiyor Tüm yorumlar aracılığıyla Bu ilişkilidir mesajların her biri ve bu yorumların her görüntüler. Ben aşağı başka bir bölüm eklemek için gidiyorum Burada, izin veren bize bir yorum eklemek için. Yani h3 class. Burada bir başlık koyun. Yorum ekleyin. Ve biz yeni bir form tanımlamak için gidiyoruz. Eskisi gibi Yani Biz konum Form eylemi yapacağız. Ve burada, yeni bir eylem biz konum olduğunu Yeni bir denetleyici tanımlamak için gidiyoruz ki Bize yazılan cevap verir Yorum oluşturma istekleri. Yani URL :: rota createComment. Burada parametre geçmek için gidiyorum. Yazının kimlik olduğunu biz yorumunu oluştururken. Bu, daha sonra bir yöntem Form sonrası olacak. Şimdi eklemek için gidiyoruz Bir iki alan, biçim grubu. Bu bir giriş olacak "ismini" ve class = "form denetimi" adı, = "text" ve yazdığınız tutucu = "Adınız." Biz de tanımlamak için gidiyoruz Başka bir form alanı, hangi Bir metin olacak Alan daha önce olduğu gibi. Sadece eskisi gibi, içerik diyoruz. Class = "form denetimi." Yer tutucu = "Burada yazın." Ve sadece bu yüzden aslında sunabilirsiniz, türü ve sınıfı = submit "btn-birincil btn." Formu kapatın. Bu eylemi kapatın. Yani şimdi biz bu sayfayı yenileyin nerede ise biz diyelim, belli bir yazı var. Biz sunucuyu yeniden başlatmak zorunda. PHP esnaf hizmet vermektedir. Bu yeniden başlatın. Biz rotayı tanımlamak zorunda. Ama şimdi, Sadece bu alalım dışarı ki biz aslında size gösterebilirim Ne sayfası gibi görünüyor, ve sonra biz aslında bu rota oluşturmak gerekir. Yani, hey. Biz burada bu yeni formu aşağı var Biz yorum oluşturabilir böylece. Yani aslında bir tanımlayalım kontrolör içindeki işlevi Biz yorum ekleyebilirsiniz böylece. Geri dönelim. Ve blogcontroller.php içinde, ne yapacağız Yeni bir işlev oluşturmak olduğunu açıklama oluşturmak denir. Kamu fonksiyon createComment. Bu bir tek sahip oluyor parametre, mesajların kimliği biz hakkında yorum ediyoruz. Ve benzeri daha önce, biz konum İlk yazı alacaksın. Yani, findOrfail id sonrası. Daha sonra, biz gidiyoruz Yeni bir açıklama oluşturmak için. Yani = Yeni Yorum yorum. Name = Giriş Comment :: adını almak. Yorum içeriği = Aynı yeni hat Girdi tatili içine :: içeriği olsun. Ve nihayet, biz zorunda gidiyoruz yazı ile Yorumu ilişkilendirmek. Yani biz kullanmak için gidiyoruz Bu fonksiyon, yorum, Bu bize kaydetmenize olanak verir Bu ilişki. Yani şimdi bu açıklama olacak otomatik sonrası kimliği. Biz de bunu ayarlayabilirsiniz El, ama bu kadar okumak daha kolay Fonksiyon gider. Ve biz gerçekleştirdikten sonra Bu, biz ne istiyoruz kullanıcıyı yönlendirmek olduğunu Rota viewPost belirtilen ile dizi sonrası kimliği parametresi. Ve şimdi ki bu aslında fonksiyonlar, biz bu yolu tanımlamanız gerekir. Rota :: sonrası. Ve şimdi bu diyeceğiz sonrası kimliği çizgi yorumunu çizgi. Dizi yeni işlevi kullanır biz sadece yarattığı. BlogController. CreateComment olarak createComment. Büyük. Peki şimdi bu sayfayı yenileyin umarım eğer ve bir açıklama, diyelim ki, David Malan eklemek. "Umarım bu çalışır." Gönder. Biz, aslında, bir var Bu blog yazısı hakkında yorum. Serin. Yani şimdi biz oldukça var Fonksiyonel blog yazısı. Biz sadece gidiyoruz bu yüzden bir kaç tweaks ekleyin Biraz daha yararlı olduğunu Bu yazılarda bilgiler. Biz geri dönmek Yani eğer Ön sayfa, biz hiçbir anlamı var kaç yorum vardır Bu mesajların her biri üzerinde. Yani biz aslında gidiyoruz ne yapmak için, bizim model içinde, sağlayan bir yardımcı işlev tanımlamak Bize yorumların sayısını belirtmek için Bu, belirli bir yazı ile gitmek. Yani biz oluşturmak için gidiyoruz bir yardımcı işlev. Kamu işlevi. GetNumCommentsStr. Sayısını belirten Yani bir dize onunla birlikte gitmek yorumların. Ve ne yapacağız demek Bu num = bu yorum sayısı. Yani biz saymak için gidiyoruz Yorumların sayısı. Bu sayı 1 eşitse Ve, biz konum sadece 1 Yorum dönmek için gidiyoruz. Ve sonra, aksi takdirde, biz dönmek istiyorum num ve yorumların birleştirme, bu yüzden çoğulculuk doğru olsun. Sadece bu bir tek tırnak yapmak. Bir Yorum. Ve şimdi biz bu fonksiyonu kullanabilirsiniz doğrudan görüş içinde. Biz geri gitmek Yani eğer Yarattığımız kısmi mesajlar, Şimdi biz aslında istiyoruz yorumların sayısını görüntüler. Bu yüzden ne yapabilirim Mesajı, bu işlevi kullanın biz sadece oluşturduğunuz yorumların sayısını görüntüler. Şimdi, bunu yenilemek Yani eğer Aslında, yok, ekran sayı yorumlar Bu onunla birlikte gitmek. Biz eğer fantezi olmak istedim Aslında dağıtım koduna bakmak, biz aslında bağlayabilirsiniz yorumlarına bu. Eğer hatırlayacak olursak, biz içinde tanımlanan Bu bölümde Kimliği yorum var olduğunu görmek. Yani biz aslında bağlantı istedim Doğrudan yorumlar bölümüne, ne Burada yapmak a href olduğunu ediyorum Rota viewPost URL. Sonrası kimliği dizi kimliği iletin. Ve sonra gitmek istiyorum özellikle yorum bölümünde. İşte en bir etiketi kapatalım. Yani şimdi biz bu yenilemek durumunda sayfa, biz bu tıklatın. Biz doğrudan gidersiniz Yorumlar bölümünde. Biz uzun bir yazı olsaydı, yapabilirsiniz Aslında bu sıçrama aşağı bakın. Ama bu olduğunu fark edeceksiniz değil sayfanın en üstünde. Serin. Büyük. Yani oldukça basittir basit bir şey örneği Eğer Laravel ile yapabilirsiniz. Ama burada dikkat olabilir Biz çok şey yaptık kod oldukça az miktarda. Laravel yapmamızı sağlar Perde arkasında SQL sorguları. Bu sanitasyon yapar perde arkasında bizim için. Bize bu ilişkileri yapmak verir çok kolay bize gerek kalmadan Herhangi bir SQL yapmak için ifadeleri katılmak ne mesajlar yorumları birleştirir. Bize bunu sağlar şablonlar miras bu yüzden bu iç içe tanımlayabilirsiniz Dosyaları yüzden, kendimizi tekrarlamak değil Sadece biz vardı böyle Blog yazılarına ekran biz yok kopyalayıp yapıştırın. Ve buradan inşa edebilirsiniz giderek karmaşık uygulamalar. Hayal eğer biz uygulamak istedim log-in, Biz üçüncü parti getirmek, söyleyebiliriz Bize bunu sağlar çerçeve. Onlardan bir sürü var Bu gerçekten, gerçekten gibi yapabilirsiniz harika, Şifre kurtarma. Ve seni bir göndereceğiz Şifre e-posta sıfırlama. Biz izin uygulayabilirsiniz Ben bir yazı oluşturmak, böylece ama başkası düzenleyemezsiniz. Biz uygulayabilirsiniz işlevselliği mesajları silmek için. Ama biz oldukça var burada görebilirsiniz hemen tüm ilkel bileşenler gerçekten bazı inşa etmek, gerçekten, dinamik ve heyecan verici web uygulamaları. Bununla Yani, biz iyi olduğunu düşünüyorum. Siz herhangi bir sorunuz var mı? Evet? HOPARLÖR 3: Nasıl do you statik içerik olsun? ERIC Ouyang: Statik içerik. Biz ne zaman Yani daha önce gördüm Burada bu hakkı, bu düzen içeriği, görünümü yapmak, biz bu vardı sonradan bu dizi olmadan. Blog.index, bu vardı Sadece statik dosya olarak. Biz geçemiyor Yani buna birlikte bir şey, sadece doğrudan HTML işlemek gerekir. Ama biz bu ilişkisel geçmek durumunda dinamik olan mesajların dizisi, veritabanından çekilen biz sayfa dinamik yapabilirsiniz. Serin. Başka sorunuz var mı? HOPARLÖR 3: Nasıl karşılaştırmak istiyorsunuz Belki bazı diğer seçeneklere Laravel? ERIC Ouyang: Tabii. Evet. Yani Laravel işte bu-- büyük question-- Web çerçeveler için birçok seçenekten birini. Yani Ruby on Rails popüler biridir. Ben Twitter'da olarak kullanılan inanıyorum Ruby on Rails ile uyguladı. Ben onlar beri açık düşünüyorum. FuelPHP denilen bir tane daha var. Peki Ruby on Rails Ruby dilini kullanır ve MVC bir sürü uygular Burada görüyoruz. FuelPHP başka bir PHP çerçevedir. Django benim favorilerimden biridir. Python için bir web çerçevesi var. Yani Python web uygulaması yazabilirsiniz. Peki bu seçenekleri bir ton var. Laravel, sanırım tarafından ve Büyük sevdiğim sağ Hemen PHP için sırf bileşenlerin Daha önce hakkında konuştuk. It Besteci sağladı. Gerçekten, gerçekten içerir ifade orm sistemi. Ayrıca gerçekten harika çiftleşmiş vardır dil başkalarının bazı Sadece vermeyin. Ve göçler. Göçler de müthiş. Serin? Korku. Için Eh, çok teşekkürler Bu seminere izlerken, son projeler üzerinde ve iyi şanslar.