最近在使用codeigniter開發乙個企業站專案,一開始是把前台和後台分開作為兩個單獨的專案,但後來想想為啥不能放在乙個專案裡呢,便有了改造的想法。
先上一張最終的目錄結構圖
|-- config/
| |-- routes.php
|-- controllers/
| |-- backend/
| |-- frontend/
|-- core/
| |-- my_controller.php
| |-- my_router.php
|-- views/
| |-- backend/
| |-- frontend/
|-- static/
| |-- backend/
| |-- frontend/
|-- index.php
這樣設計的的好處:
1、目錄結構清晰
2、保持了單入口index.php
controllers/backend和controllers/frontend目錄下的控制器可以分別繼承不同的基類。比如:後台控制器繼承基類backend_controller,前台控制器繼承基類frontend_controller。
my_controller擴充套件核心系統類ci_controller,可以根據業務需要新增一些公共功能。
backend_controller和frontend_controller均繼承自my_controller。
那麼問題來了,backend_controller和frontend_controller定義在**呢。答案如下:
<?php
class my_controller extends ci_controller
}/**
* 後台基類
* class backend_controller
*/class backend_controller extends my_controller
}/**
* 前台基類
* class frontend_controller
*/class frontend_controller extends my_controller
}
不指定任何控制器時,希望能夠訪問預設控制器,所以我們去設定$route['default_controller'] = 'frontend/***';但是訪問會提示404錯誤,到底是因為什麼原因呢。
檢視system/core/router.php原始碼
if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2)
關鍵在於定義my_router類,重寫_set_default_controller方法
<?php
class my_router extends ci_router
if(sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2)
$this->set_directory($class);
$class = $method;
if (sscanf($method, '%[^/]/%s', $class, $method) !== 2)
}return;
}$this->set_class($class);
$this->set_method($method);
$this->uri->rsegments = [
1 => $class,
2 => $method];}
}
demo位址 CodeIgniter框架URL路由總結
uri 路由 一般來說,uri字串有著和它唯一對應的控制器 controller 類 方法。uri的各個部分是如下模式 pattern 複製 如下 然而在一些例子中,你也許想重定向這種關係來呼叫乙個不同的類 方法 class function 而不是與url一一對應 的呼叫 例如,你可能想使你的ur...
codeigniter使用pdo的參考配置
1 配置檔案修改 db default array dsn mysql dbname ci ecshop host 127.0.0.1 username root password dbdriver pdo 2 查詢操作 sql select from aaa where id id sql arr...
使用配置類定義 Codeigniter 全域性變數
config 的陣列。如果需要新增全域性配置項,可以在這個檔案中實現,考慮到自定義配置和框架配置的分離,建議新建乙個檔案 vars.php,然後做如下定義 工作目錄配置 config src cache fcpath src cache config src modules fcpath src m...