Symfoware

Symfowareについての考察blog

CodeIgniter 3のチュートリアル2 News section

CodeIgniterのチュートリアルを試しています。
CodeIgniter 3のチュートリアル1 Static pages

今回は、続きのチュートリアルです。
News section



データベースのインストール



このセクションでは、データベース接続を行います。

データベースはMariaDB 5.5を使用することにしました。
こちらを参考に、DebianにMariaDBをインストールします。
MariaDBをDebian 7(Wheezy)にapt-getでインストールする

以下、ざっくり手順です。


# apt-get install python-software-properties
# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
# add-apt-repository 'deb http://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/repo/5.5/debian wheezy main'
# apt-get update
# apt-get install mariadb-server




適当にパスワードを決めます。

532_01.png

532_02.png


インストールが終わったら、チュートリアルで使用するデータベースと
テーブルを作成します。


# mysql -uroot -pP@ssw0rd



create文は以下のとおり。


CREATE DATABASE tutorial DEFAULT CHARACTER SET utf8;


CREATE TABLE news (
        id int(11) NOT NULL AUTO_INCREMENT,
        title varchar(128) NOT NULL,
        slug varchar(128) NOT NULL,
        text text NOT NULL,
        PRIMARY KEY (id),
        KEY slug (slug)
);





実際に実行している様子はこんな感じになります。


MariaDB [(none)]> CREATE DATABASE tutorial DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use tutorial
Database changed
MariaDB [tutorial]> CREATE TABLE news (
    ->         id int(11) NOT NULL AUTO_INCREMENT,
    ->         title varchar(128) NOT NULL,
    ->         slug varchar(128) NOT NULL,
    ->         text text NOT NULL,
    ->         PRIMARY KEY (id),
    ->         KEY slug (slug)
    -> );
Query OK, 0 rows affected (0.23 sec)





次に、phpからMariaDBに接続できるよう、ライブラリをインストールします。


# apt-get install php5-mysql




Mysqlのサポートが有効になりました。


# php5-fpm -i | grep My
MySQL Support => enabled
MysqlI Support => enabled
PDO Driver for MySQL => enabled




これで下準備は完了です。





Setting up your model



データベースの接続情報をapplication/config/database.phpに記載します。
記載サンプルはこちら。
Database Configuration


database.phpの記載内容は以下のようになりました。


  1. $db['default'] = array(
  2.     'dsn'    => '',
  3.     'hostname' => 'localhost',
  4.     'username' => 'root',
  5.     'password' => 'P@ssw0rd',
  6.     'database' => 'tutorial',
  7.     'dbdriver' => 'mysqli',
  8.     'dbprefix' => '',
  9.     'pconnect' => FALSE,
  10.     'db_debug' => TRUE,
  11.     'cache_on' => FALSE,
  12.     'cachedir' => '',
  13.     'char_set' => 'utf8',
  14.     'dbcollat' => 'utf8_general_ci',
  15.     'swap_pre' => '',
  16.     'autoinit' => TRUE,
  17.     'encrypt' => FALSE,
  18.     'compress' => FALSE,
  19.     'stricton' => FALSE,
  20.     'failover' => array(),
  21.     'save_queries' => TRUE
  22. );




変更したのは以下の項目です。


  1. 'username' => 'root',
  2. 'password' => 'P@ssw0rd',
  3. 'database' => 'tutorial',






application/modelsにNews_model.phpというファイルを作成します。
内容はこんなかんじです。


  1. <?php
  2. class News_model extends CI_Model {
  3.     public function __construct() {
  4.         $this->load->database();
  5.     }
  6.         
  7.     public function get_news($slug = FALSE) {
  8.         if ($slug === FALSE) {
  9.             $query = $this->db->get('news');
  10.             return $query->result_array();
  11.         }
  12.         $query = $this->db->get_where('news', array('slug' => $slug));
  13.         return $query->row_array();
  14.     }
  15. }




デフォルトのデータベースに接続。
引数がない場合は、テーブルの内容全てを取得。
引数がある場合は、条件に合致するレコードを取得しています。




Display the news



application/controllersにNews.phpというファイルを作成します。
内容は以下のとおり。


  1. <?php
  2. class News extends CI_Controller {
  3.     public function __construct() {
  4.         parent::__construct();
  5.         // データベース接続モデルをロード
  6.         $this->load->model('news_model');
  7.     }
  8.     public function index() {
  9.         // 登録されているデータを全件取得
  10.         $data['news'] = $this->news_model->get_news();
  11.         
  12.         $data['title'] = 'News archive';
  13.         
  14.         // 各種viewを呼び出す
  15.         $this->load->view('templates/header', $data);
  16.         $this->load->view('news/index', $data);
  17.         $this->load->view('templates/footer');
  18.         
  19.     }
  20.     public function view($slug = NULL) {
  21.         // 指定された記事を呼び出す
  22.         $data['news_item'] = $this->news_model->get_news($slug);
  23.         
  24.         // 記事が見つからない場合は404エラー
  25.         if (empty($data['news_item'])) {
  26.                 show_404();
  27.         }
  28.         $data['title'] = $data['news_item']['title'];
  29.         $this->load->view('templates/header', $data);
  30.         $this->load->view('news/view', $data);
  31.         $this->load->view('templates/footer');
  32.     }
  33. }





application/views/news/index.phpを作成。
これが全件表示用のビューになります。
内容は以下の通り。


  1. <h2><?php echo $title ?></h2>
  2. <?php foreach ($news as $news_item): ?>
  3.     <h3><?php echo $news_item['title'] ?></h3>
  4.     <div class="main">
  5.         <?php echo $news_item['text'] ?>
  6.     </div>
  7.     <p><a href="news/<?php echo $news_item['slug'] ?>">View article</a></p>
  8. <?php endforeach ?>




続いて、application/views/news/view.phpを作成。
これが記事番号が指定された時のビューになります。
内容は以下のとおり。


  1. <?php
  2. echo '<h2>'.$news_item['title'].'</h2>';
  3. echo $news_item['text'];






Routing



application/config/routes.phpにルーティングの指定を追記します。


  1. $route['default_controller'] = 'pages/view';
  2. $route['(:any)'] = 'pages/view/$1';
  3. // 追記した部分
  4. $route['news/(:any)'] = 'news/view/$1';
  5. $route['news'] = 'news';






http://192.168.1.101/newsを表示すると、News archiveが表示されました。

532_03.png

テーブルにデータがないので何も表示されませんが。


ちゃんと動いているか不安になったので、database.phpに記載したパスワードを
わざと誤ったものに書き換えてみました。

532_04.png

表示内容がエラーになりました。
データベースの検索は行えているようです。



CodeIgniter 3のユーザーガイド(User Guide)まとめ
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/01/24(土) 17:46:40|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<CodeIgniter 3のチュートリアル3 Create news items | ホーム | CodeIgniter 3のチュートリアル1 Static pages>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1593-c73aa704
この記事にトラックバックする(FC2ブログユーザー)