Это {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 один. Ваши окончательные правила могут быть такими:
Теперь у меня есть «Плохой запрос». Отсутствуют требуемые параметры: токен. Если включить '{token} =>' в правиле, то 404. Что случилось? –
Я только что обновил. это происходит потому, что шаблоны используют '' GET, HEAD {id} '=>' view'' по умолчанию. вам нужно изменить его. –
Спасибо большое @Salem Ouerdani –