CodeIgniter 3のチュートリアル3 Create news items

CodeIgniterのチュートリアルを試しています。
CodeIgniter 3のチュートリアル2 News section

今回は、続きのチュートリアルです。
Create news items


Create a form



記事の閲覧機能を作成したので、登録機能を作ってきます。
登録用の画面を、application/views/news/create.phpに記載します。
内容は以下のとおり。


・create.php


  1. <h2><?php echo $title ?></h2>
  2. <?php echo validation_errors(); ?>
  3. <?php echo form_open('news/create') ?>
  4.     <label for="title">Title</label>
  5.     <input type="input" name="title" /><br />
  6.     <label for="text">Text</label>
  7.     <textarea name="text"></textarea><br />
  8.     <input type="submit" name="submit" value="Create news item" />
  9. </form>




もうひとつ、登録が成功した時のメッセージ表示画面も用意しておきます。

・success.php


  1. <h2>Success!</h2>
  2. <a href="/news">all</a><br>
  3. <a href="/news/create">create</a><br>







前回作成したコントローラー「News.php」にcreateメソッドを追記します。


  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.     
  34.     // ここまで、前回までに作っていた箇所
  35.     
  36.     // ここから、記事の作成部分
  37.     public function create() {
  38.         $this->load->helper('form');
  39.         $this->load->library('form_validation');
  40.         $data['title'] = 'Create a news item';
  41.         $this->form_validation->set_rules('title', 'Title', 'required');
  42.         $this->form_validation->set_rules('text', 'text', 'required');
  43.         if ($this->form_validation->run() === FALSE) {
  44.             $this->load->view('templates/header', $data);
  45.             $this->load->view('news/create');
  46.             $this->load->view('templates/footer');
  47.         } else {
  48.             $this->news_model->set_news();
  49.             $this->load->view('news/success');
  50.         }
  51.     }
  52.     
  53. }




formというヘルパーと、form_validationというライブラリーを呼び出しています。

form_validationは入力値のチェック。
formは、html文字列の操作用みたいです。
後日、詳しく調べてみたいと思います。

やっていることは、入力値の検証を行い、NGなら元の画面と同じ内容を表示。
OKなら、successビューを表示します。




Model



前回作成した、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.     
  16.     // 今回追記した箇所
  17.     public function set_news() {
  18.         $this->load->helper('url');
  19.         
  20.         $slug = url_title($this->input->post('title'), 'dash', TRUE);
  21.         $data = array(
  22.             'title' => $this->input->post('title'),
  23.             'slug' => $slug,
  24.             'text' => $this->input->post('text')
  25.         );
  26.         return $this->db->insert('news', $data);
  27.     }
  28. }




postされたデータを取得し、データベースに登録します。





Routing



最後に、config/routes.phpに/news/createのルーティングルールを追記します。


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







動作確認



http://(サーバーIP)/news/createを表示すると登録用の画面が表示されます。

533_01.png


何も入力せずに登録しようとすると、エラーになりました。

533_02.png


適当に値を入力して登録を実行。

533_03.png


登録出来ました。allをクリックしてみます。

533_04.png


登録されている記事の一覧が表示されます。
View articleのリンクをクリック。

533_05.png


ちゃんと登録されている内容が表示されました。

533_06.png





チュートリアルでわかったこと



基本的に、application配下のファイルしか触ることはない。


・あまり変更しないファイル

config/database.php
データベース接続の定義。一回記載すれば、ほぼ変更することはないと思う。

config/routes.php
URLとコントローラーの関連付けを定義。
新しくコントローラーを追加した時や、メソッドを増やした時に変更する。

533_07.png




・頻繁に変更するファイル

controllersにあるフィアル。
処理内容により、表示するviewを切り替えてやる。


modelsにあるファイル。
データの取得、加工を司る。

viewsにあるファイル。
主にhtml文字列の生成処理。画面表示を司る。

533_08.png



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

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ