今日もやる気を出すために、ブログにやったことをつぶやきながらWebアプリ開発のチュートリアルをやっていきたいと思います。
MVCモデル設計でWebアプリ開発
MVCフレームワークとは?【WEBサービス開発の基礎】
MVCモデル【Model(モデル)・View(ビュー)・Controller(コントローラー)】というソフトウェア設計モデルがあり、この設計モデルの元、Webアプリ開発をしていく、必要があります。
まずは、Model(モデル)から作成
Modelの中には、「Entity」と「Table」というフォルダーがあるみたいです。
- Table:リポジトリー や テーブルオブジェクト です。これらのオブジェクトを利用して、 データのコレクションへアクセスします。これらを利用することで、新しいレコードを保存したり、 既存データの編集/削除、リレーションの定義、そして一括処理ができます。
- Entity:エンティティーは、個々のレコードを意味し、 行/レコードレベルの振る舞いや機能の定義を可能にします。
データベースの用語を理解しよう 「テーブル」「レコード」「カラム」「フィールド」とは?
Tableクラスの作成
- ArticlesTable.phpというファイルを作成。
- Cake/ORM/Table内のTableスーパークラスを継承して、新たにArticlesTableクラスを作成しました。
- ArticlesTableクラスには、initializeという初期化関数を追加しています。
- Articlesというテーブルでデータが追加・修正された際にタイムスタンプを行う関数。
私もまだよく分かりませんが、チュートリアルとして、まずはテーブルを作成しました。
Entityクラスの作成
- Articles.phpというファイルを作成。
- Cake/ORM/Entity内のEntityスーパークラスを継承して、新たにArticleクラスを作成しました。
- $_accessibleプロパティ(変数)を設定。
- データの誤操作を防ぐためEntityの持つプロパティへの代入可否を設定する $_accessible 機構が備わっています。
accessibleは、つまりデータベースの変更できる列を指定しているということかな?
とりあえず、モデルを作成したので、データベースへのアクセス・処理の制御は終わりということかな?
次は、Controller(コントローラー)の作成
MVCフレームワークとは?【WEBサービス開発の基礎】
Contollerでやること
ArticlesControllerの作成
- ArticlesController.phpというファイルを作成。
- AppController.phpスーパークラスを継承して、新たにArticlesControllerクラスを作成しました。
- index関数を作成(これにより、indexへのリクエストがあった場合に、この関数が呼ばれるようになります。)
- データベースからページ分けされた記事を取得します。次に (これからすぐに作成する) テンプレートの中に記事を渡すために set() を使用します。
※「ページネーション」:データを一定数ごとにページ分けし、1ページずつ表示するもの。
※「Paginator」:ページネーションは、「Paginator」というコンポーネントとして用意されています。これを利用するには、コントローラー側のinitializeメソッドなどで、loadComponentを使ってロードしておきます。
View(ビュー)の作成
- templatesフォルダー内に、Articlesフォルダーを作成します。
- Articlesフォルダー内にindex.phpファイルを作成しました。
てっきり、Viewフォルダーに書いていくのかと思ったけど、Templateフォルダーに書いていくのか・・・
※ビューテンプレートは、アプリケーションのレイアウト内に挿入される表示用の PHP コード
controllerでセットしたarticle変数をviewテンプレートでも使用できるようになりました。$this->Htmlは、Htmlhelperで、今回のようなリンク作成などを簡単にやるためのものらしい。
とりあえず、ここまで書けば、データベースにアクセスして、適切なページが表示されるようになるみたいです。
表示されるようになりました。
Viewアクションの作成
次に、リンクを押した際のアクションを作っていきます。
前回作成した、ArticlesController.phpにView関数を追加します。
templtes/Articles/view.phpを追加しました。これで、viewページが見れるようになります。
記事の追加(add)アクションを追加
※FlashComponent:フォームの処理後やデータの確認のために表示する一回限りのメッセージ通知のこと。
- リクエストの HTTP メソッドが POST だった場合、データベースのArticles テーブルにデータを追加
- 失敗した場合、ただビューを描画します。
記事の追加(add)のビューテンプレート作成
記事の追加を行う、ページが表示されるようになりました。
viewでフォーム入力をしたことで、データベースにデータが追加されるようになりました。
シンプルなスラグ生成の追加
slugを生成することで、重複しない記事を作成でき、各記事のURL先も表示できるようになりました。
※IT用語で「位置を示すコード」等の意味があり、URL(パーマリンク)の末尾の部分を任意の文字列に指定できる機能
Editアクションの追加
Editテンプレートの追加
記事の編集ができるようになりました。
編集ボタンも追加しました。
バリデーターの追加
title フィールドと body フィールドの両方が空であってはならず、 長さに制約があることを指定しました。
※入力されたデータが正確であり、指定された形式や条件に従っているかを確認(= バリデーション)する機能
入力に条件を加えたことで、何も入力していない場合、怒られるようになりました。
deleteアクションの追加
チュートリアル(基本的な記事管理)アプリの作成完了
とりあえず、最低限の基礎は完了しました。最初よりは、抵抗感がなくなりましたが、
いろいろやってみないと、使いこなせる段階にはなかなかいかないですね。