CodeIgniter3のチュートリアルをちょっと見てみようかの巻(2)

こんにちわ! NEKOGETです。
この記事はCodeIgniterアドベントカレンダーのために書きました! 8日目です!
https://qiita.com/advent-calendar/2017/code_igniter

9日目の記事はayatoさんによる
Dockerで作るCodeIgniterローカル開発環境 入門編でした!
まだ読めてない人はぜひ読んでほしいです☆☆☆

CodeIgniter3のチュートリアルをちょっと見てみようかの巻(2)って事で(2)なので(1)があります!
CodeIgniter3のチュートリアルをちょっと見てみようかの巻(1) の続きです。

チュートリアルの場所
本家(英語): https://www.codeigniter.com/user_guide/tutorial/index.html
ユーザー会(日本語): http://codeigniter.jp/user_guide/3/tutorial/index.html
@NEKOGET(日本語?): http://pneskin2.nekoget.com/codeigniter/3/user_guide/tutorial/index.html

今回も本家のチュートリアルを見ていきますね。

今回のお題は「ニュースを見る機能を作ろうぜ」 です
https://www.codeigniter.com/user_guide/tutorial/news_section.html

newsを保存しておくtableはこんな感じ。
個人的な好みで言えばここに新規登録日を追加したいところです。

環境の準備 : database

modelをつくる….. 前にDatabase用意しないとダメですね。
database名どうしましょう?

ci3_tutorial とでもしましょうか?

mysqlが入ってる事を確認。

mysqlの起動
mysqlのユーザーとパスワードを作成
databaseの作成
って感じですかね…

それからapplication/config/config.phpの編集です。

よしよし入ってる。
しかし起動してない。

起動してみる。

案の定rootにパスワードがないわコラって怒られる。

パスワードの設定

mysqlに接続
途中パスワードを聞かれるので上記で設定したパスワードを入力

文字コードの確認

utf8にしとく方が楽よねって事で、一旦mysql接続を解除して /etc/my.cnfを編集
まぁここら辺も含めてansibleに書いてし待った方がいいんだけども……
知っててほしいなあという気持ちもあり難しいね。

[mysqld] に serverがutf8ですよを追記

[client]セクションを追加。utf8dですよを記載

mysqlを再起動

mysqlに接続して文字コードを確認する。

filesystemはbinaryでいいよね。
他がutf8になった事を確認。

データベースの作成

データベースができてる事を確認する。

newsテーブル作ろうかw

テーブルができた事を確認する。

データベースの準備ができた!

config.phpの変更

次は設定だねー
DBに接続する設定書いておかないとダメだよねー
configの設定についてはなぜかチュートリアルにないんだよね。不思議だねー

application/database.php

‘username’
‘password’
‘database’
‘dbdriver’
の4項目を変更したよ。
postgresqlを使う場合は、’dbdriver’ は postgre だよ!

ルーティングの設定

チュートリアルには最後の項目で書かれてるんだけど、これ設定してないとブラウザ越しに見えないので先に設定しちゃおうか☆
CodeIgniter/application/config/routes.php

これはどういう設定かわかるよね?
news/ はNews Classのindex()が処理をする。
news/view/{何か文字列} は News Classのviewメソッドが引数を持って処理する
その他は、 Pages Classのviewメソッドが処理をする
って流れだね。

Modelの作成

まずはモデルの作成だね!
application/models/News.php
Codeigniter3からModelはClassなのでファイル名の最初の1文字目は大文字だよ!

あんまり好きじゃない書き方だけども、Modelのコードね。
slugが指定されてなければ全件をretunしてる。
slugが指定されている場合は、検索した結果を1件だけ返してるコードだね。
できればlimitの設定とorder by は指定したいところだね。

Controllerの作成

次はコントローラー
これも最初の1文字目は大文字だ。合算するとこれぐらいだよね。

チュートリアルのコードはこんな感じになるかな?

Viewの作成

チュートリアルをみるとviewをどう書くのかがすごく雑だね…..
ここで必要なviewは
application/views/templates/header.php
application/views/templates/footer.php
news一覧を表示させるための
application/views/news/index.php
application/views/news/view.php

この4ファイルになるね。!

application/views/templates/header.php

application/views/templates/footer.php

application/views/news/index.php
index.phpは一覧を表示するよ!

http://{EC2のインスタンスのURL}/news

まぁ、そうだよね。
表示されるのはタイトルだけだね。
だってまだ表示する記事ないんだもの。
mysqlに接続して、記事でーたを登録してみるね!

1件登録して見たよ。

http://{EC2のインスタンスのURL}/news へアクセス。

記事が1県表示されたね!!!

次にviewへアクセス
http://{EC2のインスタンスのURL}/news/first_message

表示されたかな???

次は [ニュースを登録する機能を作ろうぜ] を(3)って事で続きを記事に書こうと思うよ!!!

CodeIgniter3のチュートリアルをちょっと見てみようかの巻(1)

こんにちわ! NEKOGETです。
この記事はCodeIgniterアドベントカレンダーのために書きました! 8日目です!
https://qiita.com/advent-calendar/2017/code_igniter

7日目の記事はこれ。
Codeigniter3を学ぶための環境をAWS Cloud9で作るの巻 (ansible編)

さて、みんなはCodeIgniter3のチュートリアルは見たことあるかな?
1,2はやったことある。でも3は2と変わらないからやってないわーって人も多いんじゃないかな?
CodeIgniter3のチュートリアルをやりながら、CodeIgniterのコードの話ができるといいかなって思ったんだ。

チュートリアルの場所
本家(英語): https://www.codeigniter.com/user_guide/tutorial/index.html
ユーザー会(日本語): http://codeigniter.jp/user_guide/3/tutorial/index.html
@NEKOGET(日本語?): http://pneskin2.nekoget.com/codeigniter/3/user_guide/tutorial/index.html

今気がついたんだけど、私のやつまだ翻訳終わってなかった….
私ダメじゃん!!!!

とりあえず本家(英語)を見ていこうか☆
チュートリアルの内容

  • 静的ページを作ろうぜ
  • ニュースを見る機能を作ろうぜ
  • ニュースを登録する機能を作ろうぜ

の3本だてだよ!

静的ページを作ろうぜ

https://www.codeigniter.com/user_guide/tutorial/static_pages.html
まぁ、あれだよね。
特に更新はしないんだけど、置いておきたいページあるよね。
ヘッダーとかさ、フッターとかちょっとだけ動的に値をおきたいんだけどメインコンテンツは変更ないし、でも都度都度コードを書き足すのは大変だよねー
こんな書き方があるよっていうご紹介。
チュートリアル的にはデータベースにばーんってつないで、そこから情報をばーんってとってきて、ほら!一連画面が出てきたよ!!!
みたいな方がいいんだろうけど、そうじゃなく静的ページを見せる時にはこんな風に始めるといいよって言っちゃうCodeignier3かわいいよね☆

チュートリアルにあるコードはこんな感じね。
これだとURLは

http://{CodeIgniterを設置したとこまでのURL}/page/view/{見せたい記事のファイル名}

私が書くとしたら、headerとfooterはもうパーツにしちゃってレイアウトファイルを共通のに作っちゃった上で書くから、こんな感じにしちゃうのが好き。

表示したいページをviewの中にどんどん作っていって
view/pages/{ファイル名}.php
ファイル名にHITするものは表示しちゃいましょ。

次に書かれてるのがrouterの設定だね。
application/config/routes.php

そうすると、
http://{CodeIgniterを設置したとこまでのURL}/page/view/{見せたい記事のファイル名}
これが
http://{CodeIgniterを設置したとこまでのURL}/{見せたい記事のファイル名}
になるわけですねー

さて、ここで気になると思うんだけど、

$route[‘(:any)’] = ‘pages/view/$1’;

のルールがあって
http://{設置してるURL}/Welcome
にアクセスされたとしますね。

Pages Classのそれと、Welcome Classのどちらが優先されるんだろう?

config/router.php

これをこんな風に書きかえたよ。

実際試した結果
application/view/welcome.php
の生身が、表示されます。

ではない場合はどうなるんだろう?
Pages classの処理が実行されて、まぁ当たり前なんだけど404です。

ちょっとこれだと苦しいねー苦しいねー
実用的ではないと思うんだー

http://{設置してるURL}/document/Welcome
こっちの方が使いやすいと思うけど、チュートリアルはこういうものだよーって伝える役割のものなのでこれでいいのかもしれないね。

さて、Router Classはどんなことしてるのか 実際のファイルを見てみようか!
これは、3.1-stableブランチのコードね!
https://github.com/bcit-ci/CodeIgniter/blob/3.1-stable/system/core/Router.php
Router Classは大きな仕事をしてるから、coreフォルダの中にいるんだよ。

で、これがどこで呼ばれて仕事してるかというと、CodeIgniterのcoreの中のCodeIgniter.phpの中でお仕事してます。
https://github.com/bcit-ci/CodeIgniter/blob/3.1-stable/system/core/CodeIgniter.php#L311

次は、「ニュースを見る機能を作ろうぜ」を見てみようね!

ちなみにCodeIgniter4では随分とモダンに高機能になってるよ!
http://pneskin2.nekoget.com/codeigniter/4/user_guide/general/routing.html?highlight=router

次のアドベントカレンダーの記事は ayatoさんの Dockerで作るCodeIgniterローカル開発環境 だよ!
お楽しみに☆

Codeigniter3を学ぶための環境をAWS Cloud9で作るの巻 (ansible編)

こんにちわ! NEKOGETです。
この記事はCodeIgniterアドベントカレンダーのために書きました! 7日目です!
https://qiita.com/advent-calendar/2017/code_igniter

前回の続きと言うか、ちゃんと環境をサクッと作れないとダメだったなって反省しました。作るものが増えるたびに手で毎回インストールして設定するとかないし!ないし!
そして session どう考えても Amazon ElastiCache 使うよね?

でも料金思うとお試しだったり勉強環境に課金するのはちょっと考えちゃうよね?

ってことでansibleを書いたよ。
https://github.com/NEKOGET/ci3_aws_c9_ansible

これでPHP7.1環境ができたよ。

開発環境にシンボリックリンクが貼られているはず

こんな風になっているはずだよ。

webコンソールから、自分が触ってるインスタンスのインパウンドに80ポートを追加すればブラウザ越しにみることができるよ。
EC2サービスからセキュリティグループ名のテキストリンクをクリック、下部にあるタブの「インパウンド」を開いて編集ボタンを押してね。 全体へ公開もできればIPを絞ることもできるのでそこは好みで。
このスクリーンショットの絵は全公開にした場合のものだよ。

これでいつでもCloud9でCodeIgniterを試せる環境になった!!!
やったー!

Welcomeページがちゃんと表示されたよ

次のアドベントカレンダーの記事はこれ!
CodeIgniter3のチュートリアルをちょっと見てみようかの巻(1) だよ☆ 楽しんでね☆