已经创建了 IndexController 并且这个时候也可以根据不同的 url 来访问不同控制器的不同方法...
现在加一个控制器的基类,Controller 在/data/momoma/core下创建一个目录 controller 并且在该目录下创建一个类 BaseController.php
<?php
/**
* Created by PhpStorm.
* User: momoma
* Date: 2017/3/8
* Time: 下午4:22
*/
namespace core\controller;
class BaseController {
/**
* 控制器 重定向
* @param string $url 跳转的URL路径
* @param int $time 多少秒后跳转
*/
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. "'>");
}
}
/**
* 数据基础验证-是否是Email 验证:xxx@qq.com
* Controller中使用方法:$this->is_email($value)
* @param string $value 需要验证的值
* @return bool
*/
public function is_email($value) {
return preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/', trim($value));
}
}
这个基类可以做什么?
你所有的业务层上的 controller 所要继承的功能都可以写,你也可以在 /data/momoma/core/controller/ 这个目录里建立若干类,依次继承。功能比如 redirect,is_email 验证 email 当然你可以写很多的东西,或者接收参数并且过滤:
/**
* 获取参数 如果是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;
}
然后你的业务层的控制器,比如你上次建立的文件 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 方法";
// 接收参数
$username = $this->getParams('name','G');
$password = $this->getParams('pwd','P');
$email = $this->getParams('email','P');
// 验证邮箱
if (!$this->is_email($email)){
echo "邮箱格式不正确";
}
// 重定向
$this->redirect('/index.php?c=demo');
}
public function demo(){
echo "我是 Index 制器的 demo 方法";
}
}
控制器的基类完成了,然后就可以写view层了...
下一篇写...