已經(jīng)創(chuàng)建了 IndexController 并且這個(gè)時(shí)候也可以根據(jù)不同的 url 來訪問不同控制器的不同方法...
現(xiàn)在加一個(gè)控制器的基類,Controller 在/data/momoma/core下創(chuàng)建一個(gè)目錄 controller 并且在該目錄下創(chuàng)建一個(gè)類 BaseController.php
<?php
/**
* Created by PhpStorm.
* User: momoma
* Date: 2017/3/8
* Time: 下午4:22
*/
namespace core\controller;
class BaseController {
/**
* 控制器 重定向
* @param string $url 跳轉(zhuǎn)的URL路徑
* @param int $time 多少秒后跳轉(zhuǎn)
*/
public function redirect($url, $time = 0) {
if (!headers_sent()) {
if ($time === 0) header("Location: ".$url);
header("refresh:" . $time . ";url=" .$url. "");
} else {
exit("<meta http-equiv='Refresh' content='" . $time . ";URL=" .$url. "'>");
}
}
/**
* 數(shù)據(jù)基礎(chǔ)驗(yàn)證-是否是Email 驗(yàn)證:xxx@qq.com
* Controller中使用方法:$this->is_email($value)
* @param string $value 需要驗(yàn)證的值
* @return bool
*/
public function is_email($value) {
return preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/', trim($value));
}
}
這個(gè)基類可以做什么祷杈?
你所有的業(yè)務(wù)層上的 controller 所要繼承的功能都可以寫,你也可以在 /data/momoma/core/controller/ 這個(gè)目錄里建立若干類神妹,依次繼承。功能比如 redirect据某,is_email 驗(yàn)證 email 當(dāng)然你可以寫很多的東西阴幌,或者接收參數(shù)并且過濾:
/**
* 獲取參數(shù) 如果是GET $type == 'G'
* @param $value
* @param $type
* @return string
*/
public function getParams($value,$type) {
if($type == 'G') {
return $this->filter_str($_GET[$value]);
} elseif($type == 'P') {
return $this->filter_str($_POST[$value]);
}
}
/**
* 安全過濾類-字符串過濾 過濾特殊有危害字符
* Controller中使用方法:$this->controller->filter_str($value)
* @param string $value 需要過濾的值
* @return string
*/
public function filter_str($value) {
$value = str_replace(array("\0","%00","\r"), '', $value);
$value = preg_replace(array('/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/','/&(?!(#[0-9]+|[a-z]+);)/is'), array('', '&'), $value);
$value = str_replace(array("%3C",'<'), '<', $value);
$value = str_replace(array("%3E",'>'), '>', $value);
$value = str_replace(array('"',"'","\t",' '), array('"',''',' ',' '), $value);
return $value;
}
然后你的業(yè)務(wù)層的控制器,比如你上次建立的文件 IndexController 或者你將來要建立的各種 ArticleController AdminController 等等绊谭。
你就可以這樣使用,首先繼承 BaseController
/**
* Index控制器
* User: momoma
* Date: 2017/1/23
* Time: 下午3:44
*/
namespace controller;
use core\controller\BaseController;
class IndexController extends BaseController {
public function run(){
echo "我是 Index 制器的 run 方法";
// 接收參數(shù)
$username = $this->getParams('name','G');
$password = $this->getParams('pwd','P');
$email = $this->getParams('email','P');
// 驗(yàn)證郵箱
if (!$this->is_email($email)){
echo "郵箱格式不正確";
}
// 重定向
$this->redirect('/index.php?c=demo');
}
public function demo(){
echo "我是 Index 制器的 demo 方法";
}
}
控制器的基類完成了汪拥,然后就可以寫view層了...
下一篇寫...