Symfony控制层深入详解(3)

经验说明,很多时候一个动作会在验证一些东西后redirect或者forward另一个动作。这就是为什么sfActions类有很多的方法命名为forwardIf(), forwardUnless(), forward404If(), forward404Unless(), redirectIf(), 和 redirectUnless(),这些方法简单地使用一个测试结果参数true(那些xxxIf()方法)或false(那些xxxUnless()方法):

public function executeShow() { $article = ArticlePeer::retrieveByPK($this->getRequestParameter('id')); $this->forward404If(!$article); } public function executeShow() { $article = ArticlePeer::retrieveByPK($this->getRequestParameter('id')); $this->forward404Unless($article); }

这些方法不仅仅是减少你的代码行数,他们还使得你的程序更加易读。

当动作调用forward404()或者其他类似方法,symfony抛出管理404响应的sfError404Exception异常,也就是说如果你想显示404信息,你无需访问控制器,你只是抛出这个异常即可。

模块中多个动作重复代码的处理方式

preExecute()与postExecute()方法是一个模块中多个动作共同的东西。可以在调用executeAction()之前和之后执行。

class mymoduleActions extends sfActions { public function preExecute() { // 这里的代码在每一个动作调用之前执行 ... } public function executeIndex() { ... } public function executeList() { ... $this->myCustomMethod(); // 调用自定义的方法 } public function postExecute() { // 这里的代码会在每个动作结束后执行 ... } protected function myCustomMethod() { // 添加自己的方法,虽然他们没有以execute开头 // 在这里,最好将方法定义为protected(保护的)或者private(私有的) ... } }

访问请求

getRequestParameter(“myparam”)方法常用来获取myparam参数的值,实际上这个方法是一系列请求调用参数仓库的代理:getRequest()->getParameter(“myparam”)。动作类使用sfWebRequest访问请求对象,通过getRequest()访问他们的方法。

sfWebRequest对象的方法

方法名

 

功能

 

输入示例

 

Request Information

 

 

 

 

 

getMethod()

 

Request对象

 

Returns sfRequest::GET or sfRequest::POST constants

 

getMethodName()

 

Request对象名

 

'POST'

 

getHttpHeader('Server')

 

给定HTTP头的值

 

'Apache/2.0.59 (Unix) DAV/2 PHP/5.1.6'

 

getCookie('foo')

 

指定名称Cookie的值

 

'bar'

 

isXmlHttpRequest()*

 

是否是AJAX请求?

 

true

 

isSecure()

 

是否是SSL请求

 

true

 

Request Parameters

 

 

 

 

 

hasParameter('foo')

 

参数是否在请求中有

 

true

 

getParameter('foo')

 

指定参数的值

 

'bar'

 

getParameterHolder()->getAll()

 

所有请求参数的数组

 

 

 

URI-Related Information

 

 

 

 

 

getUri()

 

完整URI

 

'http://localhost/myapp_dev.php/mymodule/myaction'

 

getPathInfo()

 

路径信息

 

'/mymodule/myaction'

 

getReferer()**

 

来自那里?

 

'http://localhost/myapp_dev.php/'

 

getHost()

 

主机名

 

'localhost'

 

getScriptName()

 

前端控制器路径与名称

 

'myapp_dev.php'

 

Client Browser Information

 

 

 

 

 

getLanguages()

 

可接受语言的列表

 

Array( [0] => fr [1] => fr_FR [2] => en_US [3] => en )

 

getCharsets()

 

可接受字符集的列表

 

Array( [0] => ISO-8859-1 [1] => UTF-8 [2] => * )

 

getAcceptableContentTypes()

 

可接受内容类型数组

 

 

 

sfActions类提供了一些代理来快速地访问请求方法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/acc323a5fe49d6e20da85f99c0a4d6da.html