init
This commit is contained in:
106
vendor/yiisoft/yii2/rest/Action.php
vendored
Normal file
106
vendor/yiisoft/yii2/rest/Action.php
vendored
Normal file
@@ -0,0 +1,106 @@
|
||||
<?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\base\InvalidConfigException;
|
||||
use yii\db\ActiveRecordInterface;
|
||||
use yii\web\NotFoundHttpException;
|
||||
|
||||
/**
|
||||
* Action is the base class for action classes that implement RESTful API.
|
||||
*
|
||||
* For more details and usage information on Action, see the [guide article on rest controllers](guide:rest-controllers).
|
||||
*
|
||||
* @author Qiang Xue <qiang.xue@gmail.com>
|
||||
* @since 2.0
|
||||
*/
|
||||
class Action extends \yii\base\Action
|
||||
{
|
||||
/**
|
||||
* @var string class name of the model which will be handled by this action.
|
||||
* The model class must implement [[ActiveRecordInterface]].
|
||||
* This property must be set.
|
||||
*/
|
||||
public $modelClass;
|
||||
/**
|
||||
* @var callable a PHP callable that will be called to return the model corresponding
|
||||
* to the specified primary key value. If not set, [[findModel()]] will be used instead.
|
||||
* The signature of the callable should be:
|
||||
*
|
||||
* ```php
|
||||
* function ($id, $action) {
|
||||
* // $id is the primary key value. If composite primary key, the key values
|
||||
* // will be separated by comma.
|
||||
* // $action is the action object currently running
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* The callable should return the model found, or throw an exception if not found.
|
||||
*/
|
||||
public $findModel;
|
||||
/**
|
||||
* @var callable a PHP callable that will be called when running an action to determine
|
||||
* if the current user has the permission to execute the action. If not set, the access
|
||||
* check will not be performed. The signature of the callable should be as follows,
|
||||
*
|
||||
* ```php
|
||||
* function ($action, $model = null) {
|
||||
* // $model is the requested model instance.
|
||||
* // If null, it means no specific model (e.g. IndexAction)
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
public $checkAccess;
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
if ($this->modelClass === null) {
|
||||
throw new InvalidConfigException(get_class($this) . '::$modelClass must be set.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the data model based on the primary key given.
|
||||
* If the data model is not found, a 404 HTTP exception will be raised.
|
||||
* @param string $id the ID of the model to be loaded. If the model has a composite primary key,
|
||||
* the ID must be a string of the primary key values separated by commas.
|
||||
* The order of the primary key values should follow that returned by the `primaryKey()` method
|
||||
* of the model.
|
||||
* @return ActiveRecordInterface the model found
|
||||
* @throws NotFoundHttpException if the model cannot be found
|
||||
*/
|
||||
public function findModel($id)
|
||||
{
|
||||
if ($this->findModel !== null) {
|
||||
return call_user_func($this->findModel, $id, $this);
|
||||
}
|
||||
|
||||
/* @var $modelClass ActiveRecordInterface */
|
||||
$modelClass = $this->modelClass;
|
||||
$keys = $modelClass::primaryKey();
|
||||
if (count($keys) > 1) {
|
||||
$values = explode(',', $id);
|
||||
if (count($keys) === count($values)) {
|
||||
$model = $modelClass::findOne(array_combine($keys, $values));
|
||||
}
|
||||
} elseif ($id !== null) {
|
||||
$model = $modelClass::findOne($id);
|
||||
}
|
||||
|
||||
if (isset($model)) {
|
||||
return $model;
|
||||
}
|
||||
|
||||
throw new NotFoundHttpException("Object not found: $id");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user