[セミナー] [Kohanaの:軽量PHPフレームワーク] [ブランドン劉] [ハーバード大学] [これはCS50である。] [CS50.TV] >>こんにちは皆。私の名前はブランドンです。 私は大学行って、コンピュータサイエンスでここに後輩だし、今日は話をするつもりだ PHPのWeb開発フレームワークですKohanaの、。 今日は、ライブコーディングセミナーであることを行っている、 私は基本的にKohanaのが何であるかを説明し、5〜10分を費やすつもりだ、 そして私は、文字通りの超シンプルなブログを構築するつもりです あなたのために右ここに文字通りゼロから。 我々は、KohanaのWebサイトからコードをダウンロードしようとしている そして、我々は、ブログの作成を開始するつもりだ、とうまくいけば、それは非常に有益だろう あなたはおそらく、多分わかりますので、私はいくつかのミスを作ってあげる、 そしてあなたは私が彼らからの回復がわかります、 私はこのブログを通じて構築するか、あなたが私の思考プロセスが表示されます、 そしてその間に、あなたもフレームワーク自体に慣れるでしょう。 うまくいけば、それは非常に有益な運動になるでしょう。 >>まず、フレームワークは、正確に何ですか? あなたは今までCS50を取ってきた場合、あなたは本当にいずれにも働いていない フレームワークはまだ、との事はこれです。 あなたはおそらくすでに1 Web開発PSETをやった、 そして、あなたが、ウェブサイトを構築し、建物のウェブサイトを維持していきましょう。 あなたは、いくつかのことに気づき始めるでしょう。 あなたが気づく最初の事は、おそらく同じことをやっているということです 何度も繰り返し、すべての時間、 ユーザーの入力データをクリーニングするようなもの、 特定の方法でファイルを整理するようなもの。 あなたも、おそらくわかります他の事はあなたのコードということです 非常に、非常に厄介ななることを始めることがあり、 あなたは厄介なままにしておくと、それを維持することは非常に苦労することがあり、 またはあなたがあなたのコードを構造化するために起動し、モジュラー作ること それのメンテナンス性の向上のために、特定の方法で。 Webフレームワークは基本的にインチ来た場所です 多くのウェブサイトを構築していたこれらの人々は、彼らは言った、 「我々は、この私たちがウェブサイトを構築するひとつひとつの時間をやり直す必要はありません。 " 「なぜ我々はあなたのためだけに、これらすべてのことを実行し、パッケージを作成しない ひとつひとつの時間は、あなたがウェブサイトを構築したい? " だからあなたが新しいウェブサイトを作成するときに、 あなただけの、まさにこの特定のウェブサイトが何であるかに焦点を当てる。 あなたはすべての様々なコンフィギュレーションを繰り返す必要はありません とコードの分離と書き換えたコード あなたが頻繁にあなたがウェブサイトを作っているときに実行しなければならないこと。 アイデアは、フレームワークを使用すると、より高いレベルのコードを記述することができることである 下位レベルの詳細を気にせずに。 下位レベルの詳細は、のようなものかもしれません ユーザ入力データをクリーニングを扱う。 それはあなたが本当に心配する必要はありませんものね。 あなたは、あなたのWeb​​の割り当てが約実際に何であるかに焦点を当てる必要があります。 これは、定型的なコードの多くを排除します。 それはあなたのプロジェクトのためのアーキテクチャです。 >>最も人気の一つは、モデル - ビュー - コントローラになります 私は2番目にについて話をするつもりがある。 と多くの時間は、これらのフレームワークは、一連の手順を具体化、 規則、および使用するためのベストプラクティス ようにするには、Webフレームワークを採用するとき あなたは、特定の方法でコードを記述する必要があります そしてそれは、一般原則合意したセットの 一般的であることが受け入れられている社会による コー​​ドを書くための良い方法。 それは、より使いやすく、コードがより保守します などなど。 そして最後に、私が欲しいものは、フレームワークについて強調する ライブラリに対する制御の反転についてのこの考え方であり、事はこれです。 ライブラリとフレームワークとの間の違いは、ライブラリと あなたはまだメインプログラムを書いている、 あなたは、ソートのライブラリを呼び出すしている あなたのために何かをするライブラリ呼びかけ。 ライブラリとフレームワークの違い フレームワークは、コントロールで始まりますということで、 そしてそれはあなたのコードを呼び出し、 だから、と考えることができます - それはフレームワークと呼ばれるのはこのためです - フレームワークは、あなたのコードのために、このフレームと構造を提供し、 あなたが穴を埋める、 これは第二に、より明らかになるであろう あなたが見るとき私は、フレームワークのコンテキスト内でコードを書き始める。 あなたは、私がギャップを埋めるんだことがわかります、 フレームワークは、すべての可動部分を制御の一種である、 そして私は、適切な場所に作品を配置する必要があります。 >>今日はKohanaの話をするつもりだ、 これは多くのPHPフレームワークの1つです。 Webフレームワークが存在し、そしてものは、事実上すべての単一の言語であり、 Kohanaのは間違いなくあるので、私はKohanaのピッキングよ 一般的にピックアップする最も簡単なPHPフレームワークとして認識。 それは、最も軽量です。 多くの、より多くの機能が付属してそこに他のものがあります しかし、彼らは拾うことがより困難になる傾向があります。 そして最後に、Kohanaのは、MVCアーキテクチャを採用しています。 それは我々が文字通りプロジェクトをビルドすることができることを十分に軽量だ 右ここ右あなたの目の前で、あなたはかなりのことができます かなり簡単に一緒に従う。 MVCアーキテクチャとは何ですか? これは、モデル - ビュー - コントローラの略で、 あなたは、コードを考えれば、多分あなたは、これまで書いてきた あなたのWeb​​開発のpsetの一部について あなたが書き込みを開始する際には通常、こののいくつかを見ることができるかもしれないが、 より複雑なWebアプリケーション、 これらの3つのセグメント間の分割はますます明白になる。 私は、一種のスタックとして、ここで、MVCを打ち出した そして、多くの場合、あなたは、人々がWeb開発にスタックの話を聞くよ、 これは、その概念を示すことである 各層は、それぞれの成分は、実際には通信しようと 2他のコンポーネントとの間。 誰かがクライアントまたはブラウザとしてあなたのウェブサイトにアクセスします。 彼らは、ビューのコードをあなたのプログラムと対話します。 ビューのコードは、コントローラと対話する。 コントローラは、モデルと相互作用する モデルは、SQLデータベースと対話する。 あなたが適切にあなたのコードを記述する場合との間にはホッピングはありません。 >>これらの事は何をしますか? このモデルは、基本的に、データを処理するコードの一部です。 あなたは格納するオブジェクトでは、データベースを扱うものは、 またはデータベースにこれらのオブジェクトを取得し、 それは、すべてのモデルが扱うだ。 たぶん、あなたは、データベース内のオブジェクトを持っている。 私たちは、ポストに関係するもののモデルを作成しましょう​​、 そのポストはそれにいくつかの属性を持つことができる。 あなたはこれらの記事を保存したり、記事を取得周りの機能を持っている可能性 またはなどなどポストとをフィルタリング、 それは、モデルが扱うのはすべてのコードです。 コントローラは、アプリケーションロジックの一種である、 異なる多くのことは、アプリケーション·ロジックに行くことができます。 あなたは別のAPIに話している場合は、 あなたがアプリケーションロジックを扱っているところであるかもしれません。 あなたは、複数の異なるモデルからデータを持ってきてしようとしている場合 しばしばコントローラによって処理されてもよいこと、いくつかの方法でそれらを組み合わせることがある。 例えば、Facebook上で、あなたの友人の誰かであれば、 その関係を確立する、おそらくその行為 コントローラによって行うことができる。 >>そして最後に、ビューでは、実際に見たものを生成だコードです。 多くの時間、私はCS50のpsetを考える 彼らは本当に、これらの3つの事を分離するためにあなたたちを奨励していない。 おそらく、一番上にある場合に、この大きな、長いファイルがあるでしょう あなたには、いくつかのSQLクエリを作成し、おそらくいくつかの処理を行う データ上では、データベースから取得し、 そして、あなたは一番下にあるすべてのHTMLを持っている。 そして、あなたのようにあなたがより多くのページを作成することがあります あなたはまた、いくつかのコードの繰り返しを持っているつもり、としていること、 ことは、あなたのファイルが本当に大きくて長くなっている と管理が手に負えなくなります。 MVCはとてもよく考えられている理由 多くの理由のためである。 まず最初に、関心事の分離と呼ばれるものです。 これはあなたが持っているという考えである - 理想的にコードの1枚は、1のことを行う必要がありますし、本当によくそれを行う、 あなたは本質的に異なることを行うコードの断片を結合するべきではありません。 例えば、コードとモデルコードを表示、 彼らは本当に関係している必要はありません。 彼らは、同じファイルである必要はありませんので、あなたは、それらを分離することができたとき ので、メンテナンスが簡単です。 >>他の事はコードの再利用です。 あなた自身が、同じSQLクエリを記述するか、に見つけることが 1機能に抽象化することができ、同様のクエリ、 それはモデルとコントローラの背後にある考え方ですが、 プロジェクト内の別の場所で再利用することができます別の関数でそれを有している。 そして最後に、それは、あなたのコードを、乾燥に縛らだ または自分自身を繰り返していない、自分を繰り返さないでください。 これは開発中で、非常に分かりやすい。 あなたは、あなたがあなた自身を繰り返している場合ので、あなた自身を繰り返したくない場合は常に、  それは維持するために多くのコストがかかります。 あなたが1のものを変更したい場合は、どこにでもそれを変更する必要が、 それはバグにつながり、それはひどいものだ。 >>すべての権利。 まったくこれまでにKohanaのについての質問? 素晴らしい。 今、私たちは、ライブコーディングセッションに飛び込むつもりだ、 うまくいけば、すべてがうまくいく。 私は基本的にこのウェブサイトを構築するつもりです 私のリモートサーバの一つであり、あなたたちもできることを途中で Webサイトを参照して、ウェブサイトにアクセスし、 また環境は、私のリモートマシンよりも優れて構成されている、 代わりに、OS XのLinuxを実行しているので、 我々は文字通り開始するつもりだ。 KohanaFramework.org。 私は、Webサイトからコードをダウンロードするつもりです。 私は、リンクのアドレスをコピーするつもりです、 私のサーバーにアクセスし、それをダウンロードし、 そして私はそれを抽出するつもりです。 [学生]は、テキストを作ることができる最大のものは何ですか? [ブランドン劉]は良いことですか? [学生]ええ、それは大丈夫? [ブランドン劉]なんとかということです。 私は、ZIPファイルをダウンロードし、Kohanaのというディレクトリにそれを解凍した そして我々は、そのCS50-Kohanaの名前を変更しようとしている とのは入ってみましょう 素晴らしい。 ここでは、異なるファイルの束を参照してください。 あなたのほとんどは無視することができます - ここでの一つ一つのファイルを介して行くつもりはない判断に苦しみ 私たちの時間的制約のため、 一般的にはあなたがKohanaの、あなたが最初に行うことをインストールすると、 あなたがディレクトリに移動され、 あなたは、基本的にはいくつかの環境テストやその他もろもろをやる 確認するために、ご使用の環境が適切にKohanaのを実行するように設定されている すべてが大丈夫であることを確認してください。 あなたは、ほとんどのものが渡され見ることができますが、一般的には、常にこの1問題に遭遇 それはいくつかのディレクトリが書き込み可能でないことを不平を言う場合には、 それが原因一部のアクセス権のためです。 私は、あなたたちはCS50でのファイルのアクセス権について学んだどのくらいかわからない あなたがWeb開発を行う場合、あなたはこの問題に多くのことを実行するつもり。 私はそれを書き込み可能にするつもりだ そこに私達は行く - と私は私もしなければならないと思います。 >>わかりま​​したので、今はすべてが合格見ることができ、 今ではinstall.phpをファイルの名前を変更することを教えてくれます。 私はinstalled.phpするinstall.phpをファイルを移動するつもりです、 そして今、私が更新すると、 それは私にいくつかのエラーを与える、およびデバッグの出番これです あなたが実際に起こる何が起こっているのか見ることができる場所です。 ものが、デフォルトである、Kohanaのはことを前提としています あなたのプロジェクトは、ドメインのルートディレクトリにあり、 そう、それはあなたがdemo.brandonkliu.comにあると期待しています。 我々は、それがサブフォルダに実際だと、それを伝える必要があります。 それは、CS50 Kohanaのというサブフォルダにあります。 ことは、それがCS50-Kohanaのを誤解だ、である 私は2番目にあなたに説明します何か他のもの、など。 しかし、私はそれが予想されることだ何かを教えなければならない。 私たちがやろうとしていることは、我々はbootstrap.phpのと呼ばれるこのフォルダに行くつもりです。 そのさまざまなことが多く設定されているコンフィギュレーション·フォルダです。 私はそれを開く。 多分私がやります最初のものの一つは、タイムゾーンを変更です。 >>そして見てみましょう。 AHA!ここ。 ここで別のコンフィギュレーション·ことわざの束があり、 しかし、私が探している1は、ベースURLと呼ばれるこの事です そして私はそれがKohanaのに設定され得る、デフォルトでは、 しかし私は、CS50-Kohanaのにそれを変更するつもりです そして私はそれを修正すべきだと思う。 はい、素晴らしい。 デフォルトでは、それは、それが言う、働いていることを確認しに "Hello World。" それはどこから来たのか?どのように我々はハローワールドになったのですか? 場所を正​​確に、実際にそれを書いたコードがある? それを理解するために、私は、ルーティングと呼ばれるこの概念を紹介します。 ほとんどすべてのWebフレームワークは、ルーティングと呼ばれる概念があり、 特定のURLをマップするソフトウェアの一部である お使いの枠組みの中で、コードの特定の部分に。 あなたには、いくつかのURLを持っている場合は、次のようなfoo.com /ブログ/すべてのいくつかのURLにアクセスしてください。 その後、何フレームワークが何しようとしている - あるいは、少なくとも何Kohanaのが何しようとしている - それは、コントローラのブログと呼ばれるクラスを見つけるために起こっているされている そしてそれは、すべての関数という名前のアクションを実行するために起こっている。 私は、クラスや関数について話している知っている、 と私はあなたたちはクラスや関数をカバーしていない知っている まだCS50において、しかし、今のところ、 あなたは機能のほんのグループとしてのクラスと考えることができ、 関数を一緒にグループ化する方法。 それは本当にあなたが知る必要があるすべてです。 >>今、私たちは私たちのフォルダ構造を見れば、 アプリケーションフォルダ内のクラスと呼ばれる別のフォルダがありますが、 そして他のフォルダは、コントローラとモデルと呼ばれています。 あなたがコントローラのフォルダ内を見ると、 我々は、ウェルカムというファイルがあることがわかります あなたはここで見ることができ、コントローラようこそ呼ばれるクラスである ·行動指標と呼ばれる機能がありますが、 そしてそれは何を行うことは、それがハローワールドへの応答の本文を設定している。 コー​​ドが書かれているところです。 他の質問はよく、私は行きませんでした、である 何とか、何とか、何とか、/歓迎/インデックス。 どのように私はここで終わるのですか? まあ、それはいうだけの理由です ここに私たちのブートストラップファイルの下部にある 我々は我々のルートを設定する場合、 あなたは彼らがあなたのためにいくつかのデフォルト値を設定することがわかります。 デフォルトのコントローラは歓迎です。デフォルトのアクションはインデックスです。 我々はそこに何も入れないときに自動的にようこそコントローラに行ってきました理由です とindexアクション。 >>すべてがこれまでに理にかなって? 今、あなただけのコントローラーに行く以上のことを行うことができます と具体的な行動。 また、コントローラにパラメータを渡すことができます。 単なる一例として、 私はあなたを表示するには、このコントローラに別のアクションを追加するつもりです。 それはあなたがそれを与えるどのようなことを伝えるために起こっているので、それでは、エコーこのアクションを呼びましょう、 ので、私は基本的につかむつもりだ ルーティング·プログラムに私を介して送信されることになるだろう、パラメータ、 あなたがここに見ることができるように、 右こここの行は、あなたはそれを見ることができます これは、基本的には、コントローラを持っており、あなたが/を持っていることを意味し、 そして、あなたはアクションを持っていて、別の/を持っている それはパラメータになるだろう、と我々は、この名前のIDを持っているので、 山括弧の中、それは我々がこのパラメータIDを命名していることを意味します。 後で私のコントローラのコード内の私は、そのパラメータのホールドをつかむしたい場合は、 私は、IDという名前のパラメータを見つけ、私が書いたコードを使用することができます。 それは私がここでやったことだ、と私は戻って言うつもりです、 それを「あなたは言った」。 だから今、私は当社のウェブサイトに行けば、 私はcs50-kohana/welcome/echo/Helloooo--に行く ああ、その通りです。 私が取り残さ1ステップがある。 これは、ライブコーディングのアイデアの一部です。 こちら 1のことです。見てみましょう。 だから、通常はこれらのWebアプリケーションの多くでは、デフォルトで あなたのURLでこのindex.phpをの事を含める必要が、 アイデアは、index.phpのエントリポイントの一種であるので、 アプリケーションのが、もちろん、 それは一種の迷惑持つことです。 あなたは、index.phpのがあなたのURLに表示したくない そして箱から出してほとんどすべてのWebフレームワーク このindex.phpの問題を抱えている、 ので、あなたはそれを削除することができるようにするいくつかの措置を取らなければならない。 ので、この場合には、 私たちがやろうとしていることは、我々は。htaccessファイルと呼ばれるファイルを使用するつもりである、 これは、Apache Webサーバに固有のものです そしてそれは、書き換えたURLのようなことを行うことができます などなどのURLをリダイレクトして、 とKohanaのは、我々が使用できるテンプレート。htaccessファイルを提供するのに十分いいです。 ご覧のように>>、example.htaccess呼ばそこにファイルが存在し、 そして我々は。htaccessのにそれをコピーするつもりだ。 私はこれを開いて編集するつもりだ、 そして基本的には異なるものの束を行います。 あなたが見てみたいことがあり、キーの行はここです。 アイデアは、これは言ってルールを設定していることである 「さて、あなたは、それにindex.phpの前に付加を入力何でも。 " あなたはそれを見ることができます。 *何にでも合う、何を意味し、 その後、第2の部分は、index.phpを/ 0ドルです と0ドルは、以前マッチしたことをいう。 それは理にかなっていますか? しかし、私が変更したい、本当に重要なことは、この書き換えベースを変更している これは、URLベースである。 あなたから作業している場合、それは一種の前提としています。 私はそれにCS50 Kohanaのを追加するつもりだ、 そしてそのように、今私はindex.phpをを削除した場合、 それが動作するはずですし、私はいくつかの番号を追加するつもりだ それが実際に仕事をしたことを表示します。 旨そうだな。 >>これまでのご質問? [学生]それはどのように123を作るために知っていましたか? その引数がある? その通りです。あなただけの引数と同じように考えることができます。 しかし、奇妙なことは、しかし、それはKohanaのはそれをしない方法です 彼らは正確に引数のようにそれをしないです。 あなたはこのようにそれをつかむ必要があります。 あなたがリクエストオブジェクトを取得し、IDという名前のパラメータとして、依頼する必要があり、 その名前IDは、そのブートストラップファイルから来ている 私は以前に示した、と名前IDがこれらの山括弧であったこと、 それはあなたがこれらのパラメータをつかむ方法を説明します。 素晴らしい。 その他のご質問は? 私が言ったように、コントローラは、彼らは、アプリケーション·ロジックを処理 だから、あなたがthat's見ることができる1インスタンスの - それは非常に基本的だが、それはまだ、アプリケーションロジックですが、 パラメータをつかみ、新しい文字列を作成するという考え つまり、 "あなたは、何とか言っ"とし、あなたにその背中を吐き、と言います。 一般的に何をやっていることは、別のコントローラを作成することです。 あなたのウェブサイトのさまざまな部分のための別々のコントローラを作成します。 >>今日は非常に簡単なウェブサイトを作るつもりだ、 それは非常に基本的なブログになるだろう。 私達はちょうどブログで記事を新しいコントローラをするつもりだ。 しかし、私は、また、ブログの記事にコメントを追加した場合 そして私はおそらくそれらのコメントのための新しいコントローラを作成したいと思う。 私は、ユーザーを追加したい場合、私はおそらく、それらのユーザーのための新しいコントローラを追加することになり、 一般的に、考え方は、あなたが新しいモデルを持っているときはいつでも、 あなたが扱っている新しいデータオブジェクト、 あなたは、そのデータ·オブジェクトのための単一のコントローラを持っている。 今日は唯一の1データ·オブジェクトを操作するつもりだ、 それはポストになるだろう、 そしてまた、あなたは、テーブルに対応するデータオブジェクトと考えることができます。 一般に、各テーブルには、データオブジェクトの1タイプに対応する、 そのポストの表は、1 Postモデルを持つことになります これに対応する1ポストコントローラを持つことになります、 ユーザーに対して同じ、コメントを求めると同じ、などなど。 そして、それは一般的な経験則です。 あなたはそれとは異なる場合があり、特殊な例があるように起こっている、 しかし、あなたがやっていることになるだろう何の時間の90%、 そして私は、我々が今日やっているつもりだ何を説明します。 1我々は戻ってコードに飛び込む前に、より多くのコンセプト、 オブジェクトリレーショナルマッピングのこのアイデア。 >>君たちはすでにWeb開発PSETを行っている、 あなたは、あなたがSQLクエリを作成しておくことを見てきました そして、それはあなたに戻って何行があります。 あなたは、いくつかの名前でそれらをこれらの行を取得し、あなたのインデックス カラムとテーブルの名前、 それは、あなたがそれを操作する方法を説明します そしてそれは少し煩雑になる可能性があります。 しかし、また、あなたは、データベース内の関係を持っている場合、 例えばのように私がコメントや投稿があれば、 多分私は、コメントの親柱をつかむしたい。 私はSQLで行だけを使用する場合は、私が得ることができるすべてのIDです 親柱のではなく、実際のポストそのもの。 我々はコーディングしているときには、私たちが実際に欲しいのは、実際につかむことである  親は時々自分自身を投稿してください。 どのようなオブジェクトリレーショナルマッピングしている とデータベースクエリの結果を受け取り とで動作するように非常に良くあるあなたのためのオブジェクトに格納します 平野配列や行よりも。 >>たとえば、今私は、おそらくコメントがある場合、 そして私は、その親のポストをつかむしたい、 そして私は多分矢印ポストコメントか、 それは実際に私にpostオブジェクトを与える 実際の親柱だけでなく、いくつかのIDに対応する、 これ、私はそうでポストをつかむために、別のSQLクエリを使用して行う必要があろう 面倒で不必要である。 さらに、オブジェクトに、これらすべてのデータ行をマッピングすることにより、 また、オブジェクトに複数の機能を添付することができ、 ですから、例えば、私はクラスが本質的な機能をグループ化したものかについて話しました。 あなたがそのように考えることができます。 例えば、多分私はこの記事のオブジェクトを持って、 そして多分私はそれに接続されている機能のいくつかの並べ替えをしたいのですが つまり、基本的には、最近投稿されましたと言われます? それがtrueまたはfalse、最後の一週間以内に投稿されました? そして、それは私がそのオブジェクトに添付することができ、関数の、 そしてそれは、同じ場所にそれを持って、本当に便利です あなたが作成できるさまざまな機能が集まってい これらのオブジェクトの、それはクラスに添付することができるように、本当にうれしいです、 オブジェクトに、あなたは自分のデータベースからの行を持っていた場合のに対して、 そしてあなたが本当にそれに任意の機能を接続することはできません。 それは文字通りのデータです。 すべてのそれについての質問? オームズは非常に一般的なWeb開発である、 とのORMの異なる種類がたくさんあり​​、 とKohanaのは、独自のORMを持っています。 それは非常に基本的だが、あなたはそれがどのようなものの味を取得します。 >>私たちのブログの記事のためのモデルを作成してみましょう、 そして我々は明らかに最初に必要なことは、実際のテーブルを作成することです 我々のデータベース内で実際にそれらの記事のための私達のデータを格納する。 私はするつもりだ最初の事はphpMyAdminにに行くです。 あなたたちの前にはphpMyAdminを使用することがありますか? さて、素晴らしいので、あなたたちはすでにそれが何であるかを知って、 と私はKohanaの投稿と呼ばれる新しいテーブルを作成するつもりです、 それは本当に簡単になるだろう。 私は再度ログインする必要があります 我々が今日やろうとしているすべては、作者と体を持っている、 単純に保管してください。 私は、そのテーブルを作成するつもりです、 そして今、我々はちょうど私たちの記事を表すテーブルを持っている 私達の著者と私たちの体のための2つのフィールドを持つ。 私は今何をしようと思って他の事はある それは、データベースに接続する方法を知っているので、私のWebアプリケーションを構成する、 これは、繰り返しますが、すべてのWebアプリケーションで行う必要があるでしょうものです。 あなたはそれをユーザー名とパスワードを伝える必要があります およびデータベースの名前などなど 実際にデータベースに接続する方法を把握する。 Kohanaのでは、我々は、データベースモジュールと呼ばれるものを持っている と設定フォルダには、データベースと呼ばれるこのフォルダがあり、 ご覧のように、ここで設定しなければならない設定の束がある それを伝えるために、ユーザー名とパスワードは何ですか データベースに対してので、私は実際にそれに接続することができます。 そして、私はあなたたちが実際に知られたくないので、 私のデータベースのユーザー名とパスワード、 私は、私はすでにそれをすべて設定したファイルを持っている、と私はコピーしてそれを上に貼り付けることにします。 素晴らしい。 大丈夫。私はそれは私がする必要があるすべての設定だと思う、 しかし、見てみましょう。 我々はそれで働き続ける、と何かがクラッシュした場合でしょう、 その後、我々はそれを修正します。 今、私は何をするつもりだと、私は新しいコントローラを作成するつもりです。 または実際に、申し訳ありません。 最初に私は新しいモデルを作成する必要があります。 私は、Post.phpという新しいモデルを作成します そして私たちがやろうとしていることは、我々はクラスModel_Postそれを呼び出すつもりです。 上のハイライトいくつかの構文を取得し、 と私が言うとき、それは基本的だ」ORMは、拡張 " いくつかのより多くのオブジェクト指向プログラミング、 これ残念ながらあなたたちはまだCS50に学んでいない、 それは取りに非常に簡単です。 それは、私にこのORMパッケージで提供されていますこのすべての追加機能を提供します そして私は、自由のために余分な機能やその他もろもろの束を取得 その2番目の中のビットが表示されます。 >>今実際に私がやらなければならないのは、このクラスを作成することです。 私も任意の関数か何かをする必要はありません、 私は、テーブルを表すクラスを作成しました、 そして私は、このORMクラスを拡張してきたので、 私は自由のために何かの束を取得するので、今のあなたは何よりセットアップを設定する必要はありません。 そして今、私は何をするつもりだと、私は新しいコントローラを作成するつもりですが、 その私がblog.php名前を付けるつもりだ、 そして私は、ウェルカムコントローラをコピーするつもりです ので、私はいくつかのものを再入力する必要はありませんが、 そして今、私はこの名前を変更する必要があります。 今、私はすべてが出て動作していることを確認するためにテストするために何をするつもりだ何を、 私は自分のデータベースからの最初の記事をつかむつもりだ と、画面上のポストの本文を印刷します。 私が最初に行うつもりだが、私は記事を保存するつもりされていることを行うには 変数にその私たちがやろうとしていることである - Kohanaの中で何をやっていることはpostオブジェクトをつかむことです それはちょっと面倒なのですが、あなたは、ORM ::工場と呼ばれるこの事をしなければならない そして、あなたがしたいモデルの名前を渡し、 そしてそれはそのモデルを表すのORMオブジェクトを返します。 そして、同様に私たちはORMオブジェクトを拡張するとき、言った、 我々は自由のためのすべてのこれらのメソッドを取得するため、例えば、 私たちは "、すべて見つけること"と呼ばれるこの新機能を入手 その自動的にデータベース内のすべての単一のポストを返し、 これはかなり便利です。 >>そして今の体で私は返すつもりだ 最初の投稿とそのボディを返す。 そしてもちろん、私は記事を作成する必要があり、 それでは、新しいポストを挿入してみましょう。 私は、「ブランドン、私の非常に最初の記事を。」と言うでしょう 素晴らしい。 そして今、我々はブログに行くことになるだろう すべてがうまく動作するかどうかと - ああ、これは、再びいくつかの他のダムファイル許可の事である。 1秒に保持します。それは一種の不条理だ。 そこに私達は行く。大丈夫。 私は、その権限の問題を修正しました。 これは、いくつかのファイルといくつかのログを作成しようとしていた、 と権限は、再び、適切に設定されていなかったので、私はそれを作った ので、これらのファイルは書き込み可能、​​実行可能だった そのため、実際に物事にログを記録できた。 今では、「クラスのORMが見つかりません "、と言って私に別の例外を与えている 私は別のステップを忘れてしまったので、それはです。 それは残念だ。 ブートストラップ用フォルダファイルでは、これらのモジュールはここにあり、 これを有効または無効にすることもできます。 これらはあなたが使用することを選択できるさまざまな機能の束である 並べ替えいいですKohanaの内。 >>例えば、それらは、認証モジュールを有する これを使用して、ユーザーを認証するために使用することができます。 実装したい場合、それらは、キャッシングモジュールを持っている アプリケーション高速に動作し、その他もろもろを作るためにバックエンドをキャッシュするのいくつかの並べ替え。 我々は、データベースとのORMモジュールを有効にする必要があり、 ように私は言ったので、私たちは、明らかに、データベースを使用している 我々はまた、ORMモジュールを有効にする必要があります 我々は持っていると便利な追加の機能を持っているしたいと思いますので。 私がしなければならないのは、これらの2行のコメントを解除している 私はリフレッシュした場合、今、それは私に別のエラーを与えた。 これは、「クラスModel_Postが見つかりません。」と言う さて、これは持っているのは良い問題です。 見てみましょう。 それを公表する。 いいえ待って。 ああ、親愛なる。 それはそれを見つけることができない理由を私は知らない。 それは本当に不思議だ。 私はここにこのクラスを持っている。 OH - 私は私が持っているかもしれませんね。 私はダムです。私はPHPのタグを追加するのを忘れ。 理由です。 今私は、私だけなかったことを1の変更を元に戻す必要があります。 >>オーケー。そこに私達は行く。 それは本当に愚かだった。私はオープニングのPHPタグがありませんでした。 あなたが見ることができるようにしかし、今では右、正常に動作している? 私たちは、1件の記事があります。 我々は最初の投稿つかんで、そして今、我々は、その本体をプリントアウトする。 素晴らしい。幻想的。 ご不明な点、これまで? いや?ご質問? わかりましたので、我々だけで、非常に基本的な、Postモデルを作成しました そして我々は、後でいくつかの機能を追加するつもりだ。 私たちは、検証とフィルタリングを追加することができます。 検証はものの一つである フレームワークは本当によく、本当にあなたのために解決することを、 と私はあなたたちはあなたのCS50のPSETのためにこれをしなければならなかったとは思わない、 しかし、あなたの最終的なプロジェクトのためのWeb開発を行う場合には、 おそらく、検証のいくつかの並べ替えをしたいとしている、 空白のユーザー名を持っていないような、 多分、少なくともいくつかの長さのパスワードを持つ、そのようなこと。 そしてそれは、自分でこれらのことを実現するために、本当に面倒な そしてほとんどすべての単一のWebフレームワークはあなたのためにそれをしない あなたは非常にクリーンな方法でそれを行うことができます。 あなたは一般的に、これらの検証ルールを表現する場所とモデルがあり、 それは、モデルが有効であるか否かを検証するためだ。 >>しかし、今のところ、我々は、後になるまでそれを置くつもりだ 今の私たちは別の部分で作業するつもりだ、 そして我々は新しいビューを試してみて、するつもりだ それは、すべての投稿が一覧表示されます。 すべての投稿を一覧表示するための新しいアクションを作る際に必要な手順 すべての投稿のリストをつかむことです して、ビューを介してすべての投稿のリストをレンダリングします。 右ここでは、幸いなことに、我々はすでにすべての投稿をつかん この最初の行を使用して、すべての機能を見つける、 そして今、私たちがやろうとしていることはこれまでのところです 私は、直接応答の本文を設定してきた 文字列を渡して、今私は、ビューを使用したい、 ちょうどこれを行うビューとの違い 私は素敵な、大きなHTMLテンプレートを持つことができるビューであり、 そして、私にできることはそれ特定の変数を渡している して、ビューが自動的にテンプレートを取り込みました これらの変数を使用した。 私がやることは、私は新しいビューを作成しますです そして私は "、ブログ/インデックス"のようなビューの何かに名前を付けます と私は基本的に、これをバインドするつもりだ - ああ、私は何を書いています? 私の脳は、どこか別の場所である。 私は、ビューに変数のポストをバインドするつもりだ ような方法は、ビューは、この後の変数にアクセスできます。 >>だから今、私は、このビューを作成する必要があり、 そこでここでは、「ビュー」と呼ばれるこのフォルダを持っている 最初、私は呼ばれるの下に新しいフォルダを作成するつもりです "ブログ" これはいいです。そうすれば、我々は我々のビューの素敵な階層構造を持つことができます。 そして私はそこに呼ばれる別のファイルを作成するつもりです "index.phpを。" 素晴らしい。 実際に、のは、ここでそれらの両方を持ってみましょう。 ビューファイルを作ることは、おそらく、このすべての最も簡単な部分である、 これらは、おそらくあなたはすでに精通しているものです。 私たちは本当にシンプルなものをやろうとしている、 と言って開始」のブログ投稿の私のリスト。 " その後、我々は通過することができ、 そして我々はposts配列を反復処理できる、 一つ一つのポストをつかみ、のようなものを言う - 多分行を追加します。 して、著者と本文をプリントアウトする。 つまり、これまでは意味が? そして、それが動作するかどうかを見てみましょう。 何も起こらなかった。 私はなぜだろうか。 ああ、私は1ステップを逃した。私の非常に愚かな。 私は、ビューを作成しましたが、私は応答としてビューを設定していない、 だから、1のより多くの事をしなければならない。 あなたは「このレスポンスボディ」を行うと、ビューであるためにそれを設定する必要があります。 そこに私達は行く。 我々は我々の見出しがあり、その後、我々はポストを持っている、 ちょうど蹴りのために、のは別のポストを挿入してみましょう 私たちは、リストを見ることができます。 そして、これらの2ポストを挿入し、 そして今、私はページを更新した場合、 ここでは、これらすべての記事を参照してください。 >>それは今のところ意味があるか? うん、質問?大丈夫、ああ。 ご覧のように、我々はすべてのこれらのコードを分離することができました 異なるセクションにしてから、あなたはそれがビューコードのほとんどは明らかです見ることができます。 このビューを表し、ここで、ファイル、 それだけでデータを表示する、データを表す気。 これは、データのいくつかの並べ替えを渡され、それがない、すべてはあなたにそれを示している。 コー​​ドの他のすべての部分では、それのいずれかを心配する必要はありません、 と同様に、ビューのコードは、については何も心配する必要はありません などなど、データベースとのアクセス方法、 これは本当に良いですし、コードが多く、保守性もあがります。 私が言ったように、ビューは、彼らはその中でダイナミックだ それは1ファイルだが、それは、異なるビューを生成します あなたが実際に渡す変数に基づいて、 さらに、別のヘルパー関数がたくさんあり​​ます あなたは、あなたがより速く、コードを書くのを助けるために使用できる その私はちょうど第二にあなたが表示されます。 うん。 [学生]だから、0ドル、右のコントローラですか? その二つ目。 質問は、0ドルのコントローラはありますか? 0ドルは、私は右ここで作成した変数です。 私は、最初のビューを作成しました。私はいくつかの変数に割り当てられている。 それから私は、この関数にそれを渡されたレスポンスのボディとして設定します。 それは理にかなっていますか? [学生]だからビュー::工場で、クラスのような図である またはライブラリ[聞こえない]ファクトリ関数? 質問は、ビュー::ファクトリ関数についてです 基本的にこれは、本質的にいくつかのより多くのオブジェクト指向プログラミングである。 「ファクトリー」ビューがビュークラスであり、呼び出されたメソッドを持っている それは名前だオブジェクトつかむための方法だ」ブログ/インデックス。」 そして、それはいくつかのより多くのオブジェクト指向プログラミングのものです 私はあまりここに入るつもりはないことを。 今明らかに、我々は、新しい記事を作成したい、 しかし、我々はデータベースを介してそれをしなければならないしたくない、 私たちは新しい投稿を作成するための新しいアクションを作成しようとしている、 そして我々がしなければならないものがたくさんある。 >>私たちがやろうとしている最初のもの - のこれらの事を一つずつ取り組むましょう。 私たちがやる最初に我々は、フォームを作成するんだです 新しい投稿を挿入するための、 私はまた、最初の新しいアクションを追加するつもりだ その新しいアクションを追加すると同じくらい簡単です お使いのコントローラに新しい機能を追加し、 今の私は、非常に基本的な何かをするつもりだ ただ、このビューを取得し、それを投稿、あなたのためだけにそれを表示する。 して、今、私は新しいビューファイルを作成するつもりです、 と私はいくつかのものを書き始めるつもりです。 何Kohanaの約うれしいです、彼らは別のヘルパー関数の多くを提供することである あなたがより簡単にビューのコードを記述するためには、 これらのヘルパー関数やヘルパーモジュールと1 周りのフォームを書いている。 フォームを作成するための、私は実際に直接、任意のHTMLを自分で記述する必要はありません。 君たちは、HTMLフォームを書かれている。 あなたはそれがフォームを書くことが本当に、本当に苦痛と面倒なことができる方法を知っている。 それは、とても幸運なことに、楽しいではありません 我々は基本的にKohanaの者を使用してフォームを作成することができます 私たちのためにそれを行うにはヘルパー関数を形成する。 私たちは、基本的に我々が持っている一つ一つのフィールドを持っているつもりです、 そう、著者用とボディ用1。 私たちはラベルを持っているつもりだし、我々は、入力を持っているつもりです。 >>そして最後に、我々は提出物を持っているつもりです。 ご覧のように、これを書くのは非常にきれいです ちょっといいですすべてが乱雑なHTMLよりも。 確かに、それよりも、それもきれい持っている他のWebフレームワークがありますが、 しかし、少なくともこれは、HTMLを自分で記述するよりも優れています。 素晴らしいので、これはあなたが見るものである。 つまり、ちょっと乱雑だ 私はそこに改行を追加するつもりだ それは少し立派に見えるようにする。 さて、もちろん、それはまだ本当に、本当に悪いに見えますが、私たちはただ集中している 美学に今ではないため、機能上。 すべてを行う時間がない。 ご覧のように、今、我々は超定番の形を持っている、 どの種類の素晴らしいです。 私は言うだろう、このコードは、自分自身を形成して、HTMLを記述しようとするよりもクリーンで、 だからうれしいです。 次は何ですか? 今、私たちはアクションでのことを行う必要があります。 あなたがHTMLフォームを書き、通常時に、 あなたはそれがフォームを送信するために起こっているところにそれを伝える必要があります。 ほとんどのWebフレームワークではデフォルトで、 、それはまったく同じURLに提出し、その事がある あなたは新しい/ブログ/にGETリクエストを送信した場合、 それはあなたのフォームを表示する必要があり、 しかし、あなたはPOSTリクエストを送信した場合に/ブログ/データで新しい、 それは実際にその記事を保存するようにしてください と、それに何かをする。 >>私たちがやろうとしている何ですか 基本的にすべての我々はそれがPOSTリクエストまたはGETリクエストのかどうかをチェックするためにしなければならない 設定可能なPOST変数が何であるかを確認することです。 ポスト変数が設定されている場合と、我々は試してみて、新しい投稿を作成しましょう​​。 繰り返しますが、私たちはこれを行うには、 それは新しい投稿を作成し、我々は文字通りになるだろう このように、そのフィールドを設定し、 そして、我々はそれを保存しようとしている。 そして私はリダイレクトするつもりだ インデックスページにそのように彼らは再びポストの私達のリストを見ることができます。 のはそれを試してみましょう。 私は "、ブランドン"を言うよ してから記事を提出し、すべてがうまくいけば、 ご覧のように、それは、インデックスページに私をリダイレクト 私が一番下までスクロールすると、我々は新たに挿入されたポストを持っている。 YAY! うん、質問。 [学生]何を正確に同じことを入力した場合 あなたが以前に入力した? それは確かにあなたが重複していないかチェックしていますか 同じ提出? なぜならデフォルトでは、デフォルトに - フォーム内の​​まったく同じデータで入力した場合には申し訳ありませんが、質問です そして、それはあなたが重複したオブジェクトを挿入できるようになり、それを提出する 重複したエントリ、本質的に? 今のところ、はい、それはあなたがそれを行うことを可能にする、 データベースにそれが完全に重複する行を持つことは完全に有効なので、 それが懸念される場合しかし、あなたは、たとえば、検証を追加することができ、 これはすでに存在しているものとまったく同じであるかどうか確認して、 それは無効なオブジェクトだと言う、 そして、あなたもあなたのエラーメッセージを指定することができます 「これはすでに存在するため無効」またはそのような何かと言う。 しかしこの場合、私は重複なものを作成することができます。 それでは、試してみて、いくつかの検証を追加してみましょう。 これに伴う問題は、今ある 私は、文字通り完全に空白のポストに提出できた。 私は今、このボタンをクリックすると、そこに私達は行く。 あなたは本当にそれを見ることはできませんが、ここでは、この余分な行 私は、文字通り新しいポストを持っていることを示しています。 それはちょうど空白の作者とブランクボディを持っている、 私たちは、人々がそれを行うことを許可する必要はありません。 検証の出番です >>私は私のモデルオブジェクトに行くことができ、 そして今、私は指定する新しい機能を追加することができます 私は、このモデルに追加するべきか検証ルール それが有効であることを確認するか、指定する内容には、有効なポストであることが意味するのでしょうか? そして、私はそれが唯一の有効なポストだと言うしたい場合は、著者と体の両方 空白ではなく、これはあなたがKohanaの中でそれを行う方法です。 あなたは、「ルール」と呼ばれる新しい関数を作成 そして、あなたは基本的に連想配列を返す つまり、このオブジェクトの検証ルールを定義しています。 私たちは、配列を返すつもりしてから、私たちがやろうとしていることですしている それは、配列に行く」、著者は "と言う、 これと呼ばれる別の配列に行く「空ではありません。 " そして私は言うつもりだ」身体を。 " このため大丈夫、このための構文と構造 少し面倒で少し複雑に見えるかもしれません。 あなたがドキュメントを読む場合、それは、把握するのは非常に簡単です しかし、基本的にこれは、指定するために必要なことである いくつかの入力規則、および異なるルールがたくさんあり​​ます あなたが言うようにルールを追加することができますようKohanaのは、無料であなたを与えること それは、少なくともこの長さでなければなりません。 多分それは数値でなければなりません。多分それは英数字でなければなりません。 多分それはなどなど、最大でこの長さにする必要があります。 Kohanaのがあなたのために提供して異なるルールがたくさんあり​​ます、 あなたは、ドキュメントを見て、自分のウェブサイトに行くことができます あなたはあなたが行うことができ、すべての異なるものを見ることができます。 >>しかし、これは私がしなければならないすべてである、 そして今度は、何が起こるか見てみましょう 私は空白の記事を提出した場合。 何が起こるだろう?ああ、いや、私はエラーが表示されます。 私は、検証例外を取得します。 まあ、それは良いことだ。 それは私のモデルは無効であることを私に言った、 しかし、私は例外を表示しない 私のユーザーに彼らは正しい、無効なものを提出しようとすると? 私は彼らに友好的なエラーメッセージのいくつかの並べ替えを提供したい 何かがうまくいかないとき。 私たちがやろうとしていることは我々がしようとしているです TRYキャッチループ内のすべてを包む。 実は、私はこれもまだ習っていないものだと思います CS50で、C、プログラミング言語C、なぜなら 例外が、ほとんどすべての単一の言語を持っていません ので、本当に、本当に簡単に説明すると、例外があります 例外は、コードの一部がことができるものです 何かがうまくいかないときに例外をスローし、 アップが、その後、多分、コードのいくつかの他の作品に高い その例外をキャッチし、それに何かを行うことができます。 >>例えば、この場合、 モデルを保存しようとしているコードの一部、 「さて、このモデルは無効です "それは、モデルを検証し、それを言うなら、 それが例外をスローするだろうし、これはと同等の一種である C言語では、-1またはそのような何かを返すことがあります。 して、私のために、この機能、私のコード より高いレベルで、私はその例外を試してみて、キャッチすることができます そして基本的には「さて、私が例外をキャッチした場合、私は何をするつもり?」と言う または私はその例外をキャッチし、誰か高いアップをさせないように選択しなかった 例外をキャッチするか、誰もがそれをキャッチしていない場合には、 その後、プログラム全体は、クラッシュすると述べています 「何かがうまくいかなかった、と私はそれを扱うことができませんでした。 " >>しかし、私たちがやっていることは、あなたは、tryブロック内のコードの一部をラップで そしてその後も、catchブロックと呼ば​​れるものを追加 これ試してみて、発生する可能性があり、例外をキャッチするコードの一種である。 そして私は、この特定の例外をキャッチした場合 または無効化の例外が、その後、私は何をするつもりだことはある 私はエラーを設定するつもりだ - 私はそれは私がそれを行う方法だと思う - と私はいくつかのオブジェクトにエラーを設定するつもりです。 それは、この例外に当たった場合、その後私は何をするつもりだことはある、 それがリダイレクトしようとして、それがリダイレクトしない場合ではないが、 それがあれば、ブログから出てくるだろう と私が何をしたいか新しいこのブログを/ヒット。 エラーが発生した場合、私は、フォームに戻りたい そしてそれらのエラーが表示されます。 今、私が何をしたいのか、私はそれらのエラーに渡したいさ 表示します。 さて、私は、私はここのビューを持っていると思う 基本的に私は、彼らが存在する場合、これらのエラーを表示したい。 私はそのためのHTMLを書く前に、私は本当にすぐに行くよ このエラーは、変数ルックスの構造が好きなものをお見せし、 これは一般的にはお勧めします。 あなたが戻っていくつかのメソッドから何かを得る多くの時間、 Webフレームワークの一部の機能、 あなたは、変数がどのようなものかわからないが、 だから、それを操作する方法を知りません。 私は基本的にそれを印刷するために印字Rメソッドを使用するつもりです。 >>そして、あなたが見ることができるように、それは連想配列だ私に語った、 あなたは、この文字列をキー、著者、ポイントを持っている 著者は、空であって、かつ他のキー、体はいけません、 別の文字列へのポインタ、本文は空であってはなりません。 私はクールな、大丈夫、のようだ。 それから私は、配列を反復処理し、一つ一つのメッセージを印刷することができます。 これは、メッセージの束と連想配列のように、基本的だ。 「エラーが発生した場合、「私は何をするつもりだことはある と私は順序なしリストを作成するつもりです、 と私はすべてのエラーを反復処理するつもりです。 そして、これは、今私は、もう一度を提出しようとするつもりだ との私たちが得るものを見てみましょう。 今、私たちは、エラーのこの素敵なリストを取得、 これはまだかなり醜いですが、これは明らかに見栄えするようにフォーマットすることができ、 しかし、基本的な考え方は、ほんの数行のコードである 我々は我々のモデルを検証することができました、 特定のフィールドが空ではなかったことを確認して、 何かが間違っていた場合は、エラーメッセージのいくつかの並べ替えを返す 私は、ユーザーに戻って提示することができます。 また、あなたの検証をカスタマイズすることができます 実際には、エラーメッセージを持つことができるように、 それは、アプリケーション、またはそのようなものに、より具体的である。 すべてのことは、一般的にカスタマイズ可能です。 >>残念ながら、我々は時間が不足している、 私はここに住んでコーディングセッションを切断する必要がありますするつもりです。 私はあなたのために発揮したい、他の機能の束があります この例では。 たとえば、あなたのサイトにテンプレートを追加することができ、 ので、多分、適用するHTMLコードのいくつかの並べ替えがあります サイト内のすべての単一のページに、その代わりに貼り付けること 明らかに悪い習慣になり、使用しているすべての単一のビューファイルでは、 あなたは基本的に、これらのテンプレートを定義することができ、 してから、コントローラに「さて、私は、このテンプレートを使用しています。」と言う "すべての私のビューは、このテンプレートを使用しています。" そして私もあなたに発揮したい1最後の事 我々は、クロスサイトスクリプティングであるための時間を持っていないこと 基本的に私は、あなたたちは、おそらくCS50で見てきたと思う - 私はデビッドマランは、おそらくあなたは、通常注入することができる方法について話しましたと思います へのJavaScriptコードは、 - あなたはこのことについて話をしている? 多分?そうでないかもしれない? >>しかし、多くの時間は、あなたは、悪意のあるJavaScriptコードを挿入することができます 誰かのデータベースに、彼らはきちんとそれをエスケープしないと、 そして、彼らは戻って、ユーザーにそのデータを提示すると、 それはあなたが起こることをしたくない、ランダムなJavaScriptコードのいくつかの並べ替えを実行することができ、 と私はあなたがKohanaの内それをしたい方法を紹介するつもりだった。 それは実際には本当に、本当に簡単です。 私は、文字通り2秒で、今それを行うことができます。 あなたがしなければならないのは、基本的にこれらの事をラップされている この事でHTMLエンティティと呼ばれる。 そして、それは自動的に適切にすべての文字をエスケープします そして、この問題を取得しないことを確認してください。 [学生]あなたは間違って最初のテストを綴っ。 [ブランドン劉]ああ、おっと。 >>さて、それは私が今日のあなたと共有しなければならなかったすべてです。 これらのスライドを掲示しようとしているが、これらは一般的に あなたが本当にKohanaの使用を開始する必要があるのリソースのみ。 あなたがウェブサイトに行くことができます。彼らは、ユーザーガイドを持っている、と彼らはまた、APIエクスプローラを持っている。 私たちはあなたのために、彼らが持っているすべての異なる機能やヘルパー関数を探索することができます。 彼らは一般的にウェブサイト上で十分な情報を持っている あなたが始めるために使用し、Kohanaので軌道に乗ることができます。 多くのチュートリアルでは、外の、Kohanaのために、私が思うに、そこではありません 彼らはここのウェブサイトで持っているものなので、これはおそらくあなたの最善の策である。 しかし、あなたはWebフレームワークと一緒に行きたい場合は、 あなたは新しい言語をピックアップする必要はしたくない、 あなたは、比較的軽量であり、容易な学習曲線を持って何かをしたい 私は間違いなくKohanaのをお勧めします。 それはおそらく、そのための最善の提供です。 私たちはRuby on Railsでを使用していた場合は、面白いことに、しかし、である、 我々は我々だけで何をしたか複製されたかもしれない おそらく3分未満で、より。 冗談はあるが、Ruby on Railsの学習は多くの時間がかかりません それはKohanaのを学習するのにかかるよりも。 それは、あなたが学ぶことを選択する内容に基本的にあなたの選択です しかし、あなたが起動し、すぐに実行して取得したい場合、 Kohanaのは間違いなく非常に良い選択です。 >>すべての最後の質問に私達が終わる前に?はい。 [学生]どのようにしていることを統合できる あなたが指示されたときに使用していたように、CSSフレームワークの? 問題は、どのように我々は、CSSフレームワークとそれを統合するでしょうか? 私たちは、おそらくするだろうと、我々は、おそらく含まれるであろうある 我々はすべてのCSSファイルをダンプする新しいフォルダ、 した後、我々はまた、新しいテンプレートを追加したい。 テンプレートでは、これらのCSSファイルをインクルードしたい 彼らはすべての単一のページで参照していることを確認するには、 そして、あなたが実際にHTMLを書いているとき、 あなただけの適切なクラスやその他もろもろを追加し、 例えば、フォームのようなものを使用しているとき ヘルパー関数は、その後多くのパラメータを追加することができます あなたは様々なものに取り付けられるようにする内容のクラスを指定する ので、それを適切にスタイルができ、そしてそれはあなたが行くとどのように基本的です。 >>その他の質問? 素晴らしい。 お時間をありがとうございました、そして来てくれてありがとう。 私は他の非常に多くを追加するつもりではなかった、 しかし1本当にクイックなことは、我々は、リンクを持っていないです フォームに。 本当にばか。 それでは追加してみましょう - 実際に鑑み、ブログ、インデックス、 それでは本当にすぐに新しいページにジャンプするリンクを追加してみましょう、 我々は新しいポストを挿入することができますページ。 我々はこれをやろうとしている。 何がいいのは、HTMLヘルパー関数のこの全体のグループがあるある あなたのためにさまざまなことを行うので、あなたはすでに実体を見ている ここで機能しますが、彼らはまた、「アンカー」と呼ばれる機能を持っている あなたが新しいブログ/を入力することができる と "ポスト新しいブログ。」と言う そして、それはあなたのために、そのリンクを作成し、 これを行うのは、本当に些細なようだが、これはいいですが、 あなたは1ドメインから別のものにあなたのウェブサイトを移動していると仮定しているため。 そして、あなたはただのURLを自分で書き出した場合には、 あなたはすべてのURLを変更する必要があります。 それとも、1サブフォルダから別のサブフォルダに移動しました。 あなたはすべてのそれらのURLを自分で変更する必要があり、 それは楽しみではありません。 あなたはここ、このアンカーを使用することができ、 あなたは、ドメインまたはサブフォルダの接頭辞を変更することができます 一度設定ファイル内の そして、それは、そのどこにでも適用され、これは再び、ある 良い例は、コードを乾燥、自分を繰り返さないでください。 あなた自身を繰り返している限り、試してみて、コンフィギュレーション·ファイルのいくつかの並べ替えで抽出 または別の関数に、それはあなたのためにそれを処理しています。 >>そして、私はあなたを見せたかった一番最後のものだった 我々がこのポストに戻っている、と私はいくつかの本当に長いエッセイを構成していたと仮定し、 しかし、私は私の作成者を含めるのを忘れていました。 今、私は、「ポスト送信」をクリックすると 私はすべてを失った。 違う!本当に悲しい。 それでは、どのようにそれに対処するのですか? これは我々が何をすべきかです。 私たちがやっていることは、これらの入力やテキストエリアの機能のためにここにある、 私たちは、二番目のパラメータは、その2番目のパラメータは、値が含まれている場合 フィールドが最初に移入されようとしているものであることを行っている。 私たちは何ができることは私たちのブログコントローラであり、 私たちは、別の変数を結合することができた。 多分「値」と呼んでいます。 文字通り、ポスト配列を渡す。 つまり、検証が失敗した場合ことを意味し、 私には、私は最後の要求から提出ポスト配列を渡し、 私は私の最後の投稿からの値を使用することができますし、そのように フィールドを再作成する。 今、私は値の作者のような何かを行うことができます 私はいくつかのランダムなものを行う場合には、今の体、およびそのように値 そして、それはそこにとどまり、「ポスト送信」をクリックしてください。 しかし、我々は別の問題に遭遇するつもりだ。 私はページに初めて行く場合には、動作しますが、 それはクラッシュになるだろう、と初めてためです 我々はこのポスト変数が定義されていない、ページに移動します。 それがヌルです。それは存在しません。 このキーが存在する場合>>そして、私たちが言いたいことはある、 この配列の値を返し、 キーが存在しないなら、空白文字列を返す。 つまり、我々がここで必要な機能です。 私たちは、キー配列にアクセスしようとする前に存在するかどうかをチェックしたい、 幸いなことに、 Kohanaのも私たちにそのためのヘルパー関数を提供します。 彼らは、この関数のスイート全体を持っている 名前のARRの下、短い配列の場合、 彼らは「取得」と呼ばれる1機能を持っている あなたは配列を渡すことができ、 あなたは、キーの名前を渡すことができます。 そして、基本的にはそれが何をするか、それがそのキーを取得しようとしている、 しかし、そのキーが配列内に存在しない場合、 、私は信じて、それが空白に戻りますか、我々はまた、デフォルト値を指定することができます これいいです。 今、我々は再び同じことを行う場合には、 あなたは、今では最初の頃の作品を参照してください そして再び、我々はいくつかのランダムなものを入力すると そして、それはそこにとどまり、試してみて、送信してください。 >>そして私は、私も本当にすぐにテンプレートを追加する方法をお見せすることができますね。 我々は、我々は、 "template.phpに"と呼ばれる新しいビューを追加することができます最初に行うことができます Viewsフォルダー内、 そして私は何をするつもりだと、「コンテンツ」私はと呼ばれるものをプリントアウトするつもりです 私の主な内容であることを行っている。 多分一番下に私が言う、追加するつもりだ 著作権。 [聞こえない学生の質問] [ブランドン劉]は多分これは私が使いたい超定番のテンプレートです。 私はすべての単一ページ上の私の著作権を持つフォルダを持つようにしたい、 そして今、私は自分のコントローラ内でやろうとしているもの 代わりに、というのが今、「コントローラ拡張」 私は "、Controller_Templateを拡張」と言うつもりだ 代わりに、というのは、今、「レスポンスボディは、このビューに等しい」 私は、と言うつもりです」このテンプレートコンテンツは - " と私は思う - 私は等号を置くのですか? 私は忘れている。ええ、私はそう思った。 そして今、私は、content変数は、ビューと等しくなるように設定されていること。 私はここで同じことを行うことができます。 私が更新すると、今、あなたは、この著作権があります追加され、今見ることができます ちょうどいくつかのランダムポストを作成、 そして、その後、再び、あなたが著作権のページの一番下にあることが表示されます。 >>グレート。それは私があなたたちを見せたかっただけです。 [拍手] ご質問? [CS50.TV]