欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 從ThinkPHP3.2.3過渡到ThinkPHP5.0學習筆記圖文詳解

從ThinkPHP3.2.3過渡到ThinkPHP5.0學習筆記圖文詳解

熱門標簽:保定crm外呼系統運營商 西區企業怎么做地圖標注入駐 地下城堡2圖九地圖標注 抖音有個地圖標注是什么意思 九江外呼系統 海南人工外呼系統有效果嗎 阿里云400電話申請加工單 七魚外呼系統停用嗎 智能電話機器人排名前十名南京

本文實例講述了從ThinkPHP3.2.3過渡到ThinkPHP5.0學習筆記。分享給大家供大家參考,具體如下:

用tp3.2.3做了不少項目,但是畢竟要與時代接軌,學習一些新的框架,比如tp5

以下記錄一些學習中遇到的問題及解決辦法,還有tp3.2和tp5.0的一些區別,適合給用過tp3沒用過tp5的童鞋做個參考。

隨著學習不斷更新......

+++++++++++++++++++++++分割線總是要有的+++++++++++++++++++++++

首先到tp官網下載了一個最新的ThinkPHP5.0.22完整版:

直接扔到了服務器上,解壓后目錄結構如下:

目錄結構整體與tp3.2大同小異,文件夾首字母小寫了,應用入口文件 在根目錄下 public/index.php,官方文檔對public文件夾定義為WEB部署目錄(對外訪問目錄):

配置服務器域名解析的時候需要把項目根目錄指向/public:

VirtualHost *:80>
 ServerAdmin 1977629361@qq.com
 DocumentRoot /var/www/tp/public
 ServerName tp.oyhdo.com
 ServerAlias tp.oyhdo.com
 DirectoryIndex index.php index.html index.htm 
/VirtualHost>

根目錄下 application/config.php 為應用(公共)配置文件,設置一些常用的配置,以下簡稱為“配置文件”:

訪問網址如下:

訪問tp.oyhdo.com等同于訪問tp.oyhdo.com/index.php/index/Index/index(默認不區分大小寫)

即默認模塊index,默認控制器Index,默認操作index

配置文件修改分別為default_moduledefault_controller、default_action

如果需要強制區分url大小寫,修改 url_convert false

配置文件中設置 app_debug true,打開應用調試模式,以便開發調試:

【隱藏url中的index.php入口文件】

以Apache服務器為例,首先確認Apache配置文件httpd.conf中開啟了mod_rewrite.so模塊:

然后把所有【AllowOverride】設為All:

 最后修改根目錄下 public/.htaccess 文件內容為:

IfModule mod_rewrite.c>
 Options +FollowSymlinks -Multiviews
 RewriteEngine on
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
/IfModule>
去掉index.php也可訪問:

【隱藏前臺url模塊名】 

把index模塊作為前臺,在前臺新建了一個User控制器:

?php
namespace app\index\controller;

class User
{
 public function user()
 {
 return '這是User控制器的user操作';
 }
}

 正常需要這樣訪問User控制器的user操作:

 為了前臺url顯示簡潔一些,要去掉模塊名index,然后就崩了:

如果只有一個模塊,可以在 /application/common.php 中添加:

// 綁定當前訪問到index模塊
define('BIND_MODULE','index');

親測訪問成功:

但是項目通常會有前后臺的區分,至少兩個模塊, 用上面的方法綁定index模塊后,再訪問其它模塊就會報錯:

(新建了一個admin模塊作為后臺)

?php
namespace app\admin\controller;

class Index
{
 public function index()
 {
 return '這是后臺首頁';
 }
}

 

對于多模塊的情況,可以在 /application/route.php 中綁定默認模塊路由(去掉上面的單模塊綁定):

use think\Route;
Route::bind('index');

前臺訪問成功:

 然后在/public/下新建一個入口文件admin.php,綁定后臺模塊admin,來訪問后臺:

?php
// [ 應用入口文件 ]
namespace think;
// 定義應用目錄
define('APP_PATH', __DIR__ . '/../application/');
// 加載框架引導文件
require __DIR__ . '/../thinkphp/base.php';
// 綁定當前入口文件到admin模塊
Route::bind('admin');
// 關閉admin模塊的路由
App::route(false);
// 執行應用
App::run()->send();

后臺訪問成功:

(修改后臺地址只需修改這個文件名即可)
 

【返回數據】

配置文件中默認輸出類型 default_return_type 為html:

 直接打印輸出字符串、數組,沒什么特殊:

public function index()
{
 $str = 'hello,world!';
 $arr = array('state'=>1,'msg'=>'success');

 //打印字符串
 echo $str;

 //打印數組
 var_dump($arr);
}

返回json格式數據:

public function index()
{
 $arr = array('state'=>1,'msg'=>'success');
 return json($arr);
 
 //返回其它狀態碼或響應頭信息
 //return json($arr, 201, ['Cache-control' => 'no-cache,must-revalidate']);

 //xml格式
 //return xml($arr);
}

(對于只做API開發的情況,可以設置default_return_type為json,直接return $arr即可返回json格式數據)
 

【渲染模板、分配數據】

如圖建立視圖層,index.html作為前臺首頁(內容為“這是首頁”):

tp3渲染模板直接在控制器里$this->display(),tp5并不支持。

tp5渲染模板,在控制器中繼承think\Controller類,使用 return $this->fetch() 或者使用助手函數 return view()

?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
 public function index()
 {
 return $this->fetch();
 //return view();
 }
}

tp5分配數據的方式依舊使用 $this->assign()

?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
 public function index()
 {
 	$name = 'lws';
 $this->assign('name',$name);
 return $this->fetch();
 }
}

index.html頁面讀取數據:

{$name}

(修改模板引擎標簽 配置文件【tpl_begin】、【tpl_end】)

【繼承父類控制器】

寫一個栗子,新建一個Base控制器作為父類控制器,Index控制器繼承Base控制器

在父類控制器中初始化分配數據,子類控制器渲染模板:

Base.php:

?php
namespace app\index\controller;
use think\Controller;
class Base extends Controller
{ 
 //初始化方法
 public function _initialize()
 {	
 	$haha = '快下班了';
 $this->assign('haha',$haha);
 }
}

Index.php:

?php
namespace app\index\controller;
use think\Controller;
class Index extends Base
{
 public function index()
 {
 return $this->fetch();
 }
}

index.html:

{$haha}

(與tp3.2相比,父類控制器不能是Public控制器) 

【配置參數】

tp3.2里面使用C方法設置、獲取配置參數

tp5使用助手函數 config() 設置、獲取配置參數:

//配置一個參數
config('name','lws');

//批量配置參數
config([
 'info'=>['sex'=>'nan','aihao'=>'nv']
]);

//獲取一個配置參數
echo config('name');

//獲取一組配置參數
dump(config('info'));

//獲取一個二級配置參數
echo config('info.sex');

【get傳參】

tp5廢除了url/參數名1/參數值1/參數名2/參數值2......這樣的方式傳參,還是老老實實用url?參數名1=參數值1參數名2=參數值2......這樣傳吧。

控制器里打印$_GET

?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
 public function index()
 {
 $getdate = $_GET;
 dump($getdate);	
 }
}

 這樣是不對滴:

這樣就好使:

【安全獲取變量】 

tp3.2可以使用I方法安全獲取get、post等系統輸入變量

tp5中使用助手函數 input()

//獲取get變量
$data1 = input('get.name');

//獲取post變量
$data2 = input('post.name');

//獲取當前請求變量
$data3 = input('param.name');

//獲取request變量
$data4 = input('request.name');

//獲取cookie變量
$data5 = input('cookie.name');

//獲取session變量
$data6 = input('session.name');

//獲取上傳文件信息
$data7 = input('file.image');

(注意:獲取的數據為數組,要加上 /a 修飾符才能獲取到)

$arr = input('post.arr/a');

可以在配置文件中設置全局過濾方法:

// 默認全局過濾方法 用逗號分隔多個
'default_filter'  => 'htmlspecialchars',

【數據庫操作】

tp5的數據庫配置文件在根目錄 /application/database.php:(也可在模塊下單獨配置)

連接數據庫:tp3.2支持M方法連接數據庫,tp5使用 Db類 或 助手函數db()

查詢數據:依舊使用 find()、select() 方法,查詢一個字段使用 value() 方法代替getField()

//查詢一條
$artinfo = db('article')->find();

//查詢全部
$artinfo = db('article')->select();

//查詢一個字段
$artinfo = db('article')->value('article_title');

添加數據:tp3.2使用add(),tp5使用 insert():返回插入條數  或  save():返回id

//添加一條數據
$data['article_title'] = 'PHP是世界上最好的語言';
$data['article_content'] = '如題';
db('article')->insert($data);
//或 db('article')->save($data);
//添加多條數據
$data = [
 ['article_title' => '標題1', 'article_content' => '內容1'],
 ['article_title' => '標題2', 'article_content' => '內容2'],
 ['article_title' => '標題3', 'article_content' => '內容3']
];
db('article')->insertAll($data);

修改數據:tp3.2使用save(),tp5使用 update()

//修改數據
$whe['article_id'] = 1;
$data['article_title'] = '修改后的標題';
db('article')->where($whe)->update($data);

刪除數據:沒錯還是 delete()

//刪除數據
$whe['article_id'] = 1;
db('article')->where($whe)->delete();

db()助手使用起來比較方便,但每次都會重新連接數據庫,因此應當盡量避免多次調用,建議還是使用Db類操作數據庫。

Db類操作原生SQL:

?php
namespace app\index\controller;
use think\Db;
class Index {
 public function index() {
 // 插入記錄
 $res = Db::execute('insert into lws_article (title ,content) values ("標題", "內容")');
	
 // 刪除數據
 $res = Db::execute('delete from lws_article where art_id = 1 ');

 // 更新記錄
 $res = Db::execute('update lws_article set title = "修改標題" where art_id = 1 ');

 // 查詢數據
 $res = Db::query('select * from lws_article where art_id = 1');

 // 顯示數據庫列表
 $res = Db::query('show tables from blog');

 // 清空數據表
 $res = Db::execute('TRUNCATE table lws_article');
 }
}

Db類操作查詢構造器:

?php
namespace app\index\controller;
use think\Db;
class Index {
 public function index() {
	// 查詢數據(數據庫沒有配置表前綴)
	$res = Db::table('lws_article')
	 ->where('art_id', 1)
	 ->select();

	//以下為數據庫配置了表前綴	

	// 插入記錄
	$res = Db::name('article')
		->insert(['title' => '標題', 'content' => '內容']);

	// 更新記錄
	$res = Db::name('article')
		->where('art_id', 1)
		->update(['title' => "修改標題"]);

	// 查詢數據
	$res = Db::name('article')
		->where('art_id', 1)
		->select();

	// 刪除數據
	$res = Db::name('article')
		->where('art_id', 1)
		->delete();
 
 //鏈式操作舉例
 $artlist = Db::name('article')
	 ->where('is_del', 'N')
	 ->field('id,title,content')
	 ->order('post_time', 'desc')
	 ->limit(10)
	 ->select();
 } 
}

【切換數據庫】

首先在數據庫配置中配置多個數據庫:

// 數據庫配置1
'db1' => [
	// 數據庫類型
	'type' => 'mysql',
	// 服務器地址
	'hostname' => '127.0.0.1',
	// 數據庫名
	'database' => 'blog1',
	// 數據庫用戶名
	'username' => 'root',
	// 數據庫密碼
	'password' => '123456',
	// 數據庫連接端口
	'hostport' => '',
	// 數據庫連接參數
	'params' => [],
	// 數據庫編碼默認采用utf8
	'charset' => 'utf8',
	// 數據庫表前綴
	'prefix' => 'lws_',
],
// 數據庫配置2
'db2' => [
	// 數據庫類型
	'type' => 'mysql',
	// 服務器地址
	'hostname' => '127.0.0.1',
	// 數據庫名
	'database' => 'blog2',
	// 數據庫用戶名
	'username' => 'root',
	// 數據庫密碼
	'password' => '',
	// 數據庫連接端口
	'hostport' => '',
	// 數據庫連接參數
	'params' => [],
	// 數據庫編碼默認采用utf8
	'charset' => 'utf8',
	// 數據庫表前綴
	'prefix' => 'lws_',
],

使用connect方法切換數據庫:

?php
namespace app\index\controller;
use think\Db;
class Index {
 public function index() {
 $db1 = Db::connect('db1');
 $db2 = Db::connect('db2');
 $db1->query('select * from lws_article where art_id = 1');
 $db2->query('select * from lws_article where art_id = 2');
 }
}

【系統常量】

tp5廢除了一大堆常量:

REQUEST_METHOD IS_GET 
IS_POST  IS_PUT 
IS_DELETE IS_AJAX 
__EXT__  COMMON_MODULE 
MODULE_NAME CONTROLLER_NAME 
ACTION_NAME APP_NAMESPACE 
APP_DEBUG MODULE_PATH等

需要使用的常量可以自己定義,例如IS_GET、IS_POST

我在父類的初始化方法中定義了這兩個常量:

?php
namespace app\index\controller;
use think\Controller;
class Base extends Controller
{
 public function _initialize()
 {	
 	define('IS_GET',request()->isGet());
 define('IS_POST',request()->isPost());
 }
}

然后在子類控制器中就可以使用這個常量做一些判斷:

?php
namespace app\index\controller;
class Index extends Base
{
 public function index()
 { 
 if(IS_POST){
  echo 111;
 }else{
  echo 222;
 }
 }
}

【定義路由】

例如一篇博客詳情頁,原來的網址為:http://oyhdo.com/home/article/detial?id=50,即home模塊下的article控制器下的detial操作方法,傳遞參數id。

在路由配置文件 application/route.php 中添加路由規則:

return [
 'article/:id' => 'home/article/detial',
];

或者使用 Route 類,效果一樣: 

use think\Route;
Route::rule('article/:id','home/article/detial');

定義路由規則之后訪問http://oyhdo.com/article/50即可


 【url分隔符的修改】

修改 application/config.php 中的 pathinfo_depr :

// pathinfo分隔符
 'pathinfo_depr'  => '-',

訪問網址變為:http://oyhdo.com/article-50

【跳轉、重定向】

tp3里面的正確跳轉:$this->success()、錯誤跳轉:$this->error()、重定向:$this->redirect(),在tp5里面同樣適用(繼承\think\Controller

tp5新增 redirect() 助手函數用于重定向:

return redirect('https://www.oyhdo.com');

更多關于thinkPHP相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結》、《ThinkPHP常用方法總結》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術總結》。

希望本文所述對大家基于ThinkPHP框架的PHP程序設計有所幫助。

您可能感興趣的文章:
  • thinkPHP5.0框架URL訪問方法詳解
  • 學習thinkphp5.0驗證類使用方法
  • 在thinkphp5.0路徑中實現去除index.php的方式

標簽:涼山 九江 甘肅 昭通 韶關 十堰 遼陽 梅河口

巨人網絡通訊聲明:本文標題《從ThinkPHP3.2.3過渡到ThinkPHP5.0學習筆記圖文詳解》,本文關鍵詞  從,ThinkPHP3.2.3,過渡到,ThinkPHP5.0,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《從ThinkPHP3.2.3過渡到ThinkPHP5.0學習筆記圖文詳解》相關的同類信息!
  • 本頁收集關于從ThinkPHP3.2.3過渡到ThinkPHP5.0學習筆記圖文詳解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    99视频一区二区| 欧美色老头old∨ideo| 久久众筹精品私拍模特| 日韩中文字幕区一区有砖一区| 91免费精品国自产拍在线不卡| 91人妻一区二区三区蜜臀| 久久亚洲免费视频| 国产综合成人久久大片91| 人妻一区二区视频| 精品乱人伦一区二区三区| 蜜臀精品久久久久久蜜臀 | 欧美性一二三区| 椎名由奈av一区二区三区| 成人激情文学综合网| √天堂中文官网8在线| 国产精品久久久久四虎| 国产成人aaaa| 国产一区二区播放| 日韩伦理av电影| 97精品国产97久久久久久久久久久久| 日本一级二级视频| 亚洲激情一二三区| 无码人妻一区二区三区精品视频| 欧美日韩一区二区三区高清| 午夜电影久久久| www.自拍偷拍| 久久综合国产精品| 国产成人综合亚洲网站| 激情国产一区二区| 乱老熟女一区二区三区| 亚洲视频在线观看一区| 欧美日韩一区二区区别是什么 | 少妇激情一区二区三区视频| 91精品婷婷国产综合久久 | 欧美视频一区二区三区| 亚洲v精品v日韩v欧美v专区| 免费看黄色aaaaaa 片| 26uuu国产电影一区二区| 国产精品一区专区| 日本久久电影网| 午夜久久久影院| 人妻av无码一区二区三区| 中文子幕无线码一区tr| 91色在线porny| 欧美一级高清片| 国产一区二区看久久| 色素色在线综合| 肉丝袜脚交视频一区二区| 激情五月深爱五月| 夜色激情一区二区| 偷拍夫妻性生活| 综合色中文字幕| chinese麻豆新拍video| 精品久久一二三区| 成人精品亚洲人成在线| 7777精品伊人久久久大香线蕉最新版| 美女视频黄久久| 一本一道久久a久久精品 | 亚洲男人都懂的| 成人性生活免费看| 国产欧美日韩精品一区| 97久久超碰国产精品| 精品蜜桃在线看| 91片在线免费观看| 亚洲精品一区二区精华| eeuss鲁片一区二区三区在线观看| 欧美人妖巨大在线| 国产91精品在线观看| 欧美精选一区二区| 高清成人免费视频| 欧美一二区视频| 本田岬高潮一区二区三区| 日韩免费视频一区二区| av不卡免费电影| 亚洲精品一区在线观看| 无码国产精品久久一区免费| 欧美极品美女视频| 亚洲熟女乱综合一区二区三区| 国产精品免费久久| 成人精品999| 亚洲一区二区精品久久av| 很污很黄的网站| 日韩在线观看一区二区| 色丁香久综合在线久综合在线观看| 毛片av一区二区| 欧美三级中文字| 成人自拍视频在线观看| 精品国产一区二区国模嫣然| 国偷自产av一区二区三区麻豆| 国产精品午夜在线观看| 人妻精品久久久久中文字幕| 中文国语毛片高清视频| 蜜桃av一区二区三区电影| 日本精品一级二级| 国产精品乡下勾搭老头1| 欧美成人一区二区| 91成人在线观看喷潮蘑菇| 亚洲欧洲日韩综合一区二区| 欧美波霸videosex极品| 日本美女一区二区三区视频| 欧美日韩综合一区| 99re亚洲国产精品| 国产精品久久久久影院| 一级片手机在线观看| 亚洲bdsm女犯bdsm网站| 在线免费观看成人短视频| 风间由美一区二区三区在线观看| 欧美精品一区二区三区蜜桃| 先锋资源av在线| 亚洲成av人片在线观看无码| 色悠悠亚洲一区二区| 国产凹凸在线观看一区二区| 欧美精品一区二区三区蜜桃| 日本高清www| 日韩avvvv在线播放| 制服丝袜在线91| 美女又黄又免费的视频| 国产精品人妖ts系列视频| 蜜桃av乱码一区二区三区| 国产亚洲一区二区三区四区| 国产又爽又黄无码无遮挡在线观看| 亚洲午夜激情网站| 欧美视频自拍偷拍| 91视频.com| 亚洲精品乱码久久久久久| 午夜国产福利一区二区| 成人一级片网址| 国产精品久久久久久久久免费相片| 一二三四在线观看视频| 国产一区二区不卡| 国产午夜三级一区二区三| 丁香六月激情综合| 国产精品亚洲人在线观看| 国产精品嫩草99a| 色综合天天狠狠| 熟妇无码乱子成人精品| 亚洲午夜在线电影| 91精品国产色综合久久| 中文文字幕文字幕高清| 日韩国产欧美在线视频| 精品少妇一区二区三区| 精品欧美一区二区久久久| 国产一区二区三区黄视频 | 一本色道a无线码一区v| 99精品热视频| 亚洲曰韩产成在线| 欧美一区午夜精品| 成人国产精品久久久网站| 国产一区二区三区黄视频| 国产欧美日韩久久| 91激情五月电影| www.555国产精品免费| 日本欧洲一区二区| 久久理论电影网| 日本青青草视频| 韩国三级在线看| 美女久久久精品| 国产精品女人毛片| 欧美无乱码久久久免费午夜一区| 国产高潮视频在线观看| 久久成人免费电影| 亚洲欧洲日韩av| 9191精品国产综合久久久久久| 无码熟妇人妻av| 国产成人99久久亚洲综合精品| 97在线观看视频免费| av电影在线不卡| 三级久久三级久久久| 久久久久99精品国产片| 精品欧美一区二区久久久久 | 久久精品无码一区二区三区毛片| 性感美女久久精品| 国产亚洲一本大道中文在线| 色婷婷久久一区二区三区麻豆| 韩国三级hd两男一女| 韩国精品在线观看| 一区二区三区精品久久久| 精品福利一区二区三区免费视频| 亚洲天堂一级片| 日本五十肥熟交尾| 国产激情一区二区三区桃花岛亚洲| 一区二区三区四区中文字幕| 精品国产第一区二区三区观看体验| 成人免费毛片xxx| 精品国产人妻一区二区三区| 国产99久久久国产精品免费看| 午夜精品一区二区三区三上悠亚| 国产日韩欧美不卡在线| 欧美日本视频在线| 午夜精品久久久久99蜜桃最新版| 精品人妻二区中文字幕| 国产精品99久久久久久宅男| 亚洲成人自拍网| 国产精品欧美极品| 欧美一区二区三区婷婷月色| 日韩一级片av| 最近中文字幕在线mv视频在线| 91麻豆国产香蕉久久精品| 狠狠色丁香婷婷综合| 亚洲午夜在线电影|