Minor【 PHP框架】3.路由、控制器、視圖,minor框架_PHP教程
Jul 12, 2016 am 08:49 AMMinor【 PHP框架】3.路由、控制器、視圖,minor框架
3.1 路由
漂亮的URL絕對(duì)是一個(gè)嚴(yán)肅的web應(yīng)用程序必須做到的,這種方式使index.php?article_id=57這類(lèi)的丑陋URL被隱藏,由更受歡迎的像 /read/intro-to-symfony 來(lái)替代。
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>
以上邊代碼為例詳述一下如何配置一個(gè)優(yōu)雅(laravel病上身...)的路由
'/demo/{productName}'是路由的匹配規(guī)則,其中配置中的required制定的就是productName必須滿足的正則條件,在框架的實(shí)際運(yùn)行過(guò)程中會(huì)將路由規(guī)則+required解析為正則表達(dá)式/demo/(\w+) ,當(dāng)url(eg: xxx.xxx.xxx/demo/testproduct)匹配到這條正則時(shí)就會(huì)執(zhí)行配置中的controller的action,具體的執(zhí)行為:FooController->bar($productName);
可以看到路由規(guī)則中的大括號(hào)的內(nèi)容(productName)就是就是bar這個(gè)方法的參數(shù)。所以在匹配路由時(shí)一定要注意路由規(guī)則必須與具體的控制器的方法的參數(shù)個(gè)數(shù)是一致的,不然就會(huì)拋出ControllerException。
3.1.2 默認(rèn)路由配置
如果我們每定義一個(gè)Controller就要配置一個(gè)路由就會(huì)導(dǎo)致開(kāi)發(fā)效率較低,為了防止這種問(wèn)題發(fā)生Minor提供了默認(rèn)路由機(jī)制。當(dāng)我們?cè)L問(wèn)http://xxx.xxx.xxx/demo/foo/bar時(shí)就會(huì)執(zhí)行App\Modules\Demo\FooController的bar方法,即默認(rèn)路由為:
http://xxx.xxx.xxx/{模塊名}/{控制器名}/{方法名}
3.1.3 缺點(diǎn)
正如你所見(jiàn),Minor的路由并不強(qiáng)大。不支持請(qǐng)求方法的限制,不支持htttps限制,不支持過(guò)濾器。
3.2 控制器
3.2.1 創(chuàng)建一個(gè)自己的控制器
Controller的定義非常簡(jiǎn)單,只要繼承Minor\Controller\Controller基礎(chǔ)類(lèi)就可以了(當(dāng)然你也可以不繼承,但是基類(lèi)中的方法和屬性就不能使用了,這很好理解),首先創(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> 定義一個(gè)控制器</span> <span>class</span> FooController <span>extends</span><span> Controller { </span><span>//</span><span> 定義一個(gè)方法 </span> <span>public</span> <span>function</span><span> bar() { </span><span>return</span> 'Hello World'<span>; } }</span>
通過(guò)訪問(wèn)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 頁(yè)面跳轉(zhuǎn)redirect、重定向forward
Minor提供了三個(gè)跳轉(zhuǎn)的方法分別是redirect、forward、forwardUrl(這三個(gè)都是Minor\Controller\Controller的protected方法)。
當(dāng)跳轉(zhuǎn)到另外一個(gè)url時(shí)可以在控制器這樣調(diào)用:$this->redirect($url);
當(dāng)轉(zhuǎn)向(froward)到另外一個(gè)url時(shí)可以在控制器中這樣調(diào)用: $this->forwardUrl($url);(該方法的實(shí)現(xiàn)其實(shí)就是通過(guò)路由解析出url請(qǐng)求的控制器和方法然后調(diào)用forward($controller, $action, $param))
當(dāng)轉(zhuǎn)向(forward)到另外一個(gè)方法時(shí)可以在控制器中這樣調(diào)用: $this->forward($controller, $action, $params); (參數(shù)$controller是控制器的類(lèi)名,包含命名空間)
例:
<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 獲取請(qǐng)求參數(shù)
調(diào)用MinorRequest的get($paramName, $defaultParamValue = null) 或者 post($paramName, $defaultParamValue = null)方法就可以獲取請(qǐng)求方法,在控制器中可以這樣調(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 獲取請(qǐng)求方法
調(diào)用MinorRequest的getMethod()方法就可以獲取請(qǐng)求的方法:
<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提供了一個(gè)極其強(qiáng)大的模板引擎,這個(gè)模板引擎的名稱(chēng)就是: PHP。是的!你沒(méi)看錯(cuò)就是PHP。為什么Minor不提供一個(gè)類(lèi)似于smarty或者Twig這樣的模板引擎呢? 因?yàn)闆](méi)有必要,PHP本身已經(jīng)足夠好了,如果Minor再造一個(gè)模板引擎無(wú)疑就會(huì)使Minor更難上手,所以Minor直接使用PHP作為視圖文件的語(yǔ)言。
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ù)的第二個(gè)參數(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提供了兩個(gè)視圖文件中可以使用的函數(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>
這兩個(gè)函數(shù)定義在app/Resource/functions.php文件中,你可以在這個(gè)文件中自定義你需要的視圖函數(shù)。
3.4 響應(yīng)
可以在控制器中通過(guò)調(diào)用App對(duì)象的getMinorResponse()方法來(lái)獲取當(dāng)前MinorResponse對(duì)象?!inorResponse類(lèi)提供了六個(gè)方法分別是:
<span>public function send(); // 用于將響應(yīng)對(duì)象發(fā)送給客戶端 public function setHeader($header);// 設(shè)置響應(yīng)頭 public function setContent($content); // 設(shè)置響應(yīng)對(duì)象的內(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(); // 獲取對(duì)象中的響應(yīng)內(nèi)容</span>
?

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Pilihan rangka kerja PHP bergantung pada keperluan projek dan kemahiran pembangun: Laravel: kaya dengan ciri dan komuniti aktif, tetapi mempunyai keluk pembelajaran yang curam dan overhed prestasi tinggi. CodeIgniter: ringan dan mudah dipanjangkan, tetapi mempunyai fungsi terhad dan kurang dokumentasi. Symfony: Bermodul, komuniti yang kuat, tetapi kompleks, isu prestasi. ZendFramework: Gred perusahaan, stabil dan boleh dipercayai, tetapi besar dan mahal untuk dilesenkan. Langsing: rangka kerja mikro, pantas, tetapi dengan fungsi terhad dan keluk pembelajaran yang curam.

Terdapat perbezaan dalam prestasi rangka kerja PHP dalam persekitaran pembangunan yang berbeza. Persekitaran pembangunan (seperti pelayan Apache tempatan) mengalami prestasi rangka kerja yang lebih rendah disebabkan oleh faktor seperti prestasi pelayan tempatan yang lebih rendah dan alat penyahpepijatan. Sebaliknya, persekitaran pengeluaran (seperti pelayan pengeluaran berfungsi sepenuhnya) dengan pelayan yang lebih berkuasa dan konfigurasi yang dioptimumkan membolehkan rangka kerja berprestasi lebih baik dengan ketara.

Faedah menggabungkan rangka kerja PHP dengan perkhidmatan mikro: Kebolehskalaan: Memanjangkan aplikasi dengan mudah, menambah ciri baharu atau mengendalikan lebih banyak beban. Fleksibiliti: Perkhidmatan mikro digunakan dan diselenggara secara bebas, menjadikannya lebih mudah untuk membuat perubahan dan kemas kini. Ketersediaan tinggi: Kegagalan satu perkhidmatan mikro tidak menjejaskan bahagian lain, memastikan ketersediaan yang lebih tinggi. Kes praktikal: Menggunakan perkhidmatan mikro menggunakan Laravel dan Kubernetes Langkah: Buat projek Laravel. Tentukan pengawal perkhidmatan mikro. Buat fail Docker. Buat manifes Kubernetes. Sebarkan perkhidmatan mikro. Uji perkhidmatan mikro.

Mengintegrasikan rangka kerja PHP dengan DevOps boleh meningkatkan kecekapan dan ketangkasan: mengautomasikan tugas yang membosankan, membebaskan kakitangan untuk fokus pada tugas strategik, memendekkan kitaran keluaran, mempercepatkan masa untuk memasarkan, meningkatkan kualiti kod, mengurangkan ralat, meningkatkan kerjasama pasukan merentas fungsi dan memecahkan silo pembangunan dan operasi

Gunakan rangka kerja PHP untuk menyepadukan kecerdasan buatan (AI) untuk memudahkan penyepaduan AI dalam aplikasi web rangka kerja yang disyorkan: Laravel: ringan, cekap dan berkuasa. CodeIgniter: Mudah dan mudah digunakan, sesuai untuk aplikasi kecil. ZendFramework: Rangka kerja peringkat perusahaan dengan fungsi lengkap. Kaedah penyepaduan AI: Model pembelajaran mesin: melaksanakan tugas tertentu. AIAPI: Menyediakan fungsi pra-bina. Perpustakaan AI: mengendalikan tugas AI.

Pustaka sambungan rangka kerja PHP menyediakan empat rangka kerja untuk pemilihan: Laravel: Terkenal dengan ekosistem yang luas dan pakej pihak ketiga, ia menyediakan pengesahan, penghalaan, pengesahan dan sambungan lain. Symfony: Sangat modular, memanjangkan kefungsian melalui "Himpunan" boleh guna semula, meliputi bidang seperti pengesahan dan borang. CodeIgniter: ringan dan berprestasi tinggi, menyediakan sambungan praktikal seperti sambungan pangkalan data dan pengesahan borang. ZendFramework: Ciri peringkat perusahaan yang berkuasa, dengan sambungan seperti pengesahan, sambungan pangkalan data, sokongan RESTfulAPI, dsb.

Rangka kerja PHP digunakan secara meluas dalam pembangunan tangkas dan projek berskala besar, memberikan kelebihan seperti ketangkasan, skalabiliti dan keselamatan. Sebagai contoh, dalam tapak web e-dagang, rangka kerja Laravel boleh membuat prototaip dengan cepat, mengendalikan logik perniagaan yang kompleks, memastikan keselamatan dan melanjutkan fungsi. Dengan memanfaatkan komponen dan corak reka bentuk yang telah ditetapkan, rangka kerja PHP memudahkan pembangun untuk membina aplikasi berskala dan diselenggara dengan baik.

Rangka kerja PHP dan Python berbeza dalam ciri bahasa, ekologi rangka kerja dan ciri. PHP digunakan terutamanya untuk pembangunan web dan mudah dipelajari Python mempunyai ekosistem perpustakaan yang luas. Rangka kerja PHP yang popular termasuk rangka kerja Laravel, CodeIgniter dan Symfony termasuk Django, Flask dan Web2py. Dalam kes praktikal, Laravel menggunakan baris arahan untuk menjana model dan pandangan blog, manakala Django menggunakan skrip DjangoAdmin dan Python untuk mencipta blog.
