🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## Yaf官方响应类可以参考: http://www.laruence.com/manual/yaf.class.response.html http://php.net/manual/zh/class.yaf-response-abstract.php ## 响应类 ### Yaf\Response\Http Yaf\Response\Http 是在Yaf作为Web应用的时候默认响应载体。因继承自Yaf\Response_Abstract, 所以Yaf\Response_Abstract有的方法该类里也有。 ``` final Yaf\Response\Http extends Yaf\Response_Abstract { public $_response_code; // 响应给请求端的HTTP状态码 } ``` ### Yaf\Response\Cli Yaf\Response\Cli是在Yaf作为命令行应用的时候默认响应载体。 因继承自Yaf\Response_Abstract, 所以Yaf\Response_Abstract有的方法该类里也有。 ``` final Yaf\Response\Cli extends Yaf\Response_Abstract { } ``` ### Yaf\Response\Http 和 Yaf\Response\Cli比较 通过使用var_dump(get_class_methods(Yaf\Response\Http::class)); 得出: ``` array (size=14) 0 => string 'setHeader' (length=9) 1 => string 'setAllHeaders' (length=13) 2 => string 'getHeader' (length=9) 3 => string 'clearHeaders' (length=12) 4 => string 'setRedirect' (length=11) 5 => string 'response' (length=8) 6 => string '__construct' (length=11) 7 => string '__destruct' (length=10) 8 => string '__toString' (length=10) 9 => string 'setBody' (length=7) 10 => string 'appendBody' (length=10) 11 => string 'prependBody' (length=11) 12 => string 'clearBody' (length=9) 13 => string 'getBody' (length=7) ``` 通过使用var_dump(get_class_methods(Yaf\Response\Cli::class)); 得出 ``` array (size=9) 0 => string '__construct' (length=11) 1 => string '__destruct' (length=10) 2 => string '__toString' (length=10) 3 => string 'setBody' (length=7) 4 => string 'appendBody' (length=10) 5 => string 'prependBody' (length=11) 6 => string 'clearBody' (length=9) 7 => string 'getBody' (length=7) 8 => string 'response' (length=8) ``` 对比后我们可以发现, Yaf\Response\Http 比 Yaf\Response\Cli的多了 header相关的方法: > setHeader > setAllHeaders > getHeader > clearHeaders ## 类方法 ### response #### 需要注意的是,默认情况下,$this->getResponse()->response()方法是会被自动调用的,如果手动调用,会导致最终被调用两次。 如果想显式调用response()方法,需要显式配置下: ``` Yaf\Dispatcher::getInstance()->returnResponse(true); ``` 例如 ``` <?php $application = new Yaf\Application("config.ini"); /** 关闭自动响应, 由开发自己显式调用输出 */ $response = $application->getDispatcher()->returnResponse(TRUE)->getApplication()->run(); /** 输出响应*/ $response->response(); ?> ``` ### setBody 设置响应的Body ``` public bool Yaf\Response_Abstract::setBody ( string $content [, string $key ] ) ``` $content: 是我们要传入的业务数据 $key: body所对应的key,你可以设置一个body的键值对,如果你没有指定key,系统默认使用Yaf\Response_Abstract::DEFAULT_BODY $key 参数因为是最终调用一次,所以一般不用额外传值。 例如 ``` <?php class IndexController extends Yaf\Controller_Abstract { public function testAction() { Yaf\Dispatcher::getInstance()->autoRender(false); $data = ['code' => 0, 'msg'=>'SUCCESS', 'data' => ['uid'=>1, 'name' => 'test']]; // 你的业务数据 $result = json_encode($data); $response = $this->getResponse(); $response->setBody($result); } } ``` ### setHeader 设置响应的header头信息 ``` public bool Yaf\Response_Abstract::setHeader ( string $name , string $value [, bool $replace ] ) ``` 例如 ``` <?php class IndexController extends Yaf\Controller_Abstract { public function testAction() { Yaf\Dispatcher::getInstance()->autoRender(false); $data = ['code' => 0, 'msg'=>'SUCCESS', 'data' => ['uid'=>1, 'name' => 'test']]; // 你的业务数据 $result = json_encode($data); $response = $this->getResponse(); $response->setHeader('Yaf-Version', "3.0.4"); $response->setBody($result); } } ``` ### setAllHeaders 批量设置响应的header头信息 ``` public bool Yaf\Response_Abstract::setAllHeaders ( array $headers) ``` 例如 ``` <?php class IndexController extends Yaf\Controller_Abstract { public function testAction() { Yaf\Dispatcher::getInstance()->autoRender(false); $data = ['code' => 0, 'msg'=>'SUCCESS', 'data' => ['uid'=>1, 'name' => 'test']]; // 你的业务数据 $result = json_encode($data); $response = $this->getResponse(); $headers = ['Yaf-Version' => "3.0.4", "X-HOST"=>"10.10.10.10"]; $response->setAllHeaders($headers); $response->setBody($result); } } ``` ### getHeader 获取请求的header头信息 ``` public void Yaf\Response_Abstract::getHeader ( void) ``` 例如 ``` <?php class IndexController extends Yaf\Controller_Abstract { public function testAction() { Yaf\Dispatcher::getInstance()->autoRender(false); $data = ['code' => 0, 'msg'=>'SUCCESS', 'data' => ['uid'=>1, 'name' => 'test']]; // 你的业务数据 $result = json_encode($data); $response = $this->getResponse(); $headers = ['Yaf-Version' => "3.0.4", "X-HOST"=>"10.10.10.10"]; $response->setAllHeaders($headers); var_dump($response->getHeader()); } } ``` ### clearHeaders ### getBody 获取body内容 ``` <?php $response = $this->getResponse(); $response->setBody("Hello")->setBody(" World", "footer"); var_dump($response->getBody()); //Hello var_dump($response->getBody(Yaf\Response_Abstract::DEFAULT_BODY::DEFAULT_BODY)); //Hello 和上面的一样 var_dump($response->getBody("footer")); // World var_dump($response->getBody(NULL)); //get all ?> ``` ### clearBody ### appendBody ### prependBody