Heim > Backend-Entwicklung > PHP-Tutorial > typecho-framework 中如何在 Action 中设置成返回 JSON 格式

typecho-framework 中如何在 Action 中设置成返回 JSON 格式

WBOY
Freigeben: 2016-06-06 20:46:56
Original
1133 Leute haben es durchsucht

<code class="lang-PHP">class Home extends AbstractAction {

    public $text;


    public function execute() {
        $this->text = "hello world";
        return array('template', 'home.php');
    }
}
</code>
Nach dem Login kopieren
Nach dem Login kopieren

这个是渲染模板,传入 text 参数的示例。但是如果不需要渲染模板,直接输出 json 格式的数据呢?

我尝试过读源码,发现

<code class="lang-PHP">namespace TE\Mvc\Server\Http;

use TE\Mvc\Server\ResponseInterface;
use TE\Mvc\View\AbstractView as View;

class Response implements ResponseInterface
{
    public function setContentType($contentType)
    {
        $this->_contentType = $contentType;
        return $this;
    }
}
</code>
Nach dem Login kopieren
Nach dem Login kopieren

接着看 Response 对象的初始化:

<code class="lang-PHP">namespace TE\Mvc\Server\Http;

use TE\Mvc\Server\AbstractServer;
class Server extends AbstractServer
{
    protected function createResponse()
    {
        return new Response();
    }
}
</code>
Nach dem Login kopieren
Nach dem Login kopieren

如此说来,如果需要实现某个 URL 返回 JSON 格式的数据必须在 index.php 中:

<code class="lang-PHP">// 启动Server
new JSONServer(new Simple(require(ROOT . '/config/routes.php')), 
    new InterceptorManager(require(ROOT . '/config/interceptors.php')));
</code>
Nach dem Login kopieren
Nach dem Login kopieren

然后 JSONServer 里面设置 Response::setContentType() ?
这个动静太大了,谁知道正确的姿势?!

回复内容:

<code class="lang-PHP">class Home extends AbstractAction {

    public $text;


    public function execute() {
        $this->text = "hello world";
        return array('template', 'home.php');
    }
}
</code>
Nach dem Login kopieren
Nach dem Login kopieren

这个是渲染模板,传入 text 参数的示例。但是如果不需要渲染模板,直接输出 json 格式的数据呢?

我尝试过读源码,发现

<code class="lang-PHP">namespace TE\Mvc\Server\Http;

use TE\Mvc\Server\ResponseInterface;
use TE\Mvc\View\AbstractView as View;

class Response implements ResponseInterface
{
    public function setContentType($contentType)
    {
        $this->_contentType = $contentType;
        return $this;
    }
}
</code>
Nach dem Login kopieren
Nach dem Login kopieren

接着看 Response 对象的初始化:

<code class="lang-PHP">namespace TE\Mvc\Server\Http;

use TE\Mvc\Server\AbstractServer;
class Server extends AbstractServer
{
    protected function createResponse()
    {
        return new Response();
    }
}
</code>
Nach dem Login kopieren
Nach dem Login kopieren

如此说来,如果需要实现某个 URL 返回 JSON 格式的数据必须在 index.php 中:

<code class="lang-PHP">// 启动Server
new JSONServer(new Simple(require(ROOT . '/config/routes.php')), 
    new InterceptorManager(require(ROOT . '/config/interceptors.php')));
</code>
Nach dem Login kopieren
Nach dem Login kopieren

然后 JSONServer 里面设置 Response::setContentType() ?
这个动静太大了,谁知道正确的姿势?!

直接

<code class="lang-php">return array('json', array('xxx' => 'xxxx'));
</code>
Nach dem Login kopieren
Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage