>> [音楽再生]
>> 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システム。
また、本当に素晴らしいテンプレートを持ってい 他人のいくつかの言語
単に提供しない。
および移行。
移行は同様に素晴らしいです。
クール？
恐ろしい。
ためによく、本当にありがとうございました このセミナーを見て、
そして最終的なプロジェクトに幸運。