一、項目部署
1、虛擬主機部署/本地部署
去掉public/index.php改到 根目錄下/index.php。在網站根目錄下建立文件index.php,內容如下
<?php // 定義應用目錄 define('APP_PATH', __DIR__ . '/apps/'); // 加載框架引導文件 require './thinkphp/start.php';
這樣基本上就可以了,這是最簡單的配置。
立即學習“PHP免費學習筆記(深入)”;
2、服務器部署
服務器部署項目文件入口public ,優勢:只給外人看到public目錄下的文件,與public同級的文件,在外網是隱藏狀態的,如:thinkphp、apps、extend、tests、vendor。更簡單的意思就是通過域名是訪問不到這些文件下內容的,但又不影響框架的使用。
二、創建模塊(自動生成模塊)
我的項目是部署在本地www/thinkphp 目錄下。在做之前,先要考慮清楚,你需要幾個模塊來完成你的項目。
開始實例
1、創建三個模塊 Common(公共模塊),Home(前臺模塊),Admin(后臺模塊)。公共模塊是必不可少的。
修改的情況下為public下的index.php,打開是這樣子的
//?定義應用目錄 define('APP_PATH',?__DIR__?.?'/../application/'); //?加載框架引導文件 require?__DIR__?.?'/../thinkphp/start.php';
在后面加上這兩句
$build?=?include?'../build.php'; //?運行自動生成 thinkBuild::run($build);
build.php配置 (自動生成目錄) 手冊參考:http://www.kancloud.cn/manual/thinkphp5/118021
在項目的根目錄有一個build.php文件,打開后看到是這樣的:
<?php return [ // 生成應用公共文件 '__file__' =>?['common.php',?'config.php',?'database.php'], ? ????//?定義demo模塊的自動生成?(按照實際定義的文件名生成) ????'demo'?????=>?[ ????????'__file__'???=>?['common.php'], ????????'__dir__'????=>?['behavior',?'controller',?'model',?'view'], ????????'controller'?=>?['Index',?'Test',?'UserType'], ????????'model'??????=>?['User',?'UserType'], ????????'view'???????=>?['index/index'], ????], ????//?其他更多的模塊定義 ];
然后我們給我們需要的文件名在這個地方加上,給的demo可以直接注釋掉,如下:
<?php return [ // 生成應用公共文件 '__file__' =>?['common.php',?'config.php',?'database.php'], ????//公共模塊目錄 ????'common'?=>?[ ????????'__file__'???=>?['common.php'], ????????'__dir__'????=>?['controller',?'model','lang'], ????????'controller'?=>?['Index'], ????????'model'??????=>?['Base'], ????], ????//?Index模塊 ????'home'?????=>?[ ????????'__file__'???=>?['common.php'], ????????'__dir__'????=>?['behavior',?'controller',?'model',?'view','lang'], ????????'controller'?=>?['Index'], ????????'model'??????=>?['Test'], ????????'view'???????=>?['index/index'], ????], ????//?Admin?模塊 ????'admin'?????=>?[ ????????'__file__'???=>?['common.php'], ????????'__dir__'????=>?['behavior',?'controller',?'model',?'view','lang'], ????????'controller'?=>?['Index'], ????????'model'??????=>?['Test'], ????????'view'???????=>?['index/index'], ????],? ];
1)其中的SITE_PATH,與 RUNTIME_PATH后面都有用到,所有優先放在index.php里面方便后面調用。
2)這兩個東西,要放一起使用
$build?=?include?'./build.php'; //?運行自動生成 thinkBuild::run($build);
相關推薦:《ThinkPHP教程》
三、創建基類
開干之前,得先設置好“基類”,為什么呢?打個比方,要訪問會員中心相關的控制器,這類控制器是不是都要有一個“登錄限制”,才讓訪問會員相關的控制器? 基類的作用就出來了。
1、創建三大基類
原始基類
位置:thinkphpappscommoncontrollerbase.php
作用:base模塊下的內容,Index模塊,和Admin模塊都可以調用。
代碼:
<?php /** * 原始基類 * */ namespace appCommoncontroller; use thinkController; class Base extends Controller{ public function _initialize() { parent::_initialize(); echo '原始基類'; } public function test1(){ return 'test1'; } }
Index模塊基類
位置:thinkphpappscommoncontrollerbase.php
作用:Index模塊下的控制器,都要“繼承基類”并且“調用基類”。
代碼:
<?php /** * 前端基類 * */ namespace appindexcontroller; use appCommoncontrollerBase; class IndexBase extends Base { public function _initialize() { parent::_initialize(); } public function index() { } }
Admin模塊基類
位置:thinkphpappscommoncontrollerbase.php
作用:Admin模塊下的控制器,都要“繼承基類”并且“調用基類”。
代碼:
/** ?*?后臺首頁 ?*?*/ namespace?appAdmincontroller; use?appAdmincontrollerAdminBase; class?Index?extends?AdminBase { ????public?function?_initialize() ????{ ????????parent::_initialize(); ????} ????public?function?index() ????{ ????????return?$this->fetch(); ????} }
(User模塊基類,如果有會員的話,這個也必須要創建的)
創建基類的主要目的,就是“繼承”與“調用”。
四、設置模板路徑
默認的模板路徑在模塊/view文件里面。如果你覺得這樣不太方便管理,想要把他設置Template目錄下,可以這樣做。
模板參數 ,能夠影響的它參數,是當前模塊下config.php template->view_path參數。
實際操作
1、配置共享參數
在apps/config.php設置一些參數,方便在Index或Admin模塊下config.php調用。
apps/config.php,增加一些參數。
'template'???????????????=>?[//?模板路徑 ????????'view_path'????=>?'template/',?????//?就是這里 /** ?????*?前臺文件配置 ?????*?Author:?MR.zhou ?????*?*/ ????'index'?=>?[ ????????//?模快名稱 ????????'model_name'?=>'index', ????????//?默認模板文件名稱 ????????'default_template'?=>?'default',???????//?這里可以切換模塊下的默認模板名稱 ????], ????/** ?????*?后臺文件配置 ?????*?Author:?MR.zhou ?????*?*/ ????'admin'=>[ ????????//?模快名稱 ????????'model_name'?=>'admin', ????????//?默認模板文件名稱 ????????'default_template'?=>'default',????????//?這里可以切換模塊下的默認模板名稱 ],
2、設置模板參數
index/config.php
'template'=>?[ ????//?模板路徑 ????'view_path'=>?config('template.view_path').config('index.model_name').'/'.config('index.default_template').'/', ],
admin/config.php
<?php //配置文件 return [ // 模板配置 'template' =>?[ ????????//?模板路徑 ????????'view_path'????=>?config('template.view_path').config('admin.model_name').'/'.config('index. ????????default_template').'/', ????], ];
擴展:
1.模板后綴view_suffix,它的影響
http://localhost/thinkphp/index/news/index/id/1212
http://localhost/thinkphp/index/news/index/id/1212.html
五、配置data文件夾
如果你看項目下的各種文件,有種亂七八糟的感覺的話,你就可以進行以下配置。
配置data文件夾的,整理各種文件,讓看起來舒服些。
1、設置runtime文件夾
index.php
define('RUNTIME_PATH',?__DIR__?.?'/data/runtime/');
2、設置upload,存放上傳圖片、上傳文件
3、設置static,存放jquery.js、bootstrap、一些效果插件什么的
//?視圖輸出字符串內容替換 'view_replace_str'???????=>?[ ????'__DATA__'?=>?SITE_PATH.'data/', ????//?上傳文件路徑 ????'__UPLOAD__'?=>SITE_PATH.'data/upload/', ????//??靜態文件路徑?(如bootshop,js,css) ????'__STATIC__'?=>SITE_PATH.'data/upload/',???? ],
4、定義模板文件路徑,方便調用模板下的css、js、images
'view_replace_str'???????=>?[ ????//?模板文件路徑 ????'__TEMPLATE__'?=>?config('template.view_path').config('index.model_name').'/'.config('index.default_template') ????.'/', ????//?模板下的共享文件路徑(css,js,images...) ????'__PUBLIC__'?=>?SITE_PATH.'/'.config('template.view_path').config('index.model_name').'/'.config('index. ????default_template').'/public/', ],
模板頁引用:
<script> <link href=”__PUBLIC__css/style.css”> @@##@@</script>
5、想放什么都可以,自己設置?
六、公共模塊common的使用
common模塊屬于公共模塊,Thinkphp框架,默認就能調用。
實際用處:任何模塊都可能用到的模型、控制、事件提取出來放到公共模塊下。
1、公共事件 appscommoncommon.php
作用:一般存放密碼加密、下拉框封裝、讀取某文件夾下文件
/** ?*?密碼加密 ?*?@param?string?$password ?*?@param?string?$password_salt ?*?@return?string ?*/ function?password($password,?$password_salt){ ????return?md5(md5($password)?.?md5($password_salt)); }
2、公共配置 appscommonconfig.php
把Index模塊、Admin模塊公用的部分提取出來放到這里面,如:公用的模板路徑
'template'???????????????=>?[ ????//?模板路徑 ????'view_path'????=>?'template/', ]
3、公共語言包 appscommonlangzh-cn.php
比如經常用到的詞 提交成功、提交失敗、執行成功、執行錯誤、添加成功、添加失敗、修改成功、修改失敗、刪除成功、刪除失敗… 可以放到公共語言包,在Index模塊、Admin模塊都可以用的到。
<?php /** * 全局語言包 * zh-cn * */ return [ 'success' =>?'執行成功', ????'error'????????????=>?'執行失敗', ????'add_success'??????=>?'添加成功', ????'add_error'????????=>?'添加失敗', ????'edit_success'?????=>?'修改成功', ????'edit_error'???????=>?'修改失敗', ????'delete_success'???=>?'刪除成功', ????'delete_error'?????=>?'刪除失敗', ];
php頁面調用:$lang = lang(‘success’)
html頁面調用:{:lang(‘success’)}
4、公共控制器 appscommoncommon.php
跟上面差不多個意思 Index模塊、Admin模塊都能用到的放這里。
5、公共模塊 appscommoncommon.php
跟上面差不多個意思 Index模塊、Admin模塊都能用到的放這里。
七、設置錯誤頁面①
設置網站的錯誤提示頁面,也是一個很重要的環節。
1、空操作
在當前控制器里面增加_empty操作
public?function?_empty(){ ????$this->error('方法不存在'); } Public?function?index(){??????? }
測試方法:
正常:
http://localhost/thinkphp/index/index/index
錯誤: 會提示“方法不存在”
http://localhost/thinkphp/index/index/df
2、空控制器
在模塊下建立Error控制器,
位置: index/error.php 相關參數:empty_controller
代碼:
<?php /** * 前端首頁 * */ namespace appindexcontroller; use appindexcontroller; class Error extends IndexBase { public function index(){ echo '訪問的控制器不存在'; } }
測試:http://localhost/thinkphp/index/inde3dfx/index
3、異常錯誤拋出
能夠影響它的是,當前模塊下的配置文件。如果當前配置文件無效,則會自動鎖定公共模塊下的配置參數。
相關參數:exception_tmpl,error_message
//?異常頁面的模板文件 'exception_tmpl'=>?THINK_PATH?.?'tpl'?.?DS?.?'think_exception.tpl',
八、設置錯誤頁面②
完美的去設置錯誤頁面
1、準備一個錯誤頁面 error.html,位置:thinkphptemplateindexdefaulterror.html ,準備把前段所有的錯誤提示都指向這里。
2、空操作指向
在appsindexcontrollerIndexbase.php,“基類”里面設置_empty。
<?php /** * 前端基類 * */ namespace appindexcontroller; use appCommoncontrollerBase; class IndexBase extends Base { public function _initialize() { parent::_initialize(); } /** * 空操作 跳轉 * */ public function _empty(){ //abort(); exception(); // 這兩種方法都可以 } }
3、空控制器指向
在appsindexcontrollerError.php
<?php /** * 空控制器跳轉 * */ namespace appindexcontroller; use appindexcontroller; class Error extends IndexBase { public function index(){ abort(); } }
4、異常錯誤指向?
在 index/config.php exception_tmpl 參數
'exception_tmpl'?????????=>?THINK_PATH?.?'tpl'?.?DS?.?'think_exception.tpl', ?//'exception_tmpl'?=>'E:/wamp/www/thinkphp/template/index/default/error.html',
注意:地址一定要絕對路徑。
拓展,
401,404,500等錯誤頁面自定義
相關參數:http_exception_template
手冊地址:http://www.kancloud.cn/manual/thinkphp5/163256
代碼:
config.php
'http_exception_template'????=>??[ ????????//?定義404錯誤的重定向頁面地址 ????????404?=>??ROOT_PATH.config('template.view_path').config('index.model_name').'/'.config ????????('index.default_template').'/404.html', ????????//?還可以定義其它的HTTP?status ????????401?=>??ROOT_PATH.config('template.view_path').config('index.model_name').'/'.config ????????('index.default_template').'/401.html', ????],
控制器調用
abort(404,’錯誤信息’)
error.html,404.html 頁面代碼,可以參考thinkphpthinkphptplthink_exception.tpl
九、路由別名Route
主要作用:隱藏自己的真實路由名稱
Route.php
方法一:
<?php use thinkRoute; Route::alias('home','index/index'); Route::alias('admin','admin/index');
方法二:
<?php return [ '__pattern__' =>?[ ????????'name'?=>?'w+', ????], ????'[hello]'?????=>?[ ????????':id'???=>?['index/hello',?['method'?=>?'get'],?['id'?=>?'d+']], ????????':name'?=>?['index/hello',?['method'?=>?'post']], ????], ????'__alias__'?=>??[ ????????'home'??=>??'index/index', ???????'admin'=>?'admin/index' ????], ];
http://localhost/thinkphp/index.php/home/test 同等與http://localhost/thinkphp/index.php/index/index/test
http://localhost/thinkphp/index.php/admin/edit/ 同等與http://localhost/thinkphp/index.php/admin/index/edit
注釋:別名 => ‘模型/控制器’ ( 別名等于模塊+控制器)
十、路由設置,隱藏indx.php
網站根目錄下.htaccess
<ifmodule> Options?+FollowSymlinks?-Multiviews RewriteEngine?on RewriteCond?%{REQUEST_FILENAME}?!-d RewriteCond?%{REQUEST_FILENAME}?!-f RewriteRule?^(.*)$?index.php/$1?[QSA,PT,L] </ifmodule>