自動販売機を作ってみよう part8 - 詳細設計に入るの1

ユーザーがアクセスできるように、drinkという名前で、controllerをつくる。
先日作ったテーブルを中に入れる

## 設計
### 今からやることはなんなのかを具体的に文章にして、明確にしておく

まずはどうやってMVCでコードが動くのか、Codeigniterの仕組みを理解するところをやる。

~~~
php_practice/app/application/controllersの中身を一通り確認する。

ファイルを全てvimで開く。

モデルからデータを受け取って、ビューがHTMLを生成する流れを実行して確認する。

Codeigniter　アプリケーションフローチャート
https://codeigniter.jp/user_guide/3/overview/appflow.html
Codeigniterの処理の流れについて
https://kunitsuji.hatenadiary.org/entry/20080617/1213671478
を読む

Codeigniterのチュートリアルをやってみた
https://it-tech-dm.hatenadiary.org/entry/20091025/1256465675

CodeIgniter 3のディレクトリ構成と動きを確認する
https://www.m0de.ml/c0d3man/posts/oszoeezc1r01vt89jc7z
~~~

を実行する

その後、実際に自販機を組み立てていこう。


## やることは、大枠からどんどん細かくする
以下が自販機の組み立ての大きなプロセス。

ぺーじをつくる。
データをデバッグできるのでそれをする。
実際にViewが受け渡しをできるか確認する
URLでアクセスできるか確認する

これを粒度どんどん細かくしていくことで、設計が出来上がっていく。
細かくしていく例↓

~~~
各ページがURLでアクセスできるようにする

ページごとにViewに必要なデータの取得

Viewでの値の受け渡し

Viewの組み立て

URLでアクセスしてページが設計通りに動いていることを確認
~~~

↓

~~~
各ページがURLでアクセスできるようにする
	Controller(機能)の作成
		methodの作成(ページ)

ページごとにViewに必要なデータの取得
	DaoをつかったDatabaseアクセス
		select文をCodeigniterのActicerecordで取得

Viewでの値の受け渡し

Viewの組み立て

URLでアクセスしてページが設計通りに動いていることを確認
~~~

↓

~~~
各ページがURLでアクセスできるようにする
   Controller（機能）の作製
       drink controllerの作製
           application/controller/drink,phpを作製する
       methodの作製(ページ)
           作製されたapplication/controller/drink.phpにmethodを追加していく                                                                                                                                                                                                                                                                                                                           
               indexの追加
                   publicで作製します
                       public function index
                   購入開始のリンクをつける必要がある
                       （リンクだけなのでViewで対応）
                   購入済商品一覧
                       Database (php_practice)にある○○テーブルの○○を参照して一覧で取得する
                   購入済商品一覧のステータス（飲んだ飲んでない）
                       Database (php_practice)にある○○テーブルの○○を参照して一覧で取得する
                           ステータスについては所持しているドリンクに付与する必要がある


public function index()
{
   購入済商品一覧
       Database (php_practice)にある○○テーブルの○○を参照して一覧で取得する


       $result1 = $this->CI->drink_model->get_list();

   購入済商品一覧のステータス（飲んだ飲んでない）
       Database (php_practice)にある○○テーブルの○○を参照して一覧で取得する

       $result2 = $this->Ci->drink_model->get_status();

    ステータスについては所持しているドリンクに付与する必要がある
}


drink_model

   public function get_list()
   {
       databaseとhoge tableへ接続をする
       $this->CI->load->model('hoge');
       select文を発行する
       $this->CI->hoge_model0->select();
       $this->CI->hoge_model0->get_list();

       帰ってきた値を受け取る
       $result = $this->CI->hoge_model->query_result();

       return $result;

   }


   public function get_status()
   {

   }

ページ毎にViewに必要なデータの取得
   Daoを使ったDatabaseアクセス
       select文をCodeigniterのActicerecordで取得
       取得したデータの整形
       データが引き出せているかの確認

Viewでの値の受け渡し
   ControllerからViewの呼び出し
       Viewへの値受け渡し

Viewの組み立て
   Controllerから受け渡された値の出力確認
   必要箇所への埋込

URLでアクセスしてページが設計通りに動いていることを確認
メッセージ入力
~~~

のような感じで。組みまくれ。ひたすらに。細かくしていけ。
上記のように、書いた文章はコメントにし、その下に実際のコードを書いていくことができるので、粒度細かく書いていくことで、そのままコーディングに入ることができるのだ。
##### modelは先日つくったテーブルごとに作成する

### 参考資料
読んだものメモ

超絶初心者がCodeIgniterを一から導入やってみました
https://www.alt-plus.jp/archives/1755

Codeigniter　アプリケーションフローチャート
https://codeigniter.jp/user_guide/3/overview/appflow.html

Codeigniterの処理の流れについて
https://kunitsuji.hatenadiary.org/entry/20080617/1213671478

Codeigniterのチュートリアルをやってみた
https://it-tech-dm.hatenadiary.org/entry/20091025/1256465675

CodeIgniter 3のディレクトリ構成と動きを確認する
https://www.m0de.ml/c0d3man/posts/oszoeezc1r01vt89jc7z

軽量PHPフレームワーク ‘CodeIgniter’ 徹底ガイド！
http://www.ci-guide.info/

Codeigniterユーザガイド
http://codeigniter.jp/user_guide/3/index.html