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
- <h2><?php echo $title ?></h2>
- <?php echo validation_errors(); ?>
- <?php echo form_open('news/create') ?>
- <label for="title">Title</label>
- <input type="input" name="title" /><br />
- <label for="text">Text</label>
- <textarea name="text"></textarea><br />
- <input type="submit" name="submit" value="Create news item" />
- </form>
もうひとつ、登録が成功した時のメッセージ表示画面も用意しておきます。
・success.php
- <h2>Success!</h2>
- <a href="/news">all</a><br>
- <a href="/news/create">create</a><br>
前回作成したコントローラー「News.php」にcreateメソッドを追記します。
- <?php
- class News extends CI_Controller {
- public function __construct() {
- parent::__construct();
- // データベース接続モデルをロード
- $this->load->model('news_model');
- }
- public function index() {
- // 登録されているデータを全件取得
- $data['news'] = $this->news_model->get_news();
- $data['title'] = 'News archive';
- // 各種viewを呼び出す
- $this->load->view('templates/header', $data);
- $this->load->view('news/index', $data);
- $this->load->view('templates/footer');
- }
- public function view($slug = NULL) {
- // 指定された記事を呼び出す
- $data['news_item'] = $this->news_model->get_news($slug);
- // 記事が見つからない場合は404エラー
- if (empty($data['news_item'])) {
- show_404();
- }
- $data['title'] = $data['news_item']['title'];
- $this->load->view('templates/header', $data);
- $this->load->view('news/view', $data);
- $this->load->view('templates/footer');
- }
- // ここまで、前回までに作っていた箇所
- // ここから、記事の作成部分
- public function create() {
- $this->load->helper('form');
- $this->load->library('form_validation');
- $data['title'] = 'Create a news item';
- $this->form_validation->set_rules('title', 'Title', 'required');
- $this->form_validation->set_rules('text', 'text', 'required');
- if ($this->form_validation->run() === FALSE) {
- $this->load->view('templates/header', $data);
- $this->load->view('news/create');
- $this->load->view('templates/footer');
- } else {
- $this->news_model->set_news();
- $this->load->view('news/success');
- }
- }
- }
formというヘルパーと、form_validationというライブラリーを呼び出しています。
form_validationは入力値のチェック。
formは、html文字列の操作用みたいです。
後日、詳しく調べてみたいと思います。
やっていることは、入力値の検証を行い、NGなら元の画面と同じ内容を表示。
OKなら、successビューを表示します。
Model
前回作成した、News_model.phpにデータを登録するメソッドを追記します。
- <?php
- class News_model extends CI_Model {
- public function __construct() {
- $this->load->database();
- }
- public function get_news($slug = FALSE) {
- if ($slug === FALSE) {
- $query = $this->db->get('news');
- return $query->result_array();
- }
- $query = $this->db->get_where('news', array('slug' => $slug));
- return $query->row_array();
- }
- // 今回追記した箇所
- public function set_news() {
- $this->load->helper('url');
- $slug = url_title($this->input->post('title'), 'dash', TRUE);
- $data = array(
- 'title' => $this->input->post('title'),
- 'slug' => $slug,
- 'text' => $this->input->post('text')
- );
- return $this->db->insert('news', $data);
- }
- }
postされたデータを取得し、データベースに登録します。
Routing
最後に、config/routes.phpに/news/createのルーティングルールを追記します。
- $route['default_controller'] = 'pages/view';
- $route['(:any)'] = 'pages/view/$1';
- $route['news/(:any)'] = 'news/view/$1';
- $route['news'] = 'news';
- // 追記した部分
- $route['news/create'] = 'news/create';
動作確認
http://(サーバーIP)/news/createを表示すると登録用の画面が表示されます。

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

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

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

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

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

チュートリアルでわかったこと
基本的に、application配下のファイルしか触ることはない。
・あまり変更しないファイル
config/database.php
データベース接続の定義。一回記載すれば、ほぼ変更することはないと思う。
config/routes.php
URLとコントローラーの関連付けを定義。
新しくコントローラーを追加した時や、メソッドを増やした時に変更する。

・頻繁に変更するファイル
controllersにあるフィアル。
処理内容により、表示するviewを切り替えてやる。
modelsにあるファイル。
データの取得、加工を司る。
viewsにあるファイル。
主にhtml文字列の生成処理。画面表示を司る。

CodeIgniter 3のユーザーガイド(User Guide)まとめ
- 関連記事
-
- CodeIgniter 3 Controllersの書き方について(General Topics - Controllers)
- CodeIgniter 3のユーザーガイド(User Guide)まとめ
- CodeIgniter 3のチュートリアル3 Create news items
- CodeIgniter 3のチュートリアル2 News section
- CodeIgniter 3のチュートリアル1 Static pages
コメント