今更ながらCodeIgniter3のチュートリアルをやっています。
News section — CodeIgniter 3.1.3 documentation
日本語はこっち
CodeIgniterはPHPのフレームワークで現在4が開発中っぽい。簡単軽量という触れ込みがあり、割と楽で緩めの感じがいいといえば良いという印象。
チュートリアル内のニュースセクションでコントローラーで、
public function view($slug = NULL)
{
$data['news_item'] = $this->news_model->get_news($slug);
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');
}
と記事を1つ取り出すのですが、これだとエラーに。「?」と思いながら、モデルに描いたget_news()がおかしいのかと考えて、
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();
}
を確認。$query->row_array()で返ってきている値をprint_rで確認したら、
Array ( [0] => Array ( [id] => 2 [title] => test2 [slug] => test2 [text] => 2つ目のテスト記事。))
な感じで最初に「0」が含まれてた。配列で返るのだから当然といえば当然だったのですが、チュートリアルで間違いなの?それとも動作が変わったけどチュートリアルは古いまま?
いずれにせよ、配列で帰ってくるので、単一の記事を取得する場合には、一番始めの値であれば「0」が必要であるし、そうでなくslugとなっているので、複数取得することを前提としているのであれば、foreachなどを利用する必要があるなと思った次第でした。