亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
Minor【 PHP框架】3.路由、控制器、視圖,minor框架
首頁 后端開發(fā) php教程 Minor【 PHP框架】3.路由、控制器、視圖,minor框架_PHP教程

Minor【 PHP框架】3.路由、控制器、視圖,minor框架_PHP教程

Jul 12, 2016 am 08:49 AM
php框架

Minor【 PHP框架】3.路由、控制器、視圖,minor框架

3.1 路由

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

  3.1.1 路由配置

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

<?<span>php
</span><span>return</span><span> [
  </span>'/demo/{productName}'            =><span>  [
        </span>'name'                =>    'test1',
        'controller'        =>    'App\Modules\Demo\Controller\FooController',
        'action'            =>    'bar',
        'required'          =>  ['productName' => '\w+'],<span>
    ]</span>,<span>
];</span>

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

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

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

  3.1.2 默認(rèn)路由配置

  如果我們每定義一個Controller就要配置一個路由就會導(dǎo)致開發(fā)效率較低,為了防止這種問題發(fā)生Minor提供了默認(rèn)路由機(jī)制。當(dāng)我們訪問http://xxx.xxx.xxx/demo/foo/bar時(shí)就會執(zhí)行App\Modules\Demo\FooController的bar方法,即默認(rèn)路由為:

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

  3.1.3 缺點(diǎn)

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

3.2 控制器

  3.2.1 創(chuàng)建一個自己的控制器

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

<?<span>php
namespace App\Modules\Demo\Controller;

</span><span>use</span><span> Minor\Controller\Controller;
</span><span>//</span><span> 定義一個控制器</span>
<span>class</span> FooController <span>extends</span><span> Controller
{
    </span><span>//</span><span> 定義一個方法   </span>
    <span>public</span> <span>function</span><span> bar()
    {
        </span><span>return</span> 'Hello World'<span>;
    }
}</span>

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

  3.2.2 Url生成

  調(diào)用Url的gen方法可以將默認(rèn)路徑轉(zhuǎn)為符合路由規(guī)則的url

<span>$url</span> = Url:gen(<span>$path</span>);

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

  

  3.2.3 頁面跳轉(zhuǎn)redirect、重定向forward

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

  當(dāng)跳轉(zhuǎn)到另外一個url時(shí)可以在控制器這樣調(diào)用:$this->redirect($url);

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

  當(dāng)轉(zhuǎn)向(forward)到另外一個方法時(shí)可以在控制器中這樣調(diào)用: $this->forward($controller, $action, $params); (參數(shù)$controller是控制器的類名,包含命名空間)

  例:

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

  3.2.4 獲取請求參數(shù)

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

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

  3.2.5 獲取請求方法

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

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

3.3 視圖

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

  3.3.1 在控制器中使用視圖

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

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

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

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

  3.3.2 視圖內(nèi)置函數(shù)

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

<span>function</span> include_tpl(<span>$module</span>, <span>$controller</span>, <span>$tpl</span><span>)
{
    </span><span>require_once</span> (!<span>defined</span>('APP_DIR') ? APP_DIR : <span>realpath</span>(__DIR__ . '/../../app/') .DIRECTORY_SEPARATOR) . 'Modules' . '/' . <span>$module</span> . '/Tpl/' . <span>$controller</span> . '/' . <span>$tpl</span><span>;
}

</span><span>function</span> url(<span>$path</span><span>)
{
    </span><span>return</span> Url::gen(<span>$path</span><span>);
}</span>

  使用:

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

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

 

3.4 響應(yīng)

  可以在控制器中通過調(diào)用App對象的getMinorResponse()方法來獲取當(dāng)前MinorResponse對象。 MinorResponse類提供了六個方法分別是:

<span>public function send(); // 用于將響應(yīng)對象發(fā)送給客戶端

public function setHeader($header);// 設(shè)置響應(yīng)頭

public function setContent($content); // 設(shè)置響應(yīng)對象的內(nèi)容

public function beforeContent($content); // 在當(dāng)前已有的內(nèi)容之前添加內(nèi)容

public function appendContent($content); // 在當(dāng)前已有內(nèi)容之后追加內(nèi)容

public function getContent(); // 獲取對象中的響應(yīng)內(nèi)容</span>

?

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1135100.htmlTechArticleMinor【 PHP框架】3.路由、控制器、視圖,minor框架 3.1 路由 漂亮的URL絕對是一個嚴(yán)肅的web應(yīng)用程序必須做到的,這種方式使index.php?article_id...
本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Stock Market GPT

Stock Market GPT

人工智能驅(qū)動投資研究,做出更明智的決策

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

PHP框架的優(yōu)缺點(diǎn)比較:選哪個好? PHP框架的優(yōu)缺點(diǎn)比較:選哪個好? Jun 04, 2024 pm 03:36 PM

PHP框架的選擇取決于項(xiàng)目需求和開發(fā)者技能:Laravel:功能豐富,社區(qū)活躍,但學(xué)習(xí)曲線陡峭,性能開銷高。CodeIgniter:輕量級,易于擴(kuò)展,但功能有限,文檔較少。Symfony:模塊化,社區(qū)強(qiáng)大,但復(fù)雜,性能問題。ZendFramework:企業(yè)級,穩(wěn)定可靠,但笨重,許可昂貴。Slim:微框架,速度快,但功能有限,學(xué)習(xí)曲線陡峭。

在不同開發(fā)環(huán)境中 PHP 框架的性能差異 在不同開發(fā)環(huán)境中 PHP 框架的性能差異 Jun 05, 2024 pm 08:57 PM

不同開發(fā)環(huán)境中PHP框架的性能存在差異。開發(fā)環(huán)境(例如本地Apache服務(wù)器)由于本地服務(wù)器性能較低和調(diào)試工具等因素,導(dǎo)致框架性能較低。相反,生產(chǎn)環(huán)境(例如功能齊全的生產(chǎn)服務(wù)器)具有更強(qiáng)大的服務(wù)器和優(yōu)化配置,使框架性能顯著提高。

PHP框架與微服務(wù):云原生部署和容器化 PHP框架與微服務(wù):云原生部署和容器化 Jun 04, 2024 pm 12:48 PM

PHP框架與微服務(wù)相結(jié)合的好處:可擴(kuò)展性:輕松擴(kuò)展應(yīng)用程序,添加新功能或處理更多負(fù)載。靈活性:微服務(wù)獨(dú)立部署和維護(hù),更容易進(jìn)行更改和更新。高可用性:一個微服務(wù)的故障不影響其他部分,確保更高可用性。實(shí)戰(zhàn)案例:使用Laravel和Kubernetes部署微服務(wù)步驟:創(chuàng)建Laravel項(xiàng)目。定義微服務(wù)控制器。創(chuàng)建Dockerfile。創(chuàng)建Kubernetes清單。部署微服務(wù)。測試微服務(wù)。

PHP框架與DevOps的集成:自動化和敏捷性的未來 PHP框架與DevOps的集成:自動化和敏捷性的未來 Jun 05, 2024 pm 09:18 PM

將PHP框架與DevOps集成可提高效率和敏捷性:自動化繁瑣任務(wù),釋放人員精力專注于戰(zhàn)略任務(wù)縮短發(fā)布周期,加快上市時(shí)間提高代碼質(zhì)量,減少錯誤增強(qiáng)跨職能團(tuán)隊(duì)協(xié)作,打破開發(fā)和運(yùn)營孤島

PHP框架和人工智能:開發(fā)人員指南 PHP框架和人工智能:開發(fā)人員指南 Jun 04, 2024 pm 12:47 PM

使用PHP框架集成人工智能(AI)以簡化AI在Web應(yīng)用程序中的集成,推薦框架:Laravel:輕量高效,功能強(qiáng)大。CodeIgniter:簡單易用,適用于小型應(yīng)用程序。ZendFramework:企業(yè)級框架,功能完善。AI集成方式:機(jī)器學(xué)習(xí)模型:執(zhí)行特定任務(wù)。AIAPI:提供預(yù)構(gòu)建功能。AI庫:處理AI任務(wù)。

PHP框架在敏捷開發(fā)和大型項(xiàng)目中的應(yīng)用 PHP框架在敏捷開發(fā)和大型項(xiàng)目中的應(yīng)用 Jun 04, 2024 pm 01:42 PM

PHP框架在敏捷開發(fā)和大型項(xiàng)目中應(yīng)用廣泛,提供敏捷性、可擴(kuò)展性和安全性等優(yōu)勢。例如,在電子商務(wù)網(wǎng)站中,Laravel框架可快速創(chuàng)建原型、處理復(fù)雜業(yè)務(wù)邏輯、確保安全和擴(kuò)展功能。通過利用預(yù)定義的組件和設(shè)計(jì)模式,PHP框架為開發(fā)人員構(gòu)建可擴(kuò)展且維護(hù)良好的應(yīng)用程序提供了便利。

PHP框架和Python框架的比較 PHP框架和Python框架的比較 Jun 05, 2024 pm 09:09 PM

PHP和Python框架在語言特性、框架生態(tài)和特點(diǎn)上有所不同。PHP主要用于Web開發(fā),易于學(xué)習(xí);Python具有廣泛的庫生態(tài)系統(tǒng)。流行的PHP框架包括Laravel、CodeIgniter、Symfony;Python框架包括Django、Flask、Web2py。實(shí)戰(zhàn)案例中,Laravel使用命令行生成博客模型和視圖,而Django使用DjangoAdmin和Python腳本創(chuàng)建博客。

YII面試問題:ACE您的PHP框架面試 YII面試問題:ACE您的PHP框架面試 Apr 06, 2025 am 12:20 AM

在準(zhǔn)備Yii框架的面試時(shí),你需要了解以下關(guān)鍵知識點(diǎn):1.MVC架構(gòu):理解模型、視圖和控制器的協(xié)同工作。2.ActiveRecord:掌握ORM工具的使用,簡化數(shù)據(jù)庫操作。3.Widgets和Helpers:熟悉內(nèi)置組件和輔助函數(shù),快速構(gòu)建用戶界面。掌握這些核心概念和最佳實(shí)踐將幫助你在面試中脫穎而出。

See all articles