Help us understand the problem. What is going on with this article?

[PHP]codeIgniterのdelete機能[初心者向け]

codeIgniterの公式ドキュメントには、チュートリアルが掲載されていますが、「投稿機能」、「参照機能」の作り方しか記載されていません。WEBアプロケーションを作成する際、CRUD(クラッド)操作が基本となりますが、codeIgniterの公式チュートリアルでは、Delete機能(消去機能)とUpdata機能(更新機能)の作り方が記載されていません。また、codeIgniterと言うフレームワークは技術的な記事が少なく、多くのユーザーが公式ドキュメントを参照して様々な機能を作成していると思います。ただ、codeIgniterの初心者が公式ドキュメントを参考にしてDeliteとUpdate等の機能を作成するのは、かなりハードルが高いと感じました。(筆者も凄く苦労しました。)

今回は、codeIgniterの初心者である筆者が、備忘録も兼ねてDelete機能の作成方法をご説明します!

※公式チュートリアルのアプリが作成できている前提で話を進めます!!!

codeIgniterのversion : 3.1.※
PHP version : 7.※.※
(詳細なバージョンは教えられない為、隠します)

最初に消去ボタンをメインページ(index.php)に記入する。
foreach内であれば、どこに書いても構いません)

消去ボタンの設定

application/views/news/index.php
<?php foreach ($news as $news_item): ?>
//省略
<a href="<?php echo site_url('news/view/'.$news_item['id']); ?>">詳細</a>
//省略
<?php endforeach;

ルーティングの設定

次はルーティングです。チュートリアル通りやられている方は、$route['news/delete'] = 'news/delete';routes.phpに記入して下さい。'news/delete'を記入して上げないとdelete機能とviewが反応しない為、必ず記入してください。

理由は、['(:any)']左記のコードを使用すると右辺に指定した場所に必ずページ遷移する設定になってしまう為、deleteのfunctionが読み込まず、deleteと機能が機能しなくなります。その為、News.phpコントローラで何かactionを付け加えたい時は、$route['news/(:any)'] = 'news/view/$1';より上にページ遷移先の機能名を記入して下さい。

(チュートリアルでは、['(:any)']このコードが使用されていますが、実際の開発では、ほぼ使用されることがないそうなので、routes.php['(:any)']このコードが記載されていなければ、この工程は無視して構いません)

application/config/routes.php
$route['news/create'] = 'news/create';
$route['news/delete'] = 'news/delete';
//下記コードより上に付け加える
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

最初にdelete機能を付け加える為、コントローラーにpublic function delete($id)を記入します。その際、どの記事を消すか選択する必要がある為、引数(ひきすう)に$idを記入して上げます。

コントローラーの設定

application/controllers/News.php
    //省略
    public function delete($id){
      //私の場合は、delete_news($id);でモデルにアクセスしています。
        $this->news_model->delete_news($id);
        $this->load->view('news/delete');
      //上記コードはviewを表示させる為のコードです
    }
    //省略

モデルの設定

モデルに、消去したい記事をid指定して消去するコードを記入する。

application/models/News_model.php 
    //上記と下記は省略
    public function delete_news($id) {
    //下記のコードは、第1引数がテーブル名、第2引数は、WHERE句(どのidか指定)です。
      $this->db->where('id', $id);
      $this->db->delete('news');
      //上記コードでデーターベースのnewsのidを消去します。(deleteとメソッドを使用する)
    }

viewの設定

最後にviewを書いて終了です。

application/views/news/delete.php
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>

<body>
<h3>投稿を消去したぜ!!</h3>
<!-- URL ヘルパーの anchor() メソッドでリンクを作成 -->
<p><?php echo anchor('news/create', '再度投稿を行う'); ?></p>
<p><?php echo anchor('news', 'ホーム画面に戻る'); ?></p>
</body>

</html>

補足

今回のやり方ですと、消去ボタンを押したらすぐに記事が消去されてしまう為、アラート機能等を入れると良いかもしれません。この記事を投稿した際の筆者の技術ではそこまでできない為、またスキルが向上した際、更新と言う形で投稿したいと思います。

最後に

以上で、「codeIgniterのdelete機能[初心者向け]」の説明を終わりたいと思います。codeIgniterに関しては、まだまだ勉強中の為、間違っている点が多々あるかと思います。もし問題点、修正点がございましたら、ご指摘頂けると幸いです。

最後までご覧いただき、ありがとうございました。

kengo922
ペン回しを競技として行っている未経験エンジニア! (動画はURLから見れます)
https://www.youtube.com/watch?v=0CqFEDzDkIA&t
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away