Zend Framework 2: Jak zwrócić JSON w akcji kontrolera

ToAr Ceneo Widget 0.3
26 November 2015
Wesołych Świąt i Szczęśliwego Nowego Roku 2016
13 December 2015
Pokaż wszystko

Zend Framework 2: Jak zwrócić JSON w akcji kontrolera

Czasami zamiast widoku w postaci HTML w Zend Framework 2 chciałbyś zwrócić dane w innej postaci, na przykład JSON. Można to zrobić stosunkowo łatwo w dwóch krokach.

1. Odblokowanie JsonStrategy

Na początku musimy przygotować odpowiedni widok, który będzie sprawdzał sytuację, gdzie będziemy zwracać dane w JSON i dzięki temu widok zwróci nam dane w tym formacie. Widok JsonStrategy będzie wywoływał metodę JsonRenderer w dwóch sytuacjach:
– Model widoku zwracany przez akcję w kontrolerze to JsonModel.
– Nagłówek „HTTP Accept” wysyła „Request”, który obejmuje „application/json”.

Aby odblokować JsonStrategy, po prostu konfigurujemy ją w pliku konfiguracyjnym modułu, np. module/Application/config/module.config.php:

'view_manager' => array(
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => array(
            'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
            'index/index'   => __DIR__ . '/../view/index/index.phtml',
            'error/404'     => __DIR__ . '/../view/error/404.phtml',
            'error/index'   => __DIR__ . '/../view/error/index.phtml',
        ),
        'template_path_stack' => array(
            'application' => __DIR__ . '/../view',
        ),
        'strategies' => array(
            'ViewJsonStrategy',
        ),
    ),

Jak możesz spojrzeć powyżej na fragment kodu, dodajemy ViewJsonStrategy do naszej tabeli strategii.

2. Zwrócenie wartości jako JsonModel w akcji kontrolera

Aby wysłać treść w JSON do klienta, kiedy w nagłówku nie ma zadeklarowanego „application/json”, używamy JsonModel w akcji w kontrolerze, np. module/Application/src/Application/Controller/IndexController.php:

namespace Application\Controller;

use Zend\Mvc\Controller\ActionController;
use Zend\View\Model\ViewModel;
use Zend\View\Model\JsonModel;

class IndexController extends ActionController
{
    public function indexAction()
    {
        $result = new JsonModel(array(
        'parametr' => 'jakaś wartość',
            'success' => true,
        ));

        return $result;
    }
}

Wynik teraz powinien zostać zaprezentowany jako JSON. Oczywiście jeśli wysyłasz JSON w oparciu o „Accept” w nagłówku, wtedy możesz normalnie korzystać z ViewModel.

Leave a Reply

Your email address will not be published. Required fields are marked *

four × two =

This site uses Akismet to reduce spam. Learn how your comment data is processed.

//]]>