Controller.php 2.71 KB
Newer Older
Qiang Xue committed
1 2 3 4 5 6 7 8 9 10
<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace yii\rest;

use Yii;
11
use yii\filters\auth\CompositeAuth;
12
use yii\filters\ContentNegotiator;
13
use yii\filters\RateLimiter;
Qiang Xue committed
14
use yii\web\Response;
15
use yii\filters\VerbFilter;
Qiang Xue committed
16 17 18 19 20 21

/**
 * Controller is the base class for RESTful API controller classes.
 *
 * Controller implements the following steps in a RESTful API request handling cycle:
 *
22
 * 1. Resolving response format (see [[ContentNegotiator]]);
Qiang Xue committed
23
 * 2. Validating request method (see [[verbs()]]).
24
 * 3. Authenticating user (see [[\yii\filters\auth\AuthInterface]]);
25
 * 4. Rate limiting (see [[RateLimiter]]);
26
 * 5. Formatting response data (see [[serializeData()]]).
Qiang Xue committed
27 28 29 30 31 32
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @since 2.0
 */
class Controller extends \yii\web\Controller
{
33 34 35 36 37 38 39 40
    /**
     * @var string|array the configuration for creating the serializer that formats the response data.
     */
    public $serializer = 'yii\rest\Serializer';
    /**
     * @inheritdoc
     */
    public $enableCsrfValidation = false;
41

42 43 44 45 46 47 48

    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
49 50 51 52 53 54 55
            'contentNegotiator' => [
                'class' => ContentNegotiator::className(),
                'formats' => [
                    'application/json' => Response::FORMAT_JSON,
                    'application/xml' => Response::FORMAT_XML,
                ],
            ],
56 57 58 59
            'verbFilter' => [
                'class' => VerbFilter::className(),
                'actions' => $this->verbs(),
            ],
60
            'authenticator' => [
61 62
                'class' => CompositeAuth::className(),
            ],
63 64 65
            'rateLimiter' => [
                'class' => RateLimiter::className(),
            ],
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
        ];
    }

    /**
     * @inheritdoc
     */
    public function afterAction($action, $result)
    {
        $result = parent::afterAction($action, $result);
        return $this->serializeData($result);
    }

    /**
     * Declares the allowed HTTP verbs.
     * Please refer to [[VerbFilter::actions]] on how to declare the allowed verbs.
     * @return array the allowed HTTP verbs.
     */
    protected function verbs()
    {
        return [];
    }

    /**
     * Serializes the specified data.
     * The default implementation will create a serializer based on the configuration given by [[serializer]].
     * It then uses the serializer to serialize the given data.
92
     * @param mixed $data the data to be serialized
93 94 95 96 97 98
     * @return mixed the serialized data.
     */
    protected function serializeData($data)
    {
        return Yii::createObject($this->serializer)->serialize($data);
    }
Qiang Xue committed
99
}