[php] CodeIgniter MVC

  • 0

● Models
Model檔案名稱
     Model_name是類別名稱。類別名稱必須第一個字母大寫其餘的字母小寫
     檔案名稱是全部小寫的類別名稱
Model 只在 Controller 的函數中才會被載入/呼叫
Active Record 類別
class Blog_controller extends CI_Controller {
    function blog() {
        $this->load->model('Blog');

        $data['query'] = $this->Blog->get_last_ten_entries();

        $this->load->view('blog',$data);
    }


● Views
Views無法直接被呼叫,它必須被Controller所呼叫。可一次載入多個views
收納子目錄: $this->load->view('folder_name/file_name'); // view資料夾裡的位置
新增動態資料到 View
     可由 array 或是 object 的方式傳遞
     By Array
          $data = array(
                         'title' => 'My Title',
                         'heading' => 'My Heading',
                         'message' => 'My Message'
                    );
          $this->load->view('blogview', $data);
     By Object
          $data = new Someclass();
          $this->load->view('blogview', $data);
    
     再到 Controller 中加入控制
     <?php
     class Blog extends CI_Controller {
          function index() {
               $data['title'] = "My Real Title";
               $data['heading'] = "My Real Heading";
    
               $this->load->view('blogview', $data);
          }
     }
     ?>
    
     再到View裡更改成與資料相關的陣列變數名稱
     <html>
     <head>
     <title><?php echo $title;?></title>
     </head>
     <body>
          <h1><?php echo $heading;?></h1>
     </body>
     </html>
    
新增迴圈(Creating Loops)
     在Controller可以送出多維陣列,不限為單變數。在View新增迴圈
     Views 檔變換 PHP 句法
     <ul>
     <?php foreach ($todo_list as $item):?>
    
     <li><?php echo $item;?></li>
    
     <?php endforeach;?>
     </ul>
     Template Parser 類別


● Controllers
簡單來說就是 class 檔案,用來處理 URI
     example.com/index.php/blog/              ->     CodeIgniter 會嘗試在找一個 blog.php 的控制器
     example.com/index.php/blog/index/    ->      URI 的第二個分段,決定了控制器裡頭的那一個函數得被呼叫出來。
Class 命名必須要字首大寫
函數(Functions),參數
     http://example.com/index.php/products/shoes/sandals/123
     <?php
     class Products extends CI_Controller {
         public function shoes($sandals, $id) {
             echo $sandals;
             echo $id;
         }
     }
     ?>
定義預設控制器:
$route['default_controller'] = 'Blog'      ->     不需要給予任何 URI 分段內容
_output() 負責接收最終的的輸出資料
     -
● URL
分段式(segmented-based): http://example.com/class/function/ID
移除 index.php 檔案:  用 .htaccess 移除
     [注意] 要先設定 Apache Mod_rewrite
          Ps. 我加入AddModule mod_rewrite.c會有錯誤,所以並沒有加入
     e.g. www/ 在 CI_Tutorial 這個專案的root(www/CI_Tutorial)資料夾,新增 .htaccess 並加入以下code
     RewriteEngine on
     RewriteBase /
     RewriteCond $1 !^(index\.php|images|robots\.txt|$)
     RewriteRule ^(.*)$ CI_Tutorial/index.php/$1 [L,QSA]
     如此一來,http://localhost/CI_Tutorial/(:any) 就同義於 http://localhost/CI_Tutorial/index.php/(:any)
     $route['product/:num'] = "catalog/product_lookup";
          如果"product"這個字在URL的第一片段,而且第二片段是數字,則轉而使用"catalog"類別
以及"product_lookup"方法。
     $route['product/(:num)'] = "catalog/product_lookup_by_id/$1";
          一個在第一片段為"product"而第二片段是任何數字的URL將重新對應到"catalog"類別
以及"product_lookup_by_id"方法,匹配的數字將傳給這個函數作為變數。

沒有留言 :

張貼留言