目錄
Minor【 PHP框架】3.路由、控制器、视图,minor框架
首頁 php教程 php手册 Minor【 PHP框架】3.路由、控制器、视图,minor框架

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

Jul 06, 2016 pm 02:25 PM
php框架

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

3.1 路由

  漂亮的URL绝对是一个严肃的web应用程序必须做到的,这种方式使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>
登入後複製

  以上边代码为例详述一下如何配置一个优雅(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时就会执行App\Modules\Demo\FooController的bar方法,即默认路由为:

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

  3.1.3 缺点

  正如你所见,Minor的路由并不强大。不支持请求方法的限制,不支持htttps限制,不支持过滤器。

3.2 控制器

  3.2.1 创建一个自己的控制器

  Controller的定义非常简单,只要继承Minor\Controller\Controller基础类就可以了(当然你也可以不继承,但是基类中的方法和属性就不能使用了,这很好理解),首先创建文件夹app/Modules/Demo/Controller/,然后再创建文件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(默认路由,你也可以配置自己的路由)就可看到返回了Hello World。

  3.2.2 Url生成

  调用Url的gen方法可以将默认路径转为符合路由规则的url

<span>$url</span> = Url:gen(<span>$path</span>);
登入後複製

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

  

  3.2.3 页面跳转redirect、重定向forward

  Minor提供了三个跳转的方法分别是redirect、forward、forwardUrl(这三个都是Minor\Controller\Controller的protected方法)。

  当跳转到另外一个url时可以在控制器这样调用:$this->redirect($url);

  当转向(froward)到另外一个url时可以在控制器中这样调用: $this->forwardUrl($url);(该方法的实现其实就是通过路由解析出url请求的控制器和方法然后调用forward($controller, $action, $param))

  当转向(forward)到另外一个方法时可以在控制器中这样调用: $this->forward($controller, $action, $params); (参数$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 获取请求参数

  调用MinorRequest的get($paramName, $defaultParamValue = null) 或者 post($paramName, $defaultParamValue = null)方法就可以获取请求方法,在控制器中可以这样调用:

<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 获取请求方法

  调用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提供了一个极其强大的模板引擎,这个模板引擎的名称就是: PHP。是的!你没看错就是PHP。为什么Minor不提供一个类似于smarty或者Twig这样的模板引擎呢? 因为没有必要,PHP本身已经足够好了,如果Minor再造一个模板引擎无疑就会使Minor更难上手,所以Minor直接使用PHP作为视图文件的语言。

  3.3.1 在控制器中使用视图

  在控制器中使用视图只需要调用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函数的第二个参数(['param1key' => 'param1value', 'param2key' => 'param2value' ...])就是向视图文件中传递的变量,我们可以在视图文件中使用这些变量:

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

  3.3.2 视图内置函数

  Minor提供了两个视图文件中可以使用的函数:

<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>
登入後複製

  这两个函数定义在app/Resource/functions.php文件中,你可以在这个文件中自定义你需要的视图函数。

 

3.4 响应

  可以在控制器中通过调用App对象的getMinorResponse()方法来获取当前MinorResponse对象。 MinorResponse类提供了六个方法分别是:

<span>public function send(); // 用于将响应对象发送给客户端

public function setHeader($header);// 设置响应头

public function setContent($content); // 设置响应对象的内容

public function beforeContent($content); // 在当前已有的内容之前添加内容

public function appendContent($content); // 在当前已有内容之后追加内容

public function getContent(); // 获取对象中的响应内容</span>
登入後複製

 

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP框架的優缺點比較:選哪個好? PHP框架的優缺點比較:選哪個好? Jun 04, 2024 pm 03:36 PM

PHP框架的選擇取決於專案需求和開發者技能:Laravel:功能豐富,社群活躍,但學習曲線陡峭,效能開銷高。 CodeIgniter:輕量級,易於擴展,但功能有限,文件較少。 Symfony:模組化,社群強大,但複雜,效能問題。 ZendFramework:企業級,穩定可靠,但笨重,許可昂貴。 Slim:微框架,速度快,但功能有限,學習曲線陡峭。

在不同開發環境中 PHP 框架的效能差異 在不同開發環境中 PHP 框架的效能差異 Jun 05, 2024 pm 08:57 PM

不同开发环境中PHP框架的性能存在差异。开发环境(例如本地Apache服务器)由于本地服务器性能较低和调试工具等因素,导致框架性能较低。相反,生产环境(例如功能齐全的生产服务器)具有更强大的服务器和优化配置,使框架性能显著提高。

PHP框架與微服務:雲端原生部署與容器化 PHP框架與微服務:雲端原生部署與容器化 Jun 04, 2024 pm 12:48 PM

PHP框架與微服務結合的好處:可擴展性:輕鬆擴展應用程序,添加新功能或處理更多負載。靈活性:微服務獨立部署和維護,更容易進行更改和更新。高可用性:一個微服務的故障不會影響其他部分,確保更高可用性。實戰案例:使用Laravel和Kubernetes部署微服務步驟:建立Laravel專案。定義微服務控制器。建立Dockerfile。建立Kubernetes清單。部署微服務。測試微服務。

最佳的微服務架構PHP框架:效能與效率 最佳的微服務架構PHP框架:效能與效率 Jun 03, 2024 pm 08:27 PM

最佳PHP微服務框架:Symfony:靈活性、效能和可擴充性,提供組件套件用於建構微服務。 Laravel:專注效率和可測試性,提供乾淨的API接口,支援無狀態服務。 Slim:極簡主義,速度快,提供簡單的路由系統和可選的中體建構器,適用於建構高性能API。

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

將PHP框架與DevOps整合可提高效率和敏捷性:自動化繁瑣任務,釋放人員精力專注於戰略任務縮短發布週期,加快上市時間提高代碼質量,減少錯誤增強跨職能團隊協作,打破開發和運營孤島

哪種 PHP 框架提供最全面的擴充函式庫,方便快速開發? 哪種 PHP 框架提供最全面的擴充函式庫,方便快速開發? Jun 04, 2024 am 10:45 AM

PHP框架擴充庫選擇提供了四種框架:Laravel:以其龐大的生態系統和第三方套件而著稱,提供認證、路由、驗證等擴充。 Symfony:高度模組化,透過可重複使用的「Bundle」擴展了功能,涵蓋身份驗證、表單等領域。 CodeIgniter:輕量級且高效能,提供資料庫連接、表單驗證等實用擴充。 ZendFramework:企業級功能強大,擁有身分驗證、資料庫連線、RESTfulAPI支援等擴充功能。

PHP框架中人工智慧的應用潛力 PHP框架中人工智慧的應用潛力 Jun 03, 2024 am 11:01 AM

人工智慧(AI)在PHP框架中的應用潛力包括:自然語言處理(NLP):用於分析文本、識別情感和生成摘要。影像處理:用於辨識影像物件、進行臉部偵測和調整大小。機器學習:用於預測、分類和聚類。實戰案例:聊天機器人、個人化推薦、詐欺偵測。整合AI可增強網站或應用程式功能,提供強大的新功能。

PHP框架與人工智慧:開發人員指南 PHP框架與人工智慧:開發人員指南 Jun 04, 2024 pm 12:47 PM

使用PHP框架整合人工智慧(AI)以簡化AI在Web應用程式中的集成,建議框架:Laravel:輕量高效,功能強大。 CodeIgniter:簡單易用,適用於小型應用程式。 ZendFramework:企業級框架,功能完善。 AI整合方式:機器學習模型:執行特定任務。 AIAPI:提供預先建置功能。 AI庫:處理AI任務。

See all articles