如何寫一個(gè)自己的渣渣PHP框架(4)

已經(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('', '&amp;'), $value);
      $value = str_replace(array("%3C",'<'), '&lt;', $value);
      $value = str_replace(array("%3E",'>'), '&gt;', $value);
      $value = str_replace(array('"',"'","\t",'  '), array('&quot;','&#39;','    ','&nbsp;&nbsp;'), $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層了...

下一篇寫...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末达传,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子迫筑,更是在濱河造成了極大的恐慌宪赶,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脯燃,死亡現(xiàn)場(chǎng)離奇詭異搂妻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)辕棚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門叽讳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坟募,你說我怎么就攤上這事∫乩辏” “怎么了懈糯?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長单雾。 經(jīng)常有香客問我赚哗,道長她紫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任屿储,我火速辦了婚禮贿讹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘够掠。我一直安慰自己民褂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布疯潭。 她就那樣靜靜地躺著赊堪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竖哩。 梳的紋絲不亂的頭發(fā)上哭廉,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音相叁,去河邊找鬼遵绰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛增淹,可吹牛的內(nèi)容都是我干的椿访。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼埠通,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼赎离!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起端辱,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤梁剔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后舞蔽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荣病,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年渗柿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了个盆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朵栖,死狀恐怖颊亮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陨溅,我是刑警寧澤终惑,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站门扇,受9級(jí)特大地震影響雹有,放射性物質(zhì)發(fā)生泄漏偿渡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一霸奕、第九天 我趴在偏房一處隱蔽的房頂上張望溜宽。 院中可真熱鬧,春花似錦质帅、人聲如沸适揉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涡扼。三九已至,卻和暖如春盟庞,著一層夾襖步出監(jiān)牢的瞬間吃沪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工什猖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留票彪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓不狮,卻偏偏與公主長得像降铸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摇零,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,135評(píng)論 30 470
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫推掸、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評(píng)論 4 62
  • Swift版本點(diǎn)擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,340評(píng)論 7 249
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,778評(píng)論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理毡泻,服務(wù)發(fā)現(xiàn),斷路器粘优,智...
    卡卡羅2017閱讀 134,638評(píng)論 18 139