[音楽再生] ERIC欧陽:ねえ、みんな。 ようこそ。 これは、動的に構築されている WebがLaravelでAppsの。 私の名前はエリック·欧陽です。 私は社会科の勉強年生です コンピュータサイエンスの二次的に、 と私はアダムスに住んでいる ここでハーバード大学のハウス。 だから、Laravel、その最も中核に、 MVC Webアプリケーションフレームワークです。 だから、みんなが持っているもののような CS50ファイナンスでやって、 Laravelは可能にするフレームワークです あなたは、動的なWebアプリケーションを構築する。 だから、ある意味でそれを考えることができます ものの種類の延長として あなたはCS50で行ってきた 財務、しかしだシステム たくさん、たくさんより堅牢 ある意味で、よりエレガントな、 との多くを提供します あなたのための機能 かなり複雑な構築する ウェブアプリケーション。 それでは、いくつか見ていきましょう 主要な機能の、 その後、我々は飛び込むよ ブログを構築する例 Laravelを使用したアプリケーション。 最初のものの1だから、 仕事のMVCタイプからそれを区別する あなたはCS50で行ってきたことを それはORMエンジンを含むです。 だから、ORMは、オブジェクトの略 リレーショナルマッピング。 だから、これはあなたが構築することができます 抽象化の層 データベース間 とあなたのコントローラ。 CS50ファイナンスどこでそうとは異なり、 あなたが直接、クエリを作る ORMレイヤーは、次のことができます 離れてその抽象的と作成 より強力ですモデル あなたは、SQLクエリを直接することができます。 本当にだもう一つは 役立つは継承テンプレートです。 だから、あなたはCS50ファイナンスに気づくでしょう、 あなたは多くのものを書き換えてしまう、 どこの場所あなたが潜在的に可能性 物事を再利用し、あなたがすることができませんね。 だからここLaravelで、あなたは何を使用することができます ブレードテンプレートエンジンとして知られている マスターレイアウトを作成する。 そしてそこから、あなたが継承できる サブテンプレートが実際にできるように 内の要素を含む 大きなベーステンプレートその。 移行。 だから、これは上でかなり標準的な機能である 最も近代的なWebアプリケーションフレームワーク。 だから、これはあなたが表現することができます コー​​ド内のデータベース·スキーマの変更。 だから、言おうとしてなくて、phpMyAdminは、 あなたが実際にこれらの移行を作成することができます データベースを表し 直接コード内のスキーマの変更。 そして、これはあなたが特にto--ことができます あなたが動作する複数の人々を持っている場合 同じWeb application--上 これらの変更を追跡し、 GitHubの、またはいくつかの他のリポジトリに言う。 だから、これは本当に便利です。 と必要性を軽減 たとえば、するには、SQLダンプを多くの周りを通過。 そして最後に、Composerはある 本当に、本当に便利なもの それはあなたが他の使用することができます 人のコードは素晴らしい事をする。 ようLaravelのは、構造化された いくつかの作曲家·パッケージ。 だから、あなたが持って来たいと思った場合には言う 認証パッケージで またはあなたには、いくつかに持って来たいと思った場合、 発電機スクリプトまたは管理者のソート インターフェースには、プラグアンドプレイすることができます 作曲とそれらのコンポーネント。 それでは始めましょう。 あなたからのどの質問 私たちは始める前に、みんな? いいえ質問ません? クール。 したがって、最初のステップです Composerをインストールする。 だから、作曲は、次のことができます これらの依存関係を管理、 それはLaravelフレームワークのかどうか またはいくつかの他のサードパーティ製の拡張機能。 最初のコマンドは、ことができます あなたComposerをダウンロードするには、 2番目のコマンドは、次のことができます お近くのbinフォルダに移動 あなたは、Composerを実行できるように 直接端子を介して。 その後、先に行くと、 新しいLaravelプロジェクトを作成します。 私たちは、実際にするつもりだ いくつかのサンプルコードを使用する 私は一緒に入れてきたこと このブログを作成します。 しかし、あなたはから開始している場合は、 スクラッチは、このコマンドを使用します ここに、作曲家は、プロジェクトを作成し、 その後laravelスラッシュlaravel、と プロジェクトの名前。 そして、それは含まれます すべての配布コード 新しいLaravelプロジェクトを開始するため。 あなたのCS50最終プロジェクトのためだから、あなたはよ おそらくそのコマンドを使用します。 しかし、我々はこれで開始するつもりだ。 だから、やった後、 、あなたが取得するつもりだこと かなり大規模な数 blog50内のファイルの。 それでは、ただ見ていきましょう これらの構成要素の一部。 あなたはこのルートでわかります ディレクトリ、アプリのフォルダがあります。 appフォルダの中に、あります 夫婦役立つフォルダー。 で始まるへの注意の このconfigフォルダです。 だから、これはどのように設定します あなたのWeb​​アプリケーションです 、たとえば、人を認証するために行くか 現金なものか、データベースに接続します。 そして、実際に何が 有用であることであるLaravel あなたが別の設定することができます 開発環境。 だから、私たちはここでやったことはあればある 我々は、ローカルフォルダの下に行く、 database.phpでファイルがあります。 そして、あなたはここでその我々がわかります ことをMySQLの接続を設定する 個人が接続することができます のMySQLサーバへ 直接CS50アプライアンス上。 そして、我々は、データベースに接続している 私が設定することをBlog50と呼ばれる。 それでは、実際に先に行くとしましょう これの作業バージョンを実行して、 まさに感を得るために 私たちが構築しているアプリケーション のように見えます。 だから私は、のコピーを持っている このBlog50が完了しました。 だから、Laravel実際に サーバーが組み込まれています あなたが直接実行できること コマンドラインから。 だから、これは次のようになり ときあなたが実際に前にPSET C.で独自のサーバーを構築 そこで、彼らはそうでは1を構築しています あなたはLaravelのアプリを実行できる 直接コマンドラインから。 我々はPHPの職人を行うのであれば、このサービスを提供 開発用サーバを起動します ポート8000​​で。 だから我々はローカルホストに行けば 8000、あなたはちょっと、そのことに気づくでしょう。 私たちは、私たちのブログアップと実行している。 だからここLaravelを生成しています 私たちのブログのフロントページ。 非常にシンプルなアプリケーション。 しかし、いくつかあります 本当に気の利いた機能が それはボンネットの下に提供している。 だから、ブログアプリケーションの 単純明快。 私たちはポストを作成したい場合は、 私たちは、そのボタンをクリックすることができます。 私たちは、ねえ」、皆を言うことができます。 これは本当に楽しいです 例えばセミナー、 "。 そして、ここで何かを書き留める。 ここにテキスト。 私たちは[送信]をクリックした場合は、よ 予告私たちの新しいブログ 投稿はに追加されました ブログのフロントページ。 私たちはここに戻って行く場合、あなたはそれをわかります すでにいくつかのコメントがあった ブログで。 私たちは下にスクロールした場合、あなたがますので ジョナサン·タンが言うことに気づく 彼は非常にこのポストに興味をそそられたこと。 だから我々はどのようにオブジェクトに行くよ リレーショナルマッピングが可能に あなたの中にこれらの関係を行うに 同様にかなりシームレスな方法。 クール。 機能性についてのご質問 私たちが構築しようとしている何の? クール。 それでは、実際にして始めましょう データベーステーブルを作成する。 だから、CS50ファイナンスのことを思い出す ユーザーのためのテーブルを一緒に入れ などのために あなたのポートフォリオの銘柄。 我々は先に述べたように、 私たちはLaravelで使用 の移行として知られているものです。 だから我々は戻っへ行けば ここで配布コード ある最初のコマンド Laravelはあなたを提供する役立つ このmigrateコマンドである。 だから我々は、PHP職人の移行を行うことができます。make。 だから、これは私たちが、移行を作成することができます。 そして、我々はしたいと思う 移行を作成する 、create_posts_tableと呼ばれる これが起こっている 我々はするつもりだどこであると 私たちのブログの記事を保存すること。 そして、あなたはそれが実行されることをここに気づくでしょう 実際にいくつかのコードを でファイルを生成します その上にタイムスタンプ。 だから我々は行くとデータベースを見れば、 我々は、移行の下に気付くでしょう それが作成さだと 私たちのために空白のファイルいる 名前の定型的なコードを持って 私たちは、指定していることを、postsテーブルを作成します。 そして、それは2つの機能を有している。 アップは、私たちがしたときに実行したいものです。 マイグレーションがデータベースに適用される。 そして、ダウンは、私たちがやろうとしているものです 我々は、移行を逆にしたいときに。 だからここから始めてみましょう この移行を書いている。 そこで役立つクラスがあります Laravelにスキーマと呼ばれる。 だから我々は、スキーマを実行するつもり::作成します。 そして、我々は作成しましょう 表には、ポストと呼ばれる。 そしてここで、我々は関数を使用してこれを適用する。 そして、ここの中、私たちは実際にするつもりだ 私たちのテーブルの内容を指定します。 私たちは、IDを作成するつもりだ、 その自動インクリメントである。 さらに、我々はつもりだ そのフィールドを作成する 私たちのブログの記事のタイトルを表します。 また、フィールドを作成するつもりだ 私たちのブログの記事のテキストを格納するため。 そして最後に、我々はつもりだ いくつかのタイムスタンプを保存する 私たちのポストが作成されたときのために そしてそれが更新された。 そしてダウンのために、それはかなり簡単です。 私たちが何をしたいすべてはドロップです 私たちが作成したテーブル。 グレート。 何か質問? だから今我々は先に行く場合は、 and--実際に、ローカルホスト、 私たちは以前に持っていたものは削除しましょう​​。 データベースに移動します。 私たちは、以前持っていたものは削除するつもりです。 これを削除し、作成する 新しいデータベースBlog50。 だから今何魔法 一部はここにあることを我々 直接これらの移行を適用することができます コマンドラインを使用してデータベースへ ツール。 だから我々は、PHP職人の移行を行う場合、 あなたはちょっと、そのことに気づくでしょう。 これは、移行テーブルを作成しただ、 その私たちは少しで見てみましょう、 そして、この第一の移行を適用だ。 だから我々はあなたが気づくでしょう、Blog50を見て それが私たちのために二つのテーブルを作成しただと。 最初にこの移行テーブルがある。 我々はこれを閲覧するのであれば、あなたがいることに気づくでしょう このテーブルは非常に簡単です。 それはちょうどちょっと、と言わだ。 我々は、この移行を適用しました。 我々は戻ってポストを見てください。 あなたは、構造ことに気づくでしょう 我々はそれを求めていたまさにです。 私たちは、自動インクリメントIDを持っています。 私たちは、格納するための文字列を持っている タイトル、テキストフ​​ィールド コンテンツを格納する。 グレート。 クール。 の移行についてのご質問 仕事、我々はそれらをどのように適用することができますか? いいえ? クール。 だから今、私たちは先に行くつもりです そして、実際にモデルを作成。 だから我々はその柱モデルを作成したい データベースの抽象化を格納します。 だからではなく、MySQLのクエリを実行する 直接、私たちは作成しましょう​​。 だから我々は作成する必要があります ここに呼ばれるモデルでフォルダ。 そして、ここの中に、私たちはするつもりだ 项目というファイルを作成します。 このPHPファイル内部では、 私たちは、作成しましょう 雄弁な拡張するクラスのポスト。 雄弁はORMの名前です Laravelが提供するエンジン。 そして、ここでは、我々はそれを期待するかもしれない あなたが実際にいくつかのコードを記述する必要があります。 我々はいくつかを記述するつもりだ ヘルパー機能は後で。 しかし、箱から出して、これはすでに意志 データベースに何があるかを認識 そして我々は、言う、テキストにアクセスすることができます 私たちのブログの記事やタイトルの、 と直接のものを作成する 全くほとんどはコードません。 だから、魔法のコンポーネントの一つだ。 そして、このクラスに一度風 より本格的なされ、 私たちは何についての情報が含まれます それは関連のなので、コメントは。 また、関数を作成 私たちは、実際にすることができます 直接URLを取得 ブログ投稿ページの。 クール。 そのことについて何か質問? いいえ。 クール。 だから今我々は我々のモデルを持っていたら、 のコントローラを作成したい これらのモデルとインターフェースすることができ、 し、その後データベース。 だから我々は見てみた場合 BlogController、あなたはよ そこではないことに注意してください 今ここにずっと。 存在する全ての指数関数である そのホームページを生成し、 しかし何もせずに まだそこに表示されます。 だから、最初の関数 我々は、作成しようとしていること 私たちを可能にするものである ブログ投稿を作成します。 だから我々は宣言するつもりだ newPostと呼ばれる新しい機能。 そして、ここで簡単に内側に、私たちはつもりだ このページのレイアウトを設定する バージョンのレンダリングとすることで、 あなたはCS50からリコールした場合、 blog.newと呼ばれるこのテンプレートの、どの 我々は少しで作成しましょう​​。 あなたは、その行6にここに気づくでしょう 我々は、レイアウト、この変数を指定しました。 そして、私たちは見てみると ビュー]フォルダで、 レイアウトフォルダがあり、その 非常に基本的なHTMLファイルが含まれています。 そして注目すべきは、あなたがわかります 私たちは、このコンテナを持っていること ここで、コンテンツを生み出すこと。 だから私たちのテンプレートの内側 私たちがやろうとしている ことになるだろうものを作成されている このレイアウト内で直接置換されている。 だから我々は、我々がレンダリングしたいと言った blog.newと呼ばれるテンプレート。 しかし、ブログの内側に、あります まだこの新しいテンプレート。 だから我々は作成しましょう ファイルはnew.blade.phpと呼ばれる。 これはLaravelに伝え、その このPHPファイルべき で描画さ ブレードテンプレートエンジン。 だから、これはかなりある 簡単なファイル。 それは、フォームになるだろう 私たちは実際にブログの記事を追加。 ここからだから魔法 継承はちょっと、ということです。 我々はそれを指定したい セクション、コンテンツセクション ここでは、線引きされている @sectionと@stopによる。 だから何の間、ここでだとしている マスターレイアウトに置換すること。 そして、ここで私たちが何をしたいです 非常に簡単に新しいHTMLファイルを作成します。 ちょうど迅速なタイトルを追加してみましょう。 ブログの記事を追加します。 そして、その中に、私たちはしている フォームを作成する予定。 このフォームは、アクションを持っているとしている。 そして、これは何かになるだろう 私たちは、後で代用することを、 私たちはどのように表示されます ルーティングは、ここに収まる。 しかし、我々は今に定義するつもりだ これはルートにURLに行くこと createPostから。 そして、これが起こっている メソッドのポストを持っている。 ここの中で、私たちはつもりだ 二つのフィールドを持っている。 DIVクラス= "フォーム·グループ」。 私たちは、ブートストラップCSSのライブラリを使用している 優雅にツイッターで提供。 だから我々は、これらのうちの2つを作成しましょう​​。 したがって、この最初の入力である タイトルになるだろう。 だから、入力名= "タイトル"。 クラス= "formcontrol」。 タイプ= "テキスト"。 私は、プレースホルダー= "タイトル"を追加するつもりです。 次いで第2のものである テキスト領域になるだろう。 = "コンテンツ"を名前を付けます。 クラス= "formcontrol」。 そして、プレースホルダは= "ここに書く」。 我々はそこに行く。 最後に、我々はするつもりだ 迅速な送信ボタンを追加します。 タイプ=「送信」クラス= "BTN BTN-主」。 したがって、これらが全てです そのようにブートストラップの特徴 これを置くことができること の方法で実施 ユーザーに獲物、 むしろ裸のHTMLより。 だから我々はここで、コントローラを定義しました。 我々は非常に単純なビューを定義しました。 しかし、不足しているとは何だ 結合組織。 したがって、この時点で、 Laravelはどのようにないアイデアを持っていない 私たちは実際にするつもりだ このコントローラにアクセスします。 だから、これはで定義されています ファイルはroutes.phpのと呼ばれる。 そして、今、私たちは1ルートを持っている。 私達がに行くときどちらが このウェブサイトのためのホームパス、 それがレンダリングするために起こっている インデックスコントローラ。 そこでここでは実装されてやる必要があるか 私たちはポストを作成するための新しいルート。 だから我々は、このメソッドを使用 指定する、取得 ユーザーがしようとすると、その 特にこの当ページを取得する 投稿は、新しいページ - スラッシュ 私たちがやろうとしている と呼ばれるコントローラを使用している BlogController新しいポスト。 先ほど作成した1。 そして、我々はつもりだ newPostとしてそれをエイリアスに。 私たちは、別のものを作成しましょう 少しで機能。 しかし、下のここで何だ 何」と「キー 我々は内置き換えることができます 私たちのブレードテンプレート。 だから今のために、してみましょう 実際にもルートを言う。 だから我々はまたつもりだ コントローラーを作成する 私たちはこれらの記事を作成できるように。 もしそうであれば、ページのポストへのユーザーの投稿 私たちがやろうとしているものを、新たなスラッシュ そのコントローラを使用しています 私たちはすぐに作成しましょう createPostでBlogControllerと呼ばれる。 そして、我々はエイリアスになるだろう このcreatePostとして持つ。 クール。 何か質問? クール。 それでは、私たちはこれまでに持っているもの実行してみましょう。 我々はPHPの職人を行うのであれば、サーブ 我々は、エラーがたくさん表示されます。 我々が持っているようなので、それが見えます ルートライン27上の構文エラー。 ああ。 セミコロンがありません。 だから我々は8000に行けば、 あなたはまだここに何も表示されませんよ。 だから、これはデフォルトのホームページです。 しかし、我々はちょっと、新しいスラッシュ投稿する行けば。 それは、先ほど作成したフォームになるでしょう。 今、我々はそうではありません 機能を実装 我々は送信ボタンを押したときの。 だから我々はSubmitをクリックした場合 ボタン、エラーを実行するために起こっている。 しかし、我々はそれをコーディングするつもりだ 今は、まさに我々 ときに、ユーザーをやってみたい このフォームを送信する。 それでは、それを行うことができます。 コントローラファイルに戻る。 私たちがやろうとしていることである この新たな機能を実装する それは私たちがポストを作成することができます。 新しい関数を宣言します。 パブリック·ファンクションcreatePost。 そして、この関数はあることを行っている もう少し洗練されたものよりも 我々は前に持っていた。 しかし、あなたは私たちがわからないことがわかります 実際に任意のSQLを書くつもり。 ORM、雄弁 ORMは、許可するように起こっている 私たちは、いくつかでこれを行うには 方法は、よりエレガントな方法。 だから我々は新しい投稿を作成するつもりだ。 そしてここで我々はしている 新しいオブジェクトをインスタンス化する ちょうど私達のモデルから 作成された、ポストモデル。 そして、私たちがやろうとしていることは設定されている この使用して何かのtitle属性 我々は、サーバーから取得すること。 だから、これは何に似ている 我々はCS50ファイナンスの前に持っていた 私たちはどうしたらどこに、スーパーを使用して タイトルを探してグローバルポスト。 だから、Laravelは、いくつかの衛生を提供しています とその他もろもろこのヘルパー関数を使用して。 だから我々は、代わりにこれを使用することを好むだろう PHPからこの非常に基本的な生の形式の。 そして、私たちがやろうとしていることは設定されている 入力にのコンテンツは、コンテンツを取得する。 私たちは、実際にラップするつもりだ この便利な機能で PHPが提供するnl2brと呼ばれる、その 、新しいライン、NLS、BRSに、休憩を回す 私たちは実際に持つことができるように それ内の異なる段落。 そして最後に、私たちが行っているものを 行うにはこのポストを保存している。 だから我々は関数を呼び出す このモデルに保存します。 私たちはポストを保存するつもりです。 そして最後に私たちがやろうとしているものを 特にユーザーをリダイレクトされる 私たちがしようとしているルートへ viewPostによって、まもなくエイリアスを作成。 そして、我々は、引数に渡すつもりだ ID、この新しいポストのIDであること。 グレート。 だから今、私たちは、実際に行くとこれを実行した場合。 私たちは、新しい投稿を追加するつもりだ。 のはこれがセミナー50で言ってみましょう。 そして、必ず言う。 ASDL。 なんでも。 コンテンツのいくつかの並べ替え。 そして、それを提出してください。 そして、私たちはそのことに気づくでしょう、 ちょっと。ルートは定義されていません。 しかし、我々はphpMyAdminのを見ている場合と、 かどうか私達の機能を探す 何をしました。 Blog50ポストを見てください。 私たちは、ちょっと、そのことに気づくでしょう。 実際には、我々はちょうどそのブログを作成しました 指定されたタイムスタンプを投稿してください。 だから今のは戻って、実際に作成してみましょう 私たちのコントローラでこの他の機能、 特にviewPostコントローラ。 だから、パブリック関数viewPost。 そこでここでは、その代わりに、やる何 空の括弧を持っていることの、 我々は、のIDを渡したいと思う 私たちが作成しているポスト。 そしてここから私たちは何をするつもりだ 実際にそれをデータベースに照会されている。 だから我々は投稿しない場合、 呼び出された関数があります それは私たちがIDを指定して照会することができます見つける。 具体的には、実際に、私たちはするつもりだ と呼ばれるこのの代替バージョンを使用する 私たちを可能に見つけたり、失敗、 この関数の外に終了し、 ID場合に例外をスロー 我々は存在しませんに渡す。 そして、我々は何かをやろうとしている 以前行ったものと同様 我々は、コンテンツを設定する場合 このページであることが この新しいビューのレンダリングされたバージョン その私たちは、blog.viewを作成しましょう​​。 そして、我々はに合格するつもりだ it--ちょうどCS50のようにレンダリング 変数の辞書をfunction--。 この連想配列のキー テンプレート内の変数になる。 だから我々はポストポストをやろうとしている。 だから間接的にポストを渡す 我々は、データベースから照会した。 。 今、私たちがしようとしている 何このビューを作成することです 私たちが実際に見ることができるように 私たちが構築したブログ投稿。 だから我々は作成しましょう ファイルがview.blade.php呼んだ。 したがって、このテンプレートの内側に、 私たちがやろうとしている シンプルなページにまとめていること 私たちがコンテンツを表示することができます。 だから我々は、それはコンテンツの前にセクションのです。 停止。 そして、私たちは何を行っている ここに内行うことである このページを表示するためにいくつかのHTMLを書く。 だから私たちは空想でそれをラップするつもりだ 新しいHTML5の要素が条と呼ばれる。 そして、ここでは、我々はつもりだ どこにヘッダーを持っている 我々は、単にH1を持っているつもりだ その記事のタイトルが含まれています。 だからここ、私たちはこれを見ている場合 二重中括弧表記、 これは基本的に行います PHPは、記事のタイトルをエコー。 だから、便利速記だ Laravelは私たちを提供する。 だから我々は使用するつもりだ 代わりにこの表記法。 そしてここで、私たちもするつもりだ それの内容をプリントアウトする。 そして、ここでは、我々はつもりだ 投稿するコンテンツとすることができません。 そして、我々は何をしている下部のダウン 何をするつもりは、フッターを作成することです。 とフッターに、我々はするつもりだ これがポストされた第一の表示。 だから、これは、に掲載さで作成されました。 そして、Laravelは本当に素敵なを使用しています 日付ライブラリは、カーボンと呼ばれる。 だから我々は実際に呼び出さ何かを行うことができます あなたが前に見たdifforHumans、。 我々が投稿されたとき。それは、言うよ のように、5秒前。 だから、これは本当にいいです Laravelの機能性。 そして最後に、我々はつもりだ このフッターを閉じます。 だから今我々はに戻る場合は、 私たちが行っているホームページ ので、まだここに何も表示されませんように 私たちはホームページをアップコーディングしていない。 しかし、我々はスラッシュ1を投稿する行けば、 我々は例外を見に行っている。 なぜ誰も知っていますか 私たちは、例外を参照してください? 私たちは何が欠けている? 任意のアイデア? だから我々は何をした 以前の私たちのために実際に 我々はに着く方法を定義する 特定のコントローラ? SPEAKER 1:ルート? ERIC欧陽:うん。 だから我々はまだルートを定義する必要があります。 だから我々はroutes.phpのためにここに戻ってください。 あなたは私たちに気付くでしょう 実際に定義していない どのように我々は取得するつもりだ このコントローラに。 だから今我々はこのルートを定義するつもりだ。 それはかなり簡単ですが、 以前行ったものと同様。 しかし、私たちがここに気づくするつもりだことはある 私たちは、プレースホルダーを持っているつもりだ。 だから我々はroute.getスラッシュポストIDを行う場合。 だから、IDは、今まで何が起こっているのである コントローラに渡される。 これは使おうとしている コントローラ我々だけ 作成し、viewPostでBlogController。 そして、我々はするつもりだ viewPostとしてエイリアスこれを。 グレート。 だから今我々はこのルートを作成しようとしている。 だから今、私たちはここに行けば このページの更新、 実際に私たちは私たちの新しいブログ投稿がありますか。 だから、これは私たちが以前に作成したものです。 非常にシンプルなページが、表示されます 先ほど作成したブログ投稿。 クール。 そして、我々は実際に全体を通過した場合 新しいブログ投稿を作成するプロセス、 私たちは、そのすべてがわかります 適切にリダイレクトします。 私が言う場合は、 "こんにちは。 私はジョナサン·タンです。」 「これは私のブログの記事である。」と言う そして、それを提出、これが作成されます ID 2と、この新しいブログ投稿、 私たちが持っていたものからの増分 以前に、適切に表示します。 恐ろしい。 何か質問? はい? SPEAKER 2:Laravelが扱うか サニタイズとあなたのためにすべてのもの? ERIC欧陽:はい。 だから我々は、以前の際に見たとき 我々は、入力コロンコロンが手に入れた それは、任意のSQLをsanitates 注射やその他もろもろ 我々は、以下の場合に実行する可能性があることを 我々は、ウェブサイトの悪意のあるユーザーなら。 だから、Laravelは多くのことを処理します 舞台裏でそれの。 良い質問。 それでは、ホームページを見てみましょう。 我々が最初に戻るのであれば ホームページ用のコントローラ、 あなたはそれことに気づくでしょう ここで多くを行いません。 あなたは、私たちがわからないことに気づくでしょう このコントローラに渡す 何も特に便利。 それはちょうど、このインデックスファイルです。 それでは、に通過させる 役に立つ何か。 具体的には、我々はしている ポストに渡すつもり。 そして、Laravelは私たちを可能にする 、すべてのポストを行うにはどの 私たちはすべての投稿を取得できるようになります。 今、私たちは戻っへ行けば index.phpを、あなたはちょっと、表示されます。 まだここに何もない。 しかし、我々はここで何をしたいか 実際に反復処理され、 その支柱の上にforeachループを行う 私たちはポストをプリントアウトすることができます。 ようにforeachの投稿 私たちが何をしたいのか、ポスト、 コンテンツを印刷している ブログ投稿の。 しかし、あなたは気づくでしょう一つのことは、ということです 私たちは実際にそのコードのほとんどを書きました すでに、view.blade.phpで。 だから我々は、実際にやろうとしているものです ブレイドの素敵な役立つ機能を使用する そして、この共通コードをくくり出す。 だから我々はここに行く。 私たちは、このコンテンツを取るつもりだ 右ここに、そして私たちがやろうとしている 新しいフォルダを作成することです。 ちょうどそれがパーシャル呼びましょう。 そして、ここでは、我々はつもりだ post.blade.phpを作成します。 だからここ、我々は方法を因数分解 その私たちはこれらの記事を表示したい。 そして、ここで私たちが代わりにやる何 実際に、直接そのHTMLを持つ 私たちは、このディレクティブを使用するつもりだ と呼ばれるblog.partials.postが含まれています。 そして、我々はここでやろうとしているものを ページのポストを渡している。 私たちはここに戻って行くのであれば、今、私たちはよ 機能がまだあることに気付く 同じ。 しかし、今我々はこれを持っている 、このHTMLをコードを因数分解。 だから私たちはインデックスにそれを使用することができます。 だからここに、これは非常に簡単です。 我々が行うすべてが含まれている blog.partials.postと配列。 そして、どこかへ 前に、我々はポストポストを行う。 だから今我々はに戻る場合は、 ホームページは、我々はちょっと、その表示されます。 我々は、すべてのリストを持っている 我々の前に持っていたブログ投稿。 我々はいくつかの「IF」を追加したい場合があります 条件と「それ以外」の条件 そのため、私たちは持っていない場合 ブログに何でも、 我々は有用なものを表示したい。 ちょっと、のように。 ブログにまだコンテンツがありません。 そして、あなたたちは実際に見れば GitHubの上で流通コード、 あなたは私たちがそれを行う方法の例が表示されます。 クール。 何か質問? はい。 SPEAKER 2:私はちょうど推測 根本的な問題。 戻るルートで。 ERIC欧陽:うん。 我々はルートを見ると。 SPEAKER 2:しない 作成後にuses.blogcontroller、 それは私たちに何をへの直接のですか? ERIC欧陽:うん。 うん。 SPEAKER 2:または何that--です ERIC欧陽:だから、言って、見てみる 例えば、右ここにこのルート。 最初の部分は、実際のです ユーザーはに行きますURL。 そして、ここでこの配列、 連想配列、定義 私たちは持っていたい方法 それに応答して、アプリケーションの行為。 そのように使用するコントローラであり、 我々機能 時呼び出したい ユーザーはこのURLに行く。 だからviewPost右ここにいた 私たちは内部定義関数 BlogController--の SPEAKER 2:なるほど。 ERIC欧陽:その私たちの-SO 実際にビューをレンダリングすることができ、 、いくつかの計算を実行する SQLデータベースと対話する。 SPEAKER 2:OK。 ERIC欧陽:そして、他の 一部には、「AS」我々が使用する別名です。 だから我々はときに気付いた場合 私たちは、フォームを作成し、 あなたはそのURLに気付くでしょう:: routecreatePostを。 だから、実際に置換する URLように、私たちは一生懸命じゃない これらのコーディングそこらで我々はそれを変更することができます 一度、私たちは名前を変更したい場合は言う。 代わりにポストスラッシュの 新しい、我々は、p、のようにやってみたい ちょうどきれいにする新しいスラッシュ 私たちのURLが少しアップする。 私たちは、むしろ一つの場所でそれを変更するだろう すべての異なるファイル間でより。 クール。 それは良い。 だから今我々は非常に 基本的なブログのプラットフォーム。 我々は、おそらくそのようにボタンを追加したい ことを私たちは実際に新しい記事を作成することができます。 だから我々は見てみると レイアウトマスターで、 私たちは、ヘッダーを右項を持っている 私達はちょうど一番上にアップする定義したので。 だから我々はにボタンを追加することができます ヘッダの先頭。 だから我々は、実際には、index.blade.phpに行く場合は、 何がここの内部で何が起こるのかを定義です。 したがって、このヘッダーを右セクション、 私たちがやろうとしている に行くためのボタンを追加されている ルート新しいポストによって定義されたURL。 ちょうどそれをクリーンアップし、作る 、それはかなり、すべてのブートストラップ 我々はするつもりだ このデフォルトのボタン。 ちょうど楽しみのためにそれが大にしてみましょう。 そして、その中に、私たちはいくつかのテキストを入れることができます。 しかし、どのようなブートストラップ 提供glyphiconsです。 だから我々は実際にその中に追加することができます 私たちは前に見た素敵な鉛筆。 Glyphicon。 Glyphicon-鉛筆。 だから、これは私たちが置くことができます テキストの代わりにアイコンで。 今、私たちは停止しない場合、この このセクションを定義します。 そして、ちょっと。 私たちは、私たちにリンクする素敵なボタンがあります 直接ブログの記事ページを追加。 だから我々は非常に単純なブログを持っている。 私たちはそれにものを追加することができます。 しかし、我々は一般的に何を期待 ブログからのコメントされている。 私たちが持つことだから、本当に重要な、 他の誰かがウェブサイトを訪問した場合、言う そして実際にそのポストが好き 彼らは議論に従事することができます ページにアクセスして他の人と。 だから我々は行くと作成しましょう 新しいデータベーステーブルと新しいモデル 我々は関連付けることができるように ポストにコメント。 したがって、最初のステップ、直前のような、 私たちは、マイグレーションを実行する必要があるということです。 だから、前のように、私たちは何 PHPの職人の移行:作る。 そして、我々は1を作成しましょう create_comments_tableと呼ばれる。 これは、ファイルが作成されます それは私たちの新しい移行を持っています。 そして、私たちは次のように、するつもりだ 前、新しいテーブルを定義する。 だから、スキーマ::作成 表には、コメントを呼ばれる。 ここでこの機能。 そして、このテーブルの内側何 私たちはやろうとしている最初のものである、 前のように、IDを割り当てる。 IDをインクリメントします。 我々は、ユーザーが関連付けることができるようにするつもりだ 特定のコメントに自分の名前。 私たちは、一部のコンテンツを持っているつもりだこと これは、テキストコンテンツと共に進む。 そして、ここで私たちがしようとしているもの やる別の何かである。 私たちは、整数を作成しましょう そのはpost_idの呼び出している 何ポスト​​を意味しようとしている 特定のコメントをして行く。 さらに、我々は実際にするつもりだ この上で外部キー制約を設定します。 だから、MySQLはそれを強制されます。 我々はしようとしていない コメント番号を割り当てる 私たちは持っていない場合は、5000を投稿する5 その上で5000の記事を持っていた。 だから我々がここで何をすべきか、 我々は、外国にpost_idを行う と関連することが予定されている テーブルポストからIDフィールド。 そして、我々は実際に何かをやる 他に役立つ、onDeleteです。 だから我々はいくつかを削除した場合 データベースからのポスト、 我々は、カスケードしたいこと 同様にコメントを削除します。 それは非常に有用ではありませんので 私たちは、ポストのコメントを持つこと それは存在しません。 そして最後に、前のように、私たちはしている これにタイムスタンプを設定しよう。 そして、前のように、私たちはするつもりだ 逆移行があることがある コメントの表をドロップする。 だから今私たちが戻った場合 ここに、私たちはつもりだ この移行、職人の移行を実行します。 そして今、これを適用だ 先ほど作成した移行。 だから我々はphpMyAdminを見ると、 我々は今、実際には、やる 持ってコメントテーブルを持っている 我々だけで指定された構造。 だから、前のように、私たちはしている 新しいモデルを作成する予定 抽象SQLテーブルへ 先ほど作成した。 それでは、新しいファイルを追加してみましょう。 我々はそれをcomment.php呼び出すするつもりだ。 そして、これは実際にはかなりになるだろう わずかな変化との直接的な 我々の前に持っていたものから。 だから、クラスコメントは雄弁を拡張します。 そして、私たちは何を行っている 定義され、ここで行うには ある機能 他のモデルとの関係。 だから我々はポスト機能を持っているつもりだ ここに、この関係を返す。 だから我々はそれを指定している これはポストに属し、 1ポストがあることを言って このコメントが属する。 これは実際にある必要があります モデルの資本P。 そして今、ちょうど他のフリップで 側、我々はちょっと、それを言わなければならない。 投稿は、コメントが。 だから、私たちがやろうとしていることである パブリック関数のコメントを定義します。 そして、ここで返される これは多くのコメントがあります。 だから今魔法のように私たちはポストを持っているとき、 我々は、属性、コメントを得ることができます そしてそれはを移入します データベースからの情報。 それでは、実際に見ていきましょうと 私たちのビューファイルに新しい機能を追加 我々は両方の表示ができるように とコメントを作成します。 だから我々は、新しいセクションを定義するつもりだ。 ちょうどそれを分離してみましょう 水平ルール。 セクションID = "コメント"。 私たちがやろうとしている ここに、前のように、 すべてのコメントを反復処理。 だから、実際に我々はこれを行う方法です、 私が述べたように、かなり魔法。 私たちは、コメントを投稿するやる。 そして、我々はそれぞれのためにこれを行うことができます コメントのそれぞれをループ。 そして、我々はするつもりだ何 やるのdivクラスコメントで、 そして私たちは実際にするつもりだ このコメントをプリントアウト。 だから、ちょっと表示 name--人のコメント 誰がこのcomment--の投稿 ドットドットドット氏は述べています。 私たちは、ブロックでこれを置くつもりだ 引用、ちょうどそれが素敵に見えるようにする。 そして、コンテンツのブロック引用をコメント。 そして、foreachの。 だから今、これはループに起こっている すべてのコメントを経て そのが関連している ポストのそれぞれと そしてそれらのコメントのそれぞれを表示する。 私がダウンして別のセクションを追加するつもりだ ここで、私たちはコメントを追加することを可能にする。 だから、H3クラス。 ここにタイトルを置く。 コメントを追加します。 そして、我々は新しいフォームを定義するつもりだ。 だから、前のように、私たちはしている フォームアクションをするつもり。 そしてここで、新しいアクションは、私たちがしているである その新しいコントローラーを定義しようとして 私たちはポストに応答することを可能にする コメントを作成するための要求。 だから、URL ::ルートCREATECOMMENT。 私はここで、パラメータを渡すつもりです。 そのポストのID 私たちは、上のコメントを作成している。 その後、この方法は フォームがポストになるだろう。 今、私たちは中に追加するつもりだ 二つのフィールド、フォームグループ。 これはと入力することになるだろう 「名前」とクラス= "フォームコントロール"という名前を付け、 タイプ= "テキスト"、とと プレースホルダー= "あなたの名前。" 我々はまた、定義するつもりだ 別のフォームフィールド、その テキストであることを行っている 我々の前に持っていたとしてエリ​​ア。 直前のように、コンテンツを呼び出す。 クラス= "フォームコントロール。」 プレースホルダは= "ここに書く。」 そして、ちょうどその私たち 実際にそれを提出することができ、 = "BTN-主要BTN。」タイプとクラスを提出 フォームを閉じます。 このアクションを閉じます。 だから今我々はどこにこのページを更新した場合 私たちは、たとえば、特定のポストを持っている。 私たちは、サーバを再起動する必要があります。 PHPの業者は、サーブ。 これを再起動します。 我々はルートを定義する必要があります。 しかし、今のところ、ちょうどこのてみましょう 私たちは実際にお見せできるようにして どのページには次のようになり、その後、 私たちは実際にそのルートを作成します。 だから、ちょっと。 ここでは、この新しいフォームを使用しています 私たちは、コメントを作成できるように。 それでは、実際に定義してみましょう コントローラ内の関数 我々は、コメントを追加できるように。 のは、戻りましょう。 そしてblogcontroller.php内で、 私たちがやろうとしている 新しい関数を作成している コメントを作成呼ばれる。 パブリック·ファンクションCREATECOMMENT。 これは、単一のを持っているつもりされている パラメータ、ポストのID 私たちがコメントしていること。 そして、前のように、私たちはしている 最初の投稿を取得するつもり。 だから、findOrfail IDを投稿してください。 その後、我々はつもりだ 新しいコメントを作成します。 だから=新しいコメントをコメント。 名前=入力コメント::名前を取得。 コメントの内容=同じ新しい行 入力の休憩に::コンテンツを取得。 そして最後に、我々はする必要があるとしている ポストでこのコメントを関連付ける。 だから我々は使用するつもりだ この機能、コメント、 それは、私たちは保存することができます この関係。 だから今このコメントはあります 自動的にポストID。 我々はまた、それを設定することができます 手動で、これはある 限り読み、より簡単に 関数が行くように。 そして、我々は実行した後 私たちが何をしたいのか、この、 にユーザーをリダイレクトしている viewPostで指定されたルート の配列を持つ ポストIDのパラメータ。 そして今、そのため、この実際に 関数は、我々はこのルートを定義する必要があります。 ルート::ポスト。 そして今、我々はこれを呼び出すするつもりだ ポストのIDスラッシュコメントをスラッシュ。 Arrayには新しい機能を使用しています 先ほど作成した。 BlogController。 CREATECOMMENTとしてCREATECOMMENT。 グレート。 だから今私たちはこのページを更新し、うまくいけば場合、 とコメント、たとえば、デビッドマランに追加します。 「うまくいけば、これは動作します。」 提出してください。 我々は、実際にはありますか このブログの記事にコメントを。 クール。 だから今、私たちはかなり持っている 機能的なブログ投稿。 私達はちょうどするつもりだ そのようにカップルの微調整を追加 我々はいくつかのより有用があることを これらの記事の情報。 だから我々は戻っへ行けば フロントページ、我々は意味がありません どのように多くのコメントの これらの記事のそれぞれで。 だから我々は、実際に起こっているのか であるためには、我々のモデルの内側、 可能にするヘルパー関数を定義する 私たちは、コメントの数を指定するには それは、特定のポストで行く。 だから我々は作成しましょう ヘルパー関数。 パブリック関数。 GetNumCommentsStr。 番号を指定するため、文字列 それと一緒に行くのコメント。 そして、私たちがやろうとしていることは言うです そのNUM =このコメントは数える。 だから我々はカウントするつもりだ コメント数。 この数が1に等しい場合と、私たちはしている わずか1コメントを返しに行く。 そして、そうでなければ、我々は返すようにしたい numと、コメントを連結し、 私たちは複数化が正しい得る。 ただ、この単一引用符にする。 1つのコメント。 そして今、我々はこの機能を使用することができます 直接私たちの見解の内側。 だから我々は戻っへ行けば 私たちが作成した部分的なポスト、 今、私たちは、実際にしたい コメントの数を表示。 だから我々は何ができるかである ポストは、この関数を使用する 私達はちょうどするために作成されていること コメントの数を表示。 だから我々は今、それを更新した場合 ディスプレイは、実際には、い 番号のコメント それはそれと一緒に行く。 私たちはあなたの場合は、空想になりたいと思った場合 実際に配布コードを見て、 私たちは実際にリンクすることができます このコメントに。 あなたが思い出して、私たちは内に定義された これはセクションIDのコメントを持っていることを表示します。 だから我々は実際にリンクしたい場合 直接コメント欄に、どのような 我々はここで行うだろうHREFです ルートviewPostのURL。 ポストIDのアレイIDを渡します。 そして、我々はに行きたい 特にコメントセクション。 ここでの、タグを閉じてみましょう。 だから今我々はこれを更新する場合は、 ページ、我々はこれをクリック。 私たちは、直接行くよ コメントセクション。 私たちは長いポストを持っていた場合、次のことができます 実際にこのバウンスをダウンを参照してください。 しかし、あなたはそれがだとわかります しないページの上部に。 クール。 グレート。 だから、かなり簡単だ シンプルなものの例 あなたはLaravelで行うことができます。 しかし、あなたはここで気づくことができます 私たちは多くのことをやった コー​​ドのかなり少ない量。 Laravelは私たちが行うことができます 舞台裏でSQLクエリ。 それは、公衆衛生を行います 私たち舞台裏のため。 私たちはこれらの関係を行うことができます 非常に簡単に私たちが必要とすることなく、 任意のSQLを実行するに結合文 何の記事にコメントを組み合わせる。 私たちはこれを行うことを可能にする テンプレートの継承 我々はこれらのネストを定義することができるように、 ファイル我々は自分自身を繰り返していないので、 ちょうど私達があることを持っていたときのような ブログ投稿の表示 我々はする必要がないこと コー​​ドをコピーして貼り付けます。 そして、ここからあなたが構築することができます ますます複雑なアプリケーション。 我々場合は、想像することができます ログインインを実装したかった、 私たちは、第三者に持って来る、と言うことができる 私たちはそれを行うことを可能にするフレームワーク。 それらの束があります 本当に、本当にしていること のように行うことができます偉大な、 パスワード回復。 そして、それはあなたが満載です パスワードの電子メールをリセットします。 私たちは、許可を実装することができます 私はポストを作成できるように、 しかし、他の誰かがそれを編集することはできません。 私たちは、実装することができます 投稿を削除する機能。 しかし、あなたは私たちがかなり持っていることがわかります 多くのすべての基本的なコンポーネント 本当に、本当にいくつかを構築するため、 ダイナミックでエキサイティングなWebアプリケーション。 だからと、私たちは良いしていると思います。 あなたたちは、ご質問がありますか? はい? SPEAKER 3:どのようにしてください 静的コンテンツを取得する? ERIC欧陽:静的コンテンツ。 我々が持っていたときには、その前に見た このここで右、このレイアウトコンテンツ ビューのメーカー、我々はこれを持っていた その後この配列なし。 Blog.index、我々はこれを持っていた 単に静的ファイルとして。 だから我々は通過しない場合は、 それに沿って何でも、 それだけで、直接HTMLをレンダリングします。 しかし、我々はこの連想で渡す場合 動的にある柱の配列、 データベースから引き出され、我々 ページを動的にすることができます。 クール。 その他の質問? SPEAKER 3:どのように比較するだろう おそらくいくつかの他のオプションにLaravel? ERIC欧陽:確かに。 うん。 だから、Laravelはのことをis-- 偉大なquestion-- Webフレームワークのための多くのオプションのいずれか。 だから、Ruby on Railsには人気が1である。 私はツイッターがために使用と考えてい Ruby on Railsを用いて実装。 私は、彼らがあるので切り替えたと思います。 FuelPHPと呼ばれる別の1があります。 だから、Ruby on Railsのは、Ruby言語を使用します とMVC多くのものを実装しています 私たちはここを参照してくださいこと。 FuelPHPは別のPHPフレームワークです。 Djangoは私のお気に入りの一つです。 これは、Python用のWebフレームワークです。 だから、Pythonでウェブアプリケーションを書くことができます。 したがって、これらのオプションのトンがあります。 とによるLaravel、私が思う、 大は私の好きな​​権利である 今PHPのためという理由だけで コンポーネントの 我々は、以前の話をすることを。 それは有効になって作曲家。 それは本当に、本当に含み 表情豊かなORMシステム。 また、本当に素晴らしいテンプレートを持ってい 他人のいくつかの言語 単に提供しない。 および移行。 移行は同様に素晴らしいです。 クール? 恐ろしい。 ためによく、本当にありがとうございました このセミナーを見て、 そして最終的なプロジェクトに幸運。