控制器,有的地方又称之为Action。 它是MVC中的C,控制视图展现 它会担负很多任务。要接受请求,要选择M处理,最后选择V来显示。 一般在php中大多数情况下他都作为业务的处理层了。 比如对传入参数进行处理,对显示元素进行组装。 它的实现一般也两类 通过对
控制器,有的地方又称之为Action。
它是MVC中的C,控制视图展现
它会担负很多任务。要接受请求,要选择M处理,最后选择V来显示。
一般在php中大多数情况下他都作为业务的处理层了。
比如对传入参数进行处理,对显示元素进行组装。
它的实现一般也两类
通过对象的映射或者是通过文件包含的形式
最简单当然就是通过文件包含的形式。
比如访问index.php/aa/bb/cc
可以让程序加载aa目录下的bb文件
然后之后的作为参数注入,这个过程在路由模块中实现
另外的一种就是通过类的方式
一般说来以类方式实现的控制器大致会长成这样
<span><span><span></span></span>php</span> <span>class</span> IndexController <span>extends</span> CController{ <span>public function</span> sae() { <span>echo</span> <span>'Hello'</span>; } }
现在有一个请求index.php/index/sae
怎样路由到它上面呢?
方法也是多种多样的~
首先我可以从url上得到参数
<span>$action</span> = <span>'index'</span>;
<span>$method</span> = <span>'sae'</span>;
然后通过$ac = new $action();
可以得到一个新的IndexController实例
然后再调用$ac->$method();
就阔以了。
另外的方式就是通过反射来实现。
以上两种方式都会出现一个问题,如果我即将包含的这个文件IndexController.php中包含错误
或者是在sae() (执行过程中) 出现了错误被终止。我怎样去捕获它呢?
在php的oop中,exception的处理并没有java那样严格。不会强制要求throws Exception
比如以下的例子
class a {
public function expt() {
throw new Exception('wa!');
}
}
class c {
public function combinea() {
$a = new a();
$a->expt();
}
}
$c = new c();
$c->combinea();
它会抛出一个<strong>Fatal error: Uncaught exception 'Exception'</strong>
但是在php5.2的某些版本,他什么都不会输出,而且你也不能用try catch来捕获$c->combinea()抛出的异常。
最怕的不是出错,而是出了错什么都没有记录。增加了你debug的难度。
然后是另外一个问题~
如果我想要访问的地址是
index.php/index/list
<span><span><span></span></span>php</span>
<span>class</span> IndexController <span>extends</span> CController{
<span> public function</span> <span>list</span>() {
<span>echo</span> <span>'Hello'</span>;
}
}
注意! list这个词是php的预留词,所以这个文件语法有问题,包含的时候就会报错。
一些框架的解决方案是方法前统一加个词 比如action
控制器大致是这样的
<span><span><span></span></span>php</span>
<span>class</span> IndexController <span>extends</span> CController{
<span> public function</span> <span>actionlist()</span> {
<span>echo</span> <span>'Hello'</span>;
}
}
Controller也会需要参数的获取,模型载入,库载入等等工作。
所以框架对这层进行封装,这些工作会在基类CController上实现。
这也是为什么90%的框架都需要让你继承它的基类。
比如获取参数,涉及到安全性,在框架层面就可以容易封装。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール
