CodeIgniter4 加載靜態(tài)頁

2020-08-17 14:09 更新

Note: 本教程假設(shè)你已經(jīng)下載好 CodeIgniter,并將其 安裝 到你的開發(fā)環(huán)境。

首先你需要新建一個 控制器 來處理靜態(tài)頁??刂破骶褪怯脕韼椭阃瓿晒ぷ鞯囊粋€簡單的類,它是你整個 Web 應(yīng)用程序的”粘合劑”。

例如,當(dāng)訪問下面這個 URL 時:

http://example.com/news/latest/10

根據(jù)此 URL 我們可以推測出有一個名稱為 “news” 的控制器,被調(diào)用的方法為 “l(fā)atest”,”latest” 方法的作用應(yīng)該是查詢10條新聞條目并展示在頁面上。 在MVC模式里,你會經(jīng)??吹较旅娓袷降?URL:

http://example.com/[controller-class]/[controller-method]/[arguments]

在正式環(huán)境下 URL 的格式可能會更復(fù)雜,但現(xiàn)在,我們只需要知道這些就夠了。

新建一個文件 application/Controllers/Pages.php,然后添加如下代碼:

  <?php
  class Pages extends CodeIgniter\Controller {


          public function view($page = 'home')
          {
      }
  }

你剛創(chuàng)建了一個 Pages 類,有一個方法 view 并可接受一個 $page 的參數(shù)。Pages 類繼承自 CodeIgniter\Controller 類,這意味著它可以訪問 CodeIgniter\Controller 類 (system/Controller.php) 中定義的方法和變量。

控制器將是你 Web 應(yīng)用程序中處理請求的核心。和其他的 PHP 類一樣,可以在你的控制器中使用 $this 來訪問它。

現(xiàn)在,你已經(jīng)創(chuàng)建了你的第一個方法,是時候創(chuàng)建一些基本的頁面模板了。我們將新建兩個 “views” (頁面模板) 分別作為我們的頁頭和頁腳。

新建頁頭文件 application/Views/Templates/Header.php 并添加以下代碼:

  <!doctype html>
  <html>
  <head>
          <title>CodeIgniter Tutorial</title>
  </head>
  <body>

  
          <h1><?= $title; ?></h1>

頁頭包含了一些基本的 HTML 代碼,用于展示頁面主視圖之前的內(nèi)容。同時,它還打印出了 $title 變量,這個我們之后講控制器的時候再細說。 現(xiàn)在,再新建個頁腳文件 application/Views/Templates/Footer.php,然后添加以下代碼:

                  <em>© 2016</em>
          </body>
  </html>

在控制器中添加邏輯

你剛新建的控制器中有一個 view() 方法,這個方法可接受一個用于指定要加載頁面的參數(shù)。靜態(tài)頁面的模板目錄為:application/Views/Pages/。

在該目錄中,新建 Home.phpAbout.php 模板文件。在每個文件中任意輸入一些文本然后保存它們。如果你不知道寫什么,那就寫 “Hello World!” 吧。

為了加載這些界面,你需要檢查下請求的頁面是否存在:

  public function view($page = 'home')
  {
      if ( ! file_exists(APPPATH.'/Views/Pages/'.$page.'.php'))
          {
                  // Whoops, we don't have a page for that!
                  throw new \CodeIgniter\PageNotFoundException($page);
          }

  
          $data['title'] = ucfirst($page); // Capitalize the first letter

  
          echo view('Templates/Header', $data);
          echo view('Pages/'.$page, $data);
          echo view('Templates/Footer', $data);
  }

當(dāng)請求的頁面存在時,將給用戶加載并展示出一個包含頁頭頁腳的頁面。如果不存在,會顯示 “404 Page not found” 的錯誤頁面。

此事例方法中,第一行用以檢查界面是否存在,file_exists() 是原生的 PHP 函數(shù),用于檢查某個文件是否存在。PageNotFoundException 是 CodeIgniter 的內(nèi)置函數(shù),用來展示默認的錯誤頁面。

在頁頭模板文件中,$title 變量代表頁面的自定義標(biāo)題,它是在方法中被賦值的,但并不是直接賦值給 title 變量,而是賦值給 $data 數(shù)組中的 title 元素。

最后要做的就是按順序加載所需的視圖,view() 方法中的參數(shù)代表要展示的視圖文件名稱。$data 數(shù)組中的每一個元素將被賦值給一個變量,這個變量的名字就是數(shù)組的鍵值。所以控制器中 $data['title'] 的值,就等于視圖中 $title 的值。

路由

控制器已經(jīng)開始工作了!在你的瀏覽器中輸入 [your-site-url]index.php/pages/view 來查看你的頁面。當(dāng)你訪問 index.php/pages/view/about 時你將看到包含頁頭和頁腳的 about 頁面。

使用自定義的路由規(guī)則,你可以將任意的 URL 映射到任意的控制器和方法上,從而打破默認的規(guī)則: http://example.com/[controller-class]/[controller-method]/[arguments]

讓我們來試試。打開路由文件 application/Config/Routes.php 然后添加如下兩行代碼,并刪除掉其它對 $route 數(shù)組賦值的代碼。

  $routes->setDefaultController('Pages/view');
  $routes->add('(:any)', 'Pages::view/$1');

CodeIgniter 讀取路由的規(guī)則為從上到下,并將請求映射到第一個匹配的規(guī)則。每個規(guī)則都是一個正則表達式(左側(cè))映射到一個控制器和方法(右側(cè))。當(dāng)獲取到請求時,CodeIgniter 首先查找能匹配到的第一條規(guī)則,然后調(diào)用相應(yīng)的可能存在參數(shù)的控制器和方法。

你可以在關(guān)于 URL路由的文檔 中找到更多信息。

路由事例的第二條規(guī)則 $routes 數(shù)組中使用了通配符 (:any) 來匹配所有的請求,然后將參數(shù)傳遞給 Pages 類的 view() 方法。

為請求默認的控制器,你必須確定當(dāng)前路由未被定義或重新編寫過。默認的路由文件 does 下存在一個處理網(wǎng)站根目錄的路由 (/) 規(guī)則.刪除以下的路由來確保 Pages 控制器可以訪問到我們的 home 頁面:

$routes-&add(‘/’, ‘Home::index’);

現(xiàn)在訪問 index.php/about。路由規(guī)則是不是正確的將你帶到了控制器中的 view() 方法?太酷了!

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號