| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | <?php/** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */namespace yii\rest;use Yii;use yii\filters\auth\CompositeAuth;use yii\filters\ContentNegotiator;use yii\filters\RateLimiter;use yii\filters\VerbFilter;use yii\web\Response;/** * Controller is the base class for RESTful API controller classes. * * Controller implements the following steps in a RESTful API request handling cycle: * * 1. Resolving response format (see [[ContentNegotiator]]); * 2. Validating request method (see [[verbs()]]). * 3. Authenticating user (see [[\yii\filters\auth\AuthInterface]]); * 4. Rate limiting (see [[RateLimiter]]); * 5. Formatting response data (see [[serializeData()]]). * * For more details and usage information on Controller, see the [guide article on rest controllers](guide:rest-controllers). * * @author Qiang Xue <qiang.xue@gmail.com> * @since 2.0 */class Controller extends \yii\web\Controller{    /**     * @var string|array the configuration for creating the serializer that formats the response data.     */    public $serializer = 'yii\rest\Serializer';    /**     * {@inheritdoc}     */    public $enableCsrfValidation = false;    /**     * {@inheritdoc}     */    public function behaviors()    {        return [            'contentNegotiator' => [                'class' => ContentNegotiator::className(),                'formats' => [                    'application/json' => Response::FORMAT_JSON,                    'application/xml' => Response::FORMAT_XML,                ],            ],            'verbFilter' => [                'class' => VerbFilter::className(),                'actions' => $this->verbs(),            ],            'authenticator' => [                'class' => CompositeAuth::className(),            ],            'rateLimiter' => [                'class' => RateLimiter::className(),            ],        ];    }    /**     * {@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.     * @param mixed $data the data to be serialized     * @return mixed the serialized data.     */    protected function serializeData($data)    {        return Yii::createObject($this->serializer)->serialize($data);    }}
 |