1. 程式人生 > >第5章 TP5.0 控制器

第5章 TP5.0 控制器

上次複習 1、路由

a、有利於SEO優化

b、簡潔方便記憶

2、路由模式

1、普通模式(PATHINFO)
	http://www.tp.com/index.php/Index/Index/index

2、混合模式
	支援PATHINFO和路由

3、強制模式
	只支援路由模式

4、模式切換和配置檔案有關
	// 是否開啟路由
	'url_route_on'           => true,
	// 是否強制使用路由
	'url_route_must'         => false,

3、設定路由

0、配置檔案
	C:\AppServ\www\tp5\application\Route.php

1、動態設定當個路由
	use think\Route;

	Route::rule();
	Route::get();
	Route::post();
	Route::delete();
	Route::put();

2、動態批量設定路由
	Route::rule([
		'路由規則1'=>'路由地址和引數',
		'路由規則2'=>['路由地址和引數','匹配引數(陣列)','變數規則(陣列)']
		...
	],'','請求型別','匹配引數(陣列)','變數規則');

3、配置檔案註冊路由
	return[
		'new/:id' => 'News/read',
		'blog/:id' => ['Blog/update',['method'=>'post|put'],['id'=>'\d+']],
	];

============================================== 今日學習

1、新建控制器(前臺模組為例)

1、在前臺控制器目錄下(C:\AppServ\www\tp5\application\index\controller) 新建控制器檔案 User.php

2、User.php檔案中如何書寫
	<?php 
	// 宣告名稱空間
	namespace app\index\controller;
	// 宣告控制器
	class User{
		// 宣告方法
		public function index(){
			return "我是User控制器下的index方法";
		}
	}

3、位址列訪問
	http://www.tp.com/index.php/Index/user/index

4、注意:
	1、控制器檔名必須首字母大寫,檔名採用駝峰命名。

	2、控制器名必須跟檔名一一對應

	3、名稱空間必須和檔名對應
		namespace app\index\controller;
		C:\AppServ\www\tp5\application\index\controller

	4、如果控制器名字採用駝峰命名 UserInfo.php

		http://www.tp.com/index.php/Index/user_info/index

2、控制器如何載入頁面

1、系統View類

	$view=new \think\View;
	return $view->fetch();

	use think\View;
	$view=new View();
	return $view->fetch();

2、系統Controller類
	1、需要繼承系統控制器類

		use think\Controller;
		// 宣告控制器
		class User extends Controller
	
	2、直接使用系統控制器類的方法
		return $this->fetch();

3、系統函式

	return view();

3、資料輸出

1、在應用配置檔案中可以設定資料返回格式

	'default_return_type'    => 'json', #預設是html

2、ajax請求的時候如何返回資料

	'default_ajax_return'    => 'json',

4、控制器的初始化

1、控制器初始化方法必須繼承系統控制器

	// 控制器的初始化方法
	public function _initialize(){
		echo "我是初始化方法";
	}

2、只要呼叫控制器下的任意方法,都會先找初始化方法

3、控制器初始化方法的使用
	1、可以用來提取控制器下公共的程式碼

	2、後臺許可權把控

5、前置操作

0、前置方法 把一些公共的設定提取成方法進行呼叫

1、前置方法必須結合系統控制器

2、核心設定
	// 前置方法屬性
	protected $beforeActionList=[
		'one',
		// 不想讓誰使用前置方法two
		'two'=>['except'=>"index"],
		// 僅僅可以讓誰使用前置方法three
		'three'=>['only'=>'index'],
	];

6、頁面跳轉

0、頁面跳轉基於系統控制器類,所以控制器必須繼承系統控制器

1、方法所在路徑
	C:\AppServ\www\tp5\thinkphp\library\traits\controlle\Jump.php

2、跳轉方式
	a、成功跳轉
		// $this->success(提示資訊,跳轉地址,使用者自定義資料,跳轉跳轉,header資訊);
		// 跳轉地址未設定時 預設返回上一個頁面
		$this->success('跳轉成功',url('index/index'));
	b、失敗跳轉

		$this->error('登入失敗');

3、跳轉方法給模板頁面的資料

	1、$code 返回的狀態碼 成功 1 失敗 0

	2、$msg 頁面的提示資訊

	3、$wait 等待時間

	4、$url 制定跳轉頁面 預設返回上一個頁面

	5、$data 使用者返回的資料

4、相關配置檔案
	// 預設跳轉頁面對應的模板檔案
	'dispatch_success_tmpl'  => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl',
	'dispatch_error_tmpl'    => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl',


4、修改成功和失敗的模板頁面

	
	a、修改預設檔案
		1、預設檔案位置
			C:\AppServ\www\tp5\thinkphp\tpl\dispatch_jump.php

		2、根據原有程式碼進行修改			
			在成功失敗模板頁面進行修改

	b、使用者自定義頁面跳轉模板
		1、修改配置檔案
			'dispatch_success_tmpl'  => THINK_PATH . 'tpl' . DS . 'success.tpl',
			'dispatch_error_tmpl'    => THINK_PATH . 'tpl' . DS . 'error.tpl',

		2、在系統模板目錄下 (C:\AppServ\www\tp5\thinkphp\tpl) 新建 success.php 和error.php

		3、自定義書寫跳轉頁面

7、重定向

1、作用:
	重定向(Redirect)就是通過各種方法將各種網路請求重新定個方向轉到其它位置

2、使用:

	redirect('跳轉地址','其他引數',code,'隱士引數');

	$this->redirect('index/index',['id'=>100,'name'=>'abc']);

8、空控制器和空操作

1、空操作
	# 主要解決一些使用者惡意的位址列輸入,報錯影響互動
	public function _empty(){
		$this->redirect('index/index');

	}

2、空控制器
	// 宣告名稱空間
	namespace app\index\controller;
	use think\Controller;
	// 宣告控制器
	class Error extends Controller{
		// index
		public function index(){
			$this->redirect('index/index');
		}
		// 空操作
		public function _empty(){
			$this->redirect('index/index');
			
		}
	}

3、注意:
	1、網站上線的時候每一個控制器都必須新增空操作

	2、不論前臺後臺都需要寫一個空控制器

9、使用命令列

1、切換到網站的根目錄下

2、輸入php think

3、使用
	1、建立控制器
		php think make:controller app\index\controller\Goods

	2、建立資料模型
		php think make:model app\index\model\Goods

	3、清空runtime 臨時檔案
		php think clear

10、資源控制器

1、使用命令列建立控制器
	php think make:controller app\index\controller\Goods

2、資源控制器一般配合資源路由使用

11、系統類

Config
Env
Controller
View
Route
URL

12、系統方法

config(); 
view();
controller();
action();
url();
dump();