CodeIgniter CRUD

CodeIgniter 3.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE news (
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(128) NOT NULL,
slug varchar(128) NOT NULL,
text text NOT NULL,
create_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增貼文時間',
PRIMARY KEY(id),
KEY slug (slug)
)

CREATE TABLE posts (
id int NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
slug varchar(255) NOT NULL,
body text NOT NULL,
create_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增貼文時間'
PRIMARY KEY(id)
)
1
2
3
4
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
準備
1
2
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  • 為什麼要用單一路口文件?
  • 建立controller和route
    • 讓url變得好看
    • 定義route規則
  • 建立model
    • slug把url去掉,只留下小寫的英文字母
    • 有點像是簡單的描述,例如:/車子/帥氣的法拉利
    • 可以用來當作唯一值用來識別某個資源(entry/resource)
    • 詳細說明可以看stackoverflow解釋(what-is-a-slug)
  • 和我想的比較不一樣的是,他把新聞系統的controller另外拆開
    • 本來想說寫在一起的
    • 分開也比較清楚
  • 建立列表頁和檢視頁面
  • 踩到的第一個坑是自己打錯字,找template的路徑
    • 不需要為繼承的父類別加上namespace
    • 改完route發現news不好使了
      • 先註解起來查原因
      • 檢視頁面的位置沒有改到view,從index那邊複製過來沒有修改到
    • 原來是沒有加htaccess的關係阿
      • 當發現怎麼改route都沒有用
      • 印出來看有設定,而且怎麼敲url就是不出來這時候就該設定htaccess了
    • 新增表單
      • 把檢視的route設定放到最後面
    • 刪除的坑(id)
      • 加上要刪除的編號之後,突然發現沒有辦法用open_form的方法了
      • 原先以為是因為寫法的關係造成的,結果是因為autoload沒有load到那個form的helper,殘念
      • 沒有對應到controller的method名稱
    • 編輯(slug)=>和view帶一樣的
      • bootstrap pull left把放在右邊的顯示到左邊
      • 要帶入view的slug進去,而不是用id
      • 少input hidden的id也想成功?
    • 新增navbar-right往右放
  • 小bug
    • 沒有取到URL參數的時候是取全部的文章
    • route的順序很重要,放錯了,url出不來,範圍比較小的放前面