Alpaca-Spa-Laravel 是 先後端分離 開發的一個後臺管理系統的DEMO。Laravel用來實現後端功能,Alpaca-Spa用來實現前端功能,先後端之間經過Json交換數據。php
示例中主要功能有:css
登陸、註銷 用戶管理 權限管理 我的信息管理 定時任務管理
在實際開發中能夠根據具體的需求添加新的功能。html
主頁 (Alpaca-Spa): http://www.tkc8.com前端
後臺(Alpaca-Spa-Laravel) : http://full.tkc8.comlinux
手機端sui(Alpaca-Spa-Sui) : http://full.tkc8.com/app git
代碼 (oschina ): http://git.oschina.net/cc-sponge/Alpaca-Spa-Laravelgithub
代碼 (github ): https://github.com/big-sponge/Alpaca-Spa-Laravelweb
後臺管理端登陸帳號是一個測試賬號,權限只有瀏覽功能,沒有編輯等修改功能。sql
保證開發環境知足如下要求: PHP版本 >= 5.6.4 PHP擴展:OpenSSL PHP擴展:PDO PHP擴展:Mbstring PHP擴展:Tokenizer PHP擴展:XML (詳細參考:Laravel 5.4) 下載好源碼以後,你須要配置你的 Web 服務器的根目錄爲 public 目錄。 這個目錄的 index.php 文件做爲全部 HTTP 請求進入應用的前端處理器。 你須要配置一些權限。 storage 和 bootstrap 目錄應該容許你的 Web 服務器寫入,不然 Laravel 將沒法寫入。 關於配置文件: 下載好源碼以後,請在在/config目錄下建立 .env文件,固然你也能夠複製.env.development重命名爲.env。 不建議將.env加入git版本控制,由於配置文件中可能保存着你我的的數據庫訪問帳戶。 配置文件詳情請參考文檔中 「配置文件」一章節 數據庫腳本: /storage/sql/db_full.sql 若是你只想在你本地查看前端功能,請將/public/admin/index.html中 g_url 的值設置爲 "http://full.tkc8.com/"。 <script> var g_baseUrl = "/"; //前端資源根路徑(js,css等,在視圖模版中使用) var g_url = "/"; //後端接口根路徑 $(document).ready(function () { g_baseUrl = "http://" + window.location.host + "/admin/"; // g_url = "http://" + window.location.host; g_url = "http://full.tkc8.com"; Alpaca.Config.baseUrl = "/admin/"; //alpaca-spa根路徑 Alpaca.run("#/main/index/index"); }); </script> 這樣你就能夠使用本地的前端,訪問服務端(full.tkc8.com)提供的接口。 假設你本地配置的域名爲: 127.0.0.1 訪問: 127.0.0.1/admin
|--app | --Common -- 用來放置一些公共的類、函數等 | --Models -- 用來放置與數據庫對應的實體類文件 | --Modules -- 存放模塊相關信息,裏面包含控制器,業務邏輯等, | |--Manage -- 後臺管理模塊兒後端(服務端)代碼,先後分離開發,這裏只返回Json格式的接口 | |--Server -- 用戶前臺模塊兒後端(服務端)代碼,同上,只返回Json格式的接口 | ExceptionHandler.php -- 異常處理配置 | RouteProvider.php -- 路由配置 |--bootstrap -- 是Laravel框架自己自帶的一個目錄,主要功能是提供應用初始化的一些相關功能,須要讀寫權限(含子目錄) | --Console -- Laravel Cli | --builder -- 代碼自動生成工具 | --crontab -- 定時任務工具(非linux shell) |--config -- 配置文件目錄 | .env -- 將原來Laravel在外層的.env也挪到了config目錄下面 |--public -- 入口目錄,配置服務器時,應該將網站根目錄設置爲public | --admin -- 後臺管理模塊兒的前端(客戶端)部分(這裏是先後分離開發,這裏不含有任何php代碼,也能夠獨立部署) | --app -- 用戶前臺模塊兒的前端(客戶端)部分(這裏是先後分離開發,同上) | index.php -- php入口文件 |--storage -- 存放程序運行時的log、cache、session等文件,須要讀寫權限(含子目錄) |--vendor -- composer相關目錄 |composer.json |composer.lock
推薦每個模塊擁有本身的一個路由配置文件shell
1 app/RouteProvider.php中能夠配置整個系統的路由組織結構 2 app/Modules/Manage/router.php配置Manage模塊的相關路由 3 app/Modules/Server/router.php配置Server模塊的相關路由 4 bootstrap/builder/router.php配置代碼生成工具的路由 5 bootstrap/crontab/router.php配置定時任務工具的路由
1 配置文件存放在config目錄中,與原Laravel的規則同樣 2 處理與系統環境相關的配置。 若是設置了環境變量MOD_ENV = DEVELOPMENT,系統會加載.env.development配置文件 若是設置了環境變量MOD_ENV = PRODUCTION,系統會加載.env.production配置文件 若是設置了環境變量MOD_ENV = TEST,系統會加載.env.test配置文件 不然會默認加載.envt配置文件
1 實現權限功能,須要在數據庫中存在5張表: 用戶表、角色表、權限表、用戶角色關係表、角色權限關係表。 這樣創建用戶-角色-權限的對應關係。 2 登陸權限控制 1)若是當前控制器下的某一個動做不須要登陸權限: protected function noLogin() { // 如下Action不須要登陸權限 return ['action1','action2']; } 這樣 action1 與 action2 就不須要登陸也能夠訪問 2)若是當前控制器下的全部動做都不須要登陸權限: protected function noLogin() { this->isNoLogin =true; } 這樣當前控制器下的全部動做都不須要登陸權限就能夠直接訪問 3 角色權限控制 1)若是當前控制器下的某一個動做不須要角色權限控制: protected function withoutAuthActions() { // 如下Action不須要登陸權限 return ['action1','action2']; } 這樣 action1 與 action2 不須要角色權限也能夠訪問 2)若是當前控制器下的全部動做都不須要登陸權限: protected function noAuth() { this->isNoAuth =true; } 這樣當前控制器下的全部動做都不須要登陸權限就能夠直接訪問 3)重寫當前控制器下某一個動做的角色權限 protected function noAuth() { return [ 'actionName'=>function($result){ if($_GET['id'] == 1){ return true; } }, ]; } 能夠經過爲action指定一個函數來自定義動做的角色權限控制功能, 函數有一個參數$result, 若是$result爲true表示系統默認的角色權限控制判斷當前動做有權限訪問,false爲沒有權限訪問,
示例中提供了PHP實現定時任務(非linux-shell方式,與操做系統無關)功能。 適用於定時精確時間不低於1秒。web服務重啓、或者php重啓。該定時任務不會自動重啓。 能夠用來處理大部分定時任務的結局方案,商城定時自動收貨,關閉評論,訂單回滾;定時發送郵件,數據備份等 實現原理及更詳細的內容請參考下面這篇文章: https://my.oschina.net/u/3381391/blog/1510260
public\admin中存放前端代碼, public\admin\index.html是前端入口文件, public\admin\main\controller存放前端main模塊的控制器, public\admin\main\view存放前端main模塊的視圖頁面,
項目中提供了生成代碼的工具:Alpaca-Builder
目的用來快速的編寫代碼,減小一些重複的工做,主要功能是根據輸入的數據庫表名聲生成一下內容:
1 生成後端實體類 2 生成後端控制器 3 生成後端路由 4 生成前端JS控制器 5 生成前端編輯頁面 6 生成前端列表頁面 7 生成配置接口url 8 選擇是否複製到對應頁面
訪問方式,瀏覽器中輸入地址:你的域名\builder
(注意: 只有當配置文件中APP_ENV=local時,才允許訪問)
後端(服務端)部分: 1 創建數據表 2 編寫模型類,放在/app/Models 3 編寫控制器類,放在模塊的Controllers目錄下面,例如: /app/Modules/Manage/Controllers/{name}Controller.php 4 *(可選)若是有比較複雜的業務邏輯須要處理,能夠加一個Service層,放在模塊的Service目錄下面 5 路由配置:路由通常放在當前模塊目錄下面,例如:/app/Modules/Manage/router.php 前端(客戶端)部分: 項目採用先後分離開發,所以前端代碼會更獨立,html文件中不含有任何php代碼 1 編寫列表顯示頁面(兩個html) /public/admin/view/{name}/{name}ListView.html 頁面主體 /public/admin/view/{name}/{name}ListDisplay.html 頁面table部分 2 編寫編輯頁面(新增和修改用一個) /public/admin/view/{name}/{name}EditView.html 3 編寫前端控制器,實現與後端數據交互, : 路徑:/public/admin/controller/{name}.js 通常有三個方法: {name}ListView方法, 顯示列表頁面,調用後臺數據接口查找列表數據 {name}ListDisplay方法, 渲染顯示數據 {name}EditView方法 顯示編輯頁面,調用後臺接口 4 配置菜單: 路徑:/public/admin/view/layout/part/pageSidebar.html 5 配置後端接口,建議是把後端地址寫在配置文件裏面: 路徑:/public/admin/main/main.js 中的API變量
QQ羣: 298420174
做者: Sponge 郵箱: 1796512918@qq.com