亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

Minor PHP框架 3.路由 控制器 視圖

2020-03-22 17:18:19
字體:
來源:轉載
供稿:網友
  • 框架Github地址:github.com/Orlion/Minor

    (如果覺得還不錯給個star哦(^-^)V)

    框架作者: Orlion

    知乎:http://www.zhihu.com/people/orlion

    Github: http://github.com/Orlion

    3.1 路由

      漂亮的URL絕對是一個嚴肅的webhtml' target='_blank'>應用程序必須做到的,這種方式使index.php?article_id=57這類的丑陋URL被隱藏,由更受歡迎的像 /read/intro-to-symfony 來替代。

      3.1.1 路由配置

      配置文件為app/Config/routes.php

    <?phpreturn [  '/demo/{productName}'            =>  [        'name'                =>    'test1',        'controller'        =>    'AppModulesDemoControllerFooController',        'action'            =>    'bar',        'required'          =>  ['productName' => 'w+'],    ],];

      以上邊代碼為例詳述一下如何配置一個優雅(laravel病上身...)的路由

      '/demo/{productName}'是路由的匹配規則,其中配置中的required制定的就是productName必須滿足的正則條件,在框架的實際運行過程中會將路由規則+required解析為正則表達式/demo/(w+) ,當url(eg: xxx.xxx.xxx/demo/testproduct)匹配到這條正則時就會執行配置中的controller的action,具體的執行為:FooController->bar($productName);

      可以看到路由規則中的大括號的內容(productName)就是就是bar這個方法的參數。所以在匹配路由時一定要注意路由規則必須與具體的控制器的方法的參數個數是一致的,不然就會拋出ControllerException。

      3.1.2 默認路由配置

      如果我們每定義一個Controller就要配置一個路由就會導致開發效率較低,為了防止這種問題發生Minor提供了默認路由機制。當我們訪問http://xxx.xxx.xxx/demo/foo/bar時就會執行AppModulesDemoFooController的bar方法,即默認路由為:

      http://xxx.xxx.xxx/{模塊名}/{控制器名}/{方法名}

      3.1.3 缺點

      正如你所見,Minor的路由并不強大。不支持請求方法的限制,不支持htttps限制,不支持過濾器。

    3.2 控制器

      3.2.1 創建一個自己的控制器

      Controller的定義非常簡單,只要繼承MinorControllerController基礎類就可以了(當然你也可以不繼承,但是基類中的方法和屬性就不能使用了,這很好理解),首先創建文件夾app/Modules/Demo/Controller/,然后再創建文件FooController.php:

    <?phpnamespace AppModulesDemoController;use MinorControllerController;// 定義一個控制器class FooController extends Controller{    // 定義一個方法       public function bar()    {        return 'Hello World';    }}

      通過訪問xxx.xxx.xxx/demo/foo/bar(默認路由,你也可以配置自己的路由)就可看到返回了Hello World。

      3.2.2 Url生成

      調用Url的gen方法可以將默認路徑轉為符合路由規則的url

    $url = Url:gen($path);

      如根據3.1.1中的路由配置Url::gen('/demo/foo/bar?productName=test') 將返回 /demo/test。

      

      3.2.3 頁面跳轉redirect、重定向forward

      Minor提供了三個跳轉的方法分別是redirect、forward、forwardUrl(這三個都是MinorControllerController的protected方法)。

      當跳轉到另外一個url時可以在控制器這樣調用:$this->redirect($url);

      當轉向(froward)到另外一個url時可以在控制器中這樣調用: $this->forwardUrl($url);(該方法的實現其實就是通過路由解析出url請求的控制器和方法然后調用forward($controller, $action, $param))

      當轉向(forward)到另外一個方法時可以在控制器中這樣調用: $this->forward($controller, $action, $params); (參數$controller是控制器的類名,包含命名空間)

      例:

    class FooController extends Controller{    public function bar()    {        $this->redirect('www.baidu.com');        return $this->forward('AppModulesDemoControllerFooController', 'bar', 'test');        return $this->forward('/demo/testpro');    }}    

      3.2.4 獲取請求參數

      調用MinorRequest的get($paramName, $defaultParamValue = null) 或者 post($paramName, $defaultParamValue = null)方法就可以獲取請求方法,在控制器中可以這樣調用:

    class FooController extends Controller{    public function bar()    {       $minorRequest = $this->app->getMinorRequest();     $paramValue = $minorRequest->get('paramKey', 'defaultValue');    ...    }}   

      3.2.5 獲取請求方法

      調用MinorRequest的getMethod()方法就可以獲取請求的方法:

    class FooController extends Controller{    public function bar()    {       $minorRequest = $this->app->getMinorRequest();     $method = $minorRequest->getMethod();    ...    }}  

    3.3 視圖

      Minor提供了一個極其強大的模板引擎,這個模板引擎的名稱就是: PHP。是的!你沒看錯就是PHP。為什么Minor不提供一個類似于smarty或者Twig這樣的模板引擎呢? 因為沒有必要,PHP本身已經足夠好了,如果Minor再造一個模板引擎無疑就會使Minor更難上手,所以Minor直接使用PHP作為視圖文件的語言。

      3.3.1 在控制器中使用視圖

      在控制器中使用視圖只需要調用View::render('模塊名:控制器名:視圖文件名', ['param1key' => 'param1value', 'param2key' => 'param2value' ...]);例:

    class FooController extends Controller{    public function bar()    {        $param1 = 'Hello';        $param2 = 'World';         return View::render('Demo:Foo:bar.php', ['param1' => $param1, 'param2' => $param2]);    }}  

      render函數的第二個參數(['param1key' => 'param1value', 'param2key' => 'param2value' ...])就是向視圖文件中傳遞的變量,我們可以在視圖文件中使用這些變量:

    文件:app/Modules/Demo/Controller/Tpl/Foo/bar.php<?php echo $param1key;?><?=$param2key ?>

      3.3.2 視圖內置函數

      Minor提供了兩個視圖文件中可以使用的函數:

    function include_tpl($module, $controller, $tpl){    require_once (!defined('APP_DIR') ? APP_DIR : realpath(__DIR__ . '/../../app/') .DIRECTORY_SEPARATOR) . 'Modules' . '/' . $module . '/Tpl/' . $controller . '/' . $tpl;}function url($path){    return Url::gen($path);}

      使用:

    html>       <?php include_tpl('Public', 'Public', 'header.php');?>     <body>        <h3>Hello!</h3>        <a href='<?php url('/demo/foo/bar?productName=testpro');?>'>    </body></html>

      這兩個函數定義在app/Resource/functions.php文件中,你可以在這個文件中自定義你需要的視圖函數。

     

    3.4 響應

      可以在控制器中通過調用App對象的getMinorResponse()方法來獲取當前MinorResponse對象?!inorResponse類提供了六個方法分別是:

    public function send(); // 用于將響應對象發送給客戶端public function setHeader($header);// 設置響應頭public function setContent($content); // 設置響應對象的內容public function beforeContent($content); // 在當前已有的內容之前添加內容public function appendContent($content); // 在當前已有內容之后追加內容public function getContent(); // 獲取對象中的響應內容
    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    91久久在线播放| 国产精品久久999| 亚洲国产高清福利视频| 欧美中文在线观看| 日韩中文字幕在线| 韩国三级电影久久久久久| 色综合久久中文字幕综合网小说| 精品视频9999| 国产91免费观看| 久久综合久中文字幕青草| 欧美日韩国产麻豆| 欧美激情一区二区三级高清视频| 亚洲视频欧洲视频| 日韩欧美a级成人黄色| 日韩中文字幕不卡视频| 91精品国产乱码久久久久久久久| 午夜精品国产精品大乳美女| 欧美黄色片在线观看| 北条麻妃在线一区二区| 中文字幕日韩在线播放| 97超视频免费观看| 日韩美女免费视频| 精品少妇一区二区30p| 久久亚洲国产精品| 亚洲人成网站免费播放| 亚洲欧洲中文天堂| 久久精品国产综合| xxx欧美精品| 久久99视频精品| 精品国产91乱高清在线观看| 亚洲欧美日韩在线高清直播| 国产精品自拍小视频| 亚洲日本成人网| 亚洲欧洲免费视频| 另类美女黄大片| 国产综合在线观看视频| 国产精品高清在线观看| 国产一区二区精品丝袜| 国产精品成人一区二区三区吃奶| 97人人爽人人喊人人模波多| 国产专区欧美专区| 精品国产一区二区三区久久狼黑人| 色噜噜国产精品视频一区二区| 欧美亚洲国产日韩2020| 78m国产成人精品视频| 在线观看国产精品日韩av| 911国产网站尤物在线观看| 日本欧美在线视频| 欧美日韩国产麻豆| 欧美成人免费全部观看天天性色| 欧美小视频在线观看| 亚洲精品美女久久久久| 国产精品高清网站| 日韩亚洲国产中文字幕| 欧美亚州一区二区三区| 自拍偷拍亚洲欧美| 日韩小视频在线| 国产精品扒开腿爽爽爽视频| 综合国产在线视频| 国产精品久久久久久亚洲调教| 中文字幕亚洲第一| 草民午夜欧美限制a级福利片| 国产日韩在线亚洲字幕中文| 日韩av一区二区在线| 精品国产91久久久久久| 欧美情侣性视频| 午夜精品久久久久久久久久久久| 成人激情黄色网| 亚洲欧美中文日韩在线| 日韩欧美亚洲一二三区| 日韩福利在线播放| 国产欧美一区二区三区视频| 欧美日韩中文字幕| 亚洲图片在区色| 亚洲第一区在线观看| 亚洲高清在线观看| 国产一区二区色| 精品国产999| 国模精品系列视频| 国产一区二区三区视频免费| 日韩精品免费在线视频| 日韩欧美在线视频日韩欧美在线视频| 亚洲国产精品女人久久久| 成人h猎奇视频网站| 午夜伦理精品一区| 91欧美精品午夜性色福利在线| 91久久中文字幕| 日韩久久免费视频| 91精品啪aⅴ在线观看国产| 精品国产鲁一鲁一区二区张丽| 国产欧美一区二区三区久久人妖| 日韩欧美亚洲成人| 国产精品女人网站| 国产成人综合精品| 亚洲激情在线观看视频免费| 日韩网站免费观看| 日韩精品极品视频| 好吊成人免视频| 欧美黄色小视频| 欧美日本亚洲视频| 亚洲一区二区三区在线视频| 一区二区三区视频免费| 日韩欧美在线视频| 亚洲福利视频免费观看| 国产亚洲精品一区二555| 日韩一区二区久久久| 91久久精品国产91久久| 欧美激情一区二区三区成人| 欧美韩国理论所午夜片917电影| 日韩美女av在线免费观看| 国产精品99久久99久久久二8| 国产成人精品一区二区| 亚洲国产精久久久久久| 色综合色综合网色综合| 久久久久久久久久久av| 久久久久国产精品免费| 国产成人亚洲综合91| 亚洲第一av在线| 九九热精品在线| 57pao成人国产永久免费| 国产一区av在线| 亚洲在线免费看| 国产丝袜一区二区| 国产成人a亚洲精品| 亚洲视频日韩精品| 国产精品久久久久免费a∨| 精品久久久久久久久久国产| 91成品人片a无限观看| 国产精品色婷婷视频| 亚洲精品在线视频| 亚洲国产女人aaa毛片在线| 日韩亚洲欧美成人| 日韩av第一页| 亚洲人成电影在线播放| 色噜噜亚洲精品中文字幕| 97在线观看免费高清| 一区二区日韩精品| 国产美女精品免费电影| 成人国产精品一区| 国产一区二区三区视频| 最近日韩中文字幕中文| www.欧美三级电影.com| 91极品女神在线| 国产亚洲精品一区二555| 久久精品视频在线观看| 久久综合色影院| 一区二区欧美日韩视频| 亚洲一区二区久久久| 欧美性精品220| 亚洲欧美999| 欧美日韩成人免费| 久久久亚洲欧洲日产国码aⅴ| 久久精品影视伊人网| 欧美一级片久久久久久久| 亚洲人线精品午夜| 欧美成人精品在线播放| 国产精品亚洲视频在线观看| 欧美日韩精品中文字幕| 97精品国产97久久久久久| 亚洲成人三级在线| 国产精品中文字幕在线| 亚洲新中文字幕| 亚洲国产精品系列| 92裸体在线视频网站|