控制器,有的地方又称之为Action。 它是MVC中的C,控制视图展现 它会担负很多任务。要接受请求,要选择M处理,最后选择V来显示。 一般在php中大多数情况下他都作为业务的处理层了。 比如对传入参数进行处理,对显示元素进行组装。 它的实现一般也两类 通过对
控制器,有的地方又称之为Action。
它是MVC中的C,控制视图展现
1 | 它会担负很多任务。要接受请求,要选择M处理,最后选择V来显示。
|
ログイン後にコピー
1 | 一般在php中大多数情况下他都作为业务的处理层了。
|
ログイン後にコピー
1 2 3 4 5 6 7 8 9 | <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>;
}
}
|
ログイン後にコピー
1 | 现在有一个请求index.php/index/sae
|
ログイン後にコピー
怎样路由到它上面呢?
1 | <span> $action </span> = <span> 'index' </span>;
|
ログイン後にコピー
1 | <span> $method </span> = <span> 'sae' </span>;
|
ログイン後にコピー
1 | 可以得到一个新的IndexController实例
|
ログイン後にコピー
1 | 以上两种方式都会出现一个问题,如果我即将包含的这个文件IndexController.php中包含错误
|
ログイン後にコピー
1 | 或者是在sae() (执行过程中) 出现了错误被终止。我怎样去捕获它呢?
|
ログイン後にコピー
1 | 在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();
1 | 它会抛出一个<strong>Fatal error: Uncaught exception 'Exception' </strong>
|
ログイン後にコピー
1 | 但是在php5.2的某些版本,他什么都不会输出,而且你也不能用 try catch 来捕获 $c ->combinea()抛出的异常。
|
ログイン後にコピー
1 | 最怕的不是出错,而是出了错什么都没有记录。增加了你debug的难度。
|
ログイン後にコピー
1 | <span><span><span></span></span>php</span>
|
ログイン後にコピー
ログイン後にコピー
1 | <span> class </span> IndexController <span> extends </span> CController{
|
ログイン後にコピー
ログイン後にコピー
1 | <span> public function </span> <span>list</span>() {
|
ログイン後にコピー
1 | <span> echo </span> <span> 'Hello' </span>;
|
ログイン後にコピー
ログイン後にコピー
1 | 注意! list这个词是php的预留词,所以这个文件语法有问题,包含的时候就会报错。
|
ログイン後にコピー
1 | 一些框架的解决方案是方法前统一加个词 比如action
|
ログイン後にコピー
1 | <span><span><span></span></span>php</span>
|
ログイン後にコピー
ログイン後にコピー
1 | <span> class </span> IndexController <span> extends </span> CController{
|
ログイン後にコピー
ログイン後にコピー
1 | <span> public function </span> <span>actionlist()</span> {
|
ログイン後にコピー
1 | <span> echo </span> <span> 'Hello' </span>;
|
ログイン後にコピー
ログイン後にコピー
1 | Controller也会需要参数的获取,模型载入,库载入等等工作。
|
ログイン後にコピー
1 | 所以框架对这层进行封装,这些工作会在基类CController上实现。
|
ログイン後にコピー
1 | 比如获取参数,涉及到安全性,在框架层面就可以容易封装。
|
ログイン後にコピー