CodeIgniter入門案例之簡單新聞系統三

建立新聞條目

如今你已經知道了怎樣用CodeIgniter從數據庫中讀取數據,但還不知道怎樣往數據庫中寫入數據。在這一節中,你將學到經過怎麼擴展以前寫過的新聞控制器和數據模型來實現這一功能。php

建立一個表單

爲了向數據庫裏輸入數據,你須要建立一個表單來輸入須要被存儲的信息。這就是說你須要一個帶兩個輸入域的表單,一個用來輸入標題,一個用來輸入內容。另外,你能夠經過數據模型中的標題來取得slug。在 application/views/news/create.php 建立一個新的視圖。html

<h2>Create a news item</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" />app

</form>ide

這裏只有兩個東西可能你不熟悉,一個是 form_open() 函數,一個是 validation_errors() 函數。函數

第一個由 表單輔助函數 提供,用來提供表單元素和一些額外功能,例如添加隱藏的 安全類。第二個用來報告表單驗證中出現的錯誤信息。codeigniter

回到新聞控制器,在這裏你須要作兩件事,一件是檢查表單是否被提交了,另外一件是檢查提交的數據是否可以經過驗證規則。你須要用到 表單驗證 庫來作這些。

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');
  }
}

上面的代碼中添加了一些功能,前幾行載入了表單輔助函數和表單驗證庫,這樣,表單驗證的規則就被設定好了。 set_rules() 方法包含三個參數,第一個是輸入域的名稱,第二個是錯誤信息的名稱,第三個是錯誤信息的規則——在這裏的規則是輸入內容的文本域必填。

正如上面所展現的,CodeIgniter擁有一個強大的表單驗證庫。你能夠 從這裏瞭解到這個庫的更多內容

繼續,你會看到一個用來檢查表單驗證是否運行成功的條件。若是沒有成功,顯示錶單,若是提交成功而且經過了驗證,則會調用數據模型。這以後會加載一個顯示成功信息的視圖。在這裏application/view/news/success.php 建立一個新的視圖用來顯示成功信息。

數據模型

如今只剩一件事要作了,那就是寫一個方法用來向數據庫中寫入數據。你將用到Acitve Record類來插入信息,並用到輸入類來得到post數據。打開以前建立的數據模型加入下面的代碼:

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);
}

這個新的方法是用來維護向數據庫插入新聞條目的。第三行包含了一個新的函數url_title()。這個函數是由 URL輔助函數 提供的,用來組織(strips down)你輸入的字符串,將空格的地方替換成橫線(-),確保其中全都是小寫字母。這樣以後剩下的就是一個漂亮的slug,能夠很好地用來建立URI。

咱們來繼續準備一下子要向$data數組輸入的記錄。這裏的每一個元素都對應着早前建立的數據表中的每一列。你可能注意到了這裏有個新的方法叫 post() ,它是由 輸入類提供的。這個方法能夠確保數據是被過濾過(sanitized)的,從而保護你不被其餘人惡意***。這個輸入類是默認加載的。最後,就是將 $data 數組插入到咱們的數據庫。

設置路由

在你向你的CI程序添加新聞條目以前,你還要向 config/routes.php 裏添加一個額外的規則。確保你的文件包含下列代碼。這樣能夠保證CodeIginter將「create」看作一個方法來正確顯示,而不是把它顯示成一個slug爲「create」的新聞頁面。

$route['news/create'] = 'news/create';
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

如今在你的瀏覽器輸入你本地CI程序的地址並在後面加上 index.php/news/create 。恭喜你,你剛剛完成了你的第一個CI程序!添加些新聞來看看其餘你創造的其餘頁面吧!

相關文章
相關標籤/搜索