[英]Yii2 Rest api call multiple methods
我正在使用這段代碼,並嘗試在yii2中使用REST API。 我試着使用你在代碼片段中看到的兩個函數。
getSpecificData
<?php namespace app\\api\\modules\\widgetmodule\\controllers; use yii\\rest\\Controller; class WidgetController extends Controller { public $modelClass = 'app\\models\\DynamicWidget'; public function actions() { return [ 'index' => [ 'class' => 'yii\\rest\\IndexAction', 'modelClass' => $this->modelClass, 'prepareDataProvider' => [$this, 'getAllData'] ], 'view' => [ 'class' => 'yii\\rest\\ViewAction', 'modelClass' => $this->modelClass, 'prepareDataProvider' => [$this, 'getSpecificData'] ], ]; } public function getAllData() { die('get all data'); } public function getSpecificData() { die('get specific data'); } }
我嘗試了兩種不同方法的URL,
HTTP://本地主機/ API /網絡/ widgetmodule /空間/ getAllData
HTTP://本地主機/ API /網絡/ widgetmodule /空間/ getSpecificData
但輸出總是如此。
引用獲取所有數據
這是我在api.php中的URL管理器代碼
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
'<controller:\w+>/<action:\w+>/<id:\w+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
[
'class' => 'yii\rest\UrlRule',
'controller' => ['widgetmodule/widget']
]
],
],
'db' => $db,
],
'modules' => [
'widgetmodule' => [
'class' => 'app\api\modules\widgetmodule\Module',
],
所以任何人都可以幫助我,如何用兩種不同的方法獲得不同的輸出。
無論如何調用第一種方法。
任何幫助將不勝感激。
提前致謝。
1-您在控制器中定義的唯一2個操作是index
和view
,因為索引正在渲染getAllData
這就是您獲取該輸出的原因。
2- view
操作沒有prepareDataProvider
屬性。
也許你的意思是這樣的:
public function actions()
{
return [
'index' => [
'class' => 'yii\rest\IndexAction',
'modelClass' => $this->modelClass,
'prepareDataProvider' => [$this, 'getAllData']
],
'view' => [
'class' => 'yii\rest\ViewAction',
'modelClass' => $this->modelClass,
],
];
}
public function getAllData()
{
// return some dataProvider instance to be used by index
$modelClass = $this->modelClass;
return new ActiveDataProvider([
'query' => $modelClass::find(),
]);
}
這就是定義兩個動作: index
和view
,其中索引的dataProvider被自定義函數getAllData()
覆蓋。 這需要類似於那些配置:
[
'class' => 'yii\rest\UrlRule',
'controller' => ['widgetmodule/widget'],
'patterns' => [
'GET,HEAD index' => 'index',
'GET,HEAD view/{id}' => 'view',
]
],
因此,您可以在以下端點中訪問它們:
http://localhost/api/web/widgetmodule/widget/index
http://localhost/api/web/widgetmodule/widget/view/4
現在,如果您的問題是如何添加額外的操作以響應uri http://localhost/api/web/widgetmodule/widget/getSpecificData
那么您需要將其添加到您的模式中:
'patterns' => [
...
...
'GET getSpecificData' => 'some-specific-data',
]
並按官方文檔中的描述在控制器中定義該操作,只需添加以下內容即可:
public function actionSomeSpecificData()
{
return 'some specific data';
}
首先取消設置默認索引和視圖操作,如下所示:
public function actions()
{
$actions = parent::actions();
// unset default index action for custom our own code
unset($actions['index']);
unset($actions['view']);
return ArrayHelper::merge($actions, [
'index' => [
'class' => 'yii\rest\IndexAction',
'modelClass' => $this->modelClass,
'prepareDataProvider' => [$this, 'getAllData']
],
'view' => [
'class' => 'yii\rest\ViewAction',
'modelClass' => $this->modelClass,
'prepareDataProvider' => [$this, 'getSpecificData']
],
];
}
這樣的配置路線:
[
'class' => 'yii\rest\UrlRule',
'controller' => ['widgetmodule/widget'],
'patterns' => [
'GET,HEAD index' => 'index',
'GET,HEAD view/{id}' => 'view',
]
],
然后你可以調用這些網址:
http://localhost/api/web/widgetmodule/widget/index
http://localhost/api/web/widgetmodule/widget/view/4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.