2016-06-01 4 views
2

이것은 api url입니다.Yii2 REST API 필드에서 찾으십시오.

/API/웹/V1/사용자/ID로 123

찾기 사용자. id이 아닌 token으로 규칙을 변경하는 방법은 무엇입니까? 여기

는 규칙이다

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하고 하에서 정의된다

{id} 토큰으로서 정의 된
  [ 
       'class' => 'yii\rest\UrlRule', 
       'controller' => ['v1/users'], 
       'tokens' => [ 
        '{id}' => '<id:\\w+>' 

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

답변

1

이되는 코드 yii\rest\ViewAction 내장하여 사용되는 것은 이쪽 기본 키를 사용하여 모델을 찾습니다. {token}과 같은 다른 토큰을 사용해야하고 기본 키와 다른 속성으로 모델을 찾으려면 컨트롤러 내에서보기 조치를 무시해야합니다. 또한 새 inroduced를 지원하도록 $patterns을 변경해야합니다 있습니다

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; 
    } 

} 

을 : 여기

는 규칙에 '{token}' => '<token:\\w+>'를 추가 할 때 작동합니다 예입니다. 최종 규칙은 다음과 같을 수 있습니다.

'rules' => [ 
    [ 
     'class' => 'yii\rest\UrlRule', 
     'controller' => ['v1/users'], 
     'tokens' => [ 
      '{id}' => '<id:\\w+>', 
      '{token}' => '<token:\\w+>' 
     ] 
     'patterns' => [ 
      'PUT,PATCH {id}' => 'update', 
      'DELETE {id}' => 'delete', 
      // {token} is assigned to $token when redirecting to view 
      'GET,HEAD {token}' => 'view', 
      'POST' => 'create', 
      'GET,HEAD' => 'index', 
      '{id}' => 'options', 
      '' => 'options', 
     ], 
    ], 
] 
+0

이제 'Bad Request. 필수 매개 변수 누락 : 토큰'. 규칙에서'{token} =>'을 사용하는 경우 404. 무엇이 잘못 되었습니까? –

+0

방금 ​​업데이트했습니다. 이는 패턴이 기본적으로''GET, HEAD {id} '=>'view ''를 사용하기 때문에 발생합니다. 당신은 그것을 바꿀 필요가 있습니다. –

+0

고마워요. @Salem Ouerdani –