2016-06-01 1 views
2

Это api url.Yii2 REST API найти по полю

/API/веб/v1/пользователей/123

Поиск пользователя по идентификатору. Как изменить правило, чтобы найти по token, а не по id?

Вот это правило:

  [ 
       'class' => 'yii\rest\UrlRule', 
       'controller' => ['v1/users'], 
       'tokens' => [ 
        '{id}' => '<id:\\w+>' 

        // this does not work 
        // '{token}' => '<token:\\w+>' 
       ], 
      ], 

ответ

1

Это {id} определяется как знак является один используется встроенный в yii\rest\ViewAction код которого это:

class ViewAction extends Action 
{ 
    /** 
    * Displays a model. 
    * @param string $id the primary key of the model. 
    * @return \yii\db\ActiveRecordInterface the model being displayed 
    */ 
    public function run($id) 
    { 
     $model = $this->findModel($id); 
     if ($this->checkAccess) { 
      call_user_func($this->checkAccess, $this->id, $model); 
     } 

     return $model; 
    } 
} 

$this->findModel($id) определяется по yii\rest\Action и этим найти модели, используя их первичный ключ (ключи). Если вам нужно использовать другой токен, например {token}, и найти свою модель в другом атрибуте, кроме первичного ключа, вам необходимо переопределить действие вида внутри вашего контроллера.

Вот пример, который должен работать при добавлении '{token}' => '<token:\\w+>' к вашим правилам:

class UserController extends ActiveController 
{ 
    ... 
    public function actions() 
    { 
     $actions = parent::actions(); 
     unset($actions['view']); 
     return $actions; 
    } 

    public function actionView($token){ 
     $modelClass = $this->modelClass; 
     $model = $modelClass::find()->where(['token' => $token])->one(); 

     if ($model === null) 
      throw new \yii\web\NotFoundHttpException("Uknown user having $token as token"); 

     return $model; 
    } 

} 

Также обратите внимание, что вам нужно изменить $patterns поддержать новый inroduced один. Ваши окончательные правила могут быть такими:

+0

Теперь у меня есть «Плохой запрос». Отсутствуют требуемые параметры: токен. Если включить '{token} =>' в правиле, то 404. Что случилось? –

+0

Я только что обновил. это происходит потому, что шаблоны используют '' GET, HEAD {id} '=>' view'' по умолчанию. вам нужно изменить его. –

+0

Спасибо большое @Salem Ouerdani –

Смежные вопросы