search

MVC in php

Jun 06, 2016 pm 07:48 PM
actionmvcphpplaceitcontroller

控制器,有的地方又称之为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%的框架都需要让你继承它的基类。
 
比如获取参数,涉及到安全性,在框架层面就可以容易封装。
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.