A free and open-source book on ZF3 for beginners


4.17. Стратегии рендеринга представления

Стратегия рендеринга представления (rendering strategy) определяет то, как будет визуализирована страница. По умолчанию, чтобы получить HTML страницу, производится рендеринг шаблона представления .phtml с помощью класса PhpRenderer, живущего в простанстве имен Zend\View\Renderer. Эта стратегия работает хорошо в 99% случаев. Но иногда вам может понадобиться отобразить что-то кроме HTML страницы, например, ответ в формате JSON или новостную ленту (RSS feed).

Ответ в формате JSON обычно возвращается, когда вы реализуете какой либо API (Application Programming Interface). API используется для того, чтобы извлечь данные с веб-сайта в машинно-читаемом виде. Ответ в виде новостной ленты (RSS feed) обычно используется для публикации часто меняющейся информации, такой как посты блога или новости.

Итак, ZF3 из коробки предлагает три стратегии рендеринга представления:

4.17.1. Ответ в виде JSON

Например, давайте покажем как использовать стратегию JsonStrategy, чтобы вернуть ответ JSON из действия контроллера.

Сначала вам нужно зарегистрировать стратегию в файле конфигурации module.config.php:

<?php
return [
    //...
    
    'view_manager' => [
        //...
        
        'strategies' => [
            'ViewJsonStrategy',
        ],
    ],
];

Затем верните объект JsonModel (вместо обычного ViewModel) из метода действия контроллера:

namespace Application\Controller;
 
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\JsonModel;
 
class IndexController extends AbstractActionController
{
    public function getJsonAction()
    {
        return new JsonModel([
            'status' => 'SUCCESS',
            'message'=>'Here is your data',
            'data' => [
                'full_name' => 'John Doe',
                'address' => '51 Middle st.'
            ]
        ]);
    }
}

Если вы откроете страницу http://localhost/application/getJson в браузере, вы должны увидеть ответ в формате JSON:

{'status':'SUCCESS', 'message':'Here is your data', 'data':{'full_name:'John Doe', 'address':'51 Middle st.'}}

Top