gpt4 book ai didi

php - Yii2:ActiveController 中的 REST API 操作

转载 作者:行者123 更新时间:2023-12-02 18:18:37 25 4
gpt4 key购买 nike

在文档指南中有示例:

    namespace app\controllers;

use yii\rest\ActiveController;

class UserController extends ActiveController
{
public $modelClass = 'app\models\User';
}

但我不明白如何使用 Action 。

例如:

  • DataBase 具有具有多对多关系的表(通过连接表)。

  • 组件,用于处理模型并根据传输的数据从多个表中形成通用响应。可以返回一个数组或一个对象数组。

当在命令 Controller 中使用它时,它就像:

    class LastTweetsController extends Controller
{
/**
* @param int $count
*
* @throws yii\base\InvalidConfigException
*/
public function actionIndex($count = 10)
{
/** @var TweetLastfinder $tweetLastFinder */
$tweetLastFinder = Yii::$app->get('tweetlastfinder');

/**
* @var TweetShow $tweetShow
*/
$tweetShow = Yii::$app->get('tweetshow');

// For show tweets into terminal:
$tweetShow->showLastTweetsJSON($tweetLastFinder->findLastTweets($count));
}
}

但是我如何在 ActiveController 中进行相同的操作(传输参数 $count 并以 JSON 格式返回结果)?

最佳答案

更改 API 的默认操作,例如创建、更新、查看、索引、删除在 Controller 中写入以下代码

namespace app\controllers;
use yii\rest\ActiveController;

class UserController extends ActiveController
{
public $modelClass = 'app\models\User';

/* Declare actions supported by APIs (Added in api/modules/v1/components/controller.php too) */
public function actions(){
$actions = parent::actions();
unset($actions['create']);
unset($actions['update']);
unset($actions['delete']);
unset($actions['view']);
unset($actions['index']);
return $actions;
}

/* Declare methods supported by APIs */
protected function verbs(){
return [
'create' => ['POST'],
'update' => ['PUT', 'PATCH','POST'],
'delete' => ['DELETE'],
'view' => ['GET'],
'index'=>['GET'],
];
}

public function actionIndex($count = 10){
/** @var TweetLastfinder $tweetLastFinder */
$tweetLastFinder = Yii::$app->get('tweetlastfinder');

/**
* @var TweetShow $tweetShow
*/
$tweetShow = Yii::$app->get('tweetshow');

// This will return in JSON:
return $tweetLastFinder->findLastTweets($count);
}
}

在 API 主配置文件中 -

    'components' => [  
....
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
[
'class' => 'yii\rest\UrlRule',
'controller' => 'v1/user',
'tokens' => [
'{id}' => '<id:\\w+>',
'{count}' => '<count:\\w+>',
],
//'pluralize' => false,
'extraPatterns' => [
'POST' => 'create', // 'xxxxx' refers to 'actionXxxxx'
'PUT {id}' => 'update',
'PATCH {id}' => 'update',
'DELETE {id}' => 'delete',
'GET {id}' => 'view',
'GET {count}' => 'index',
],

],
]
],
....
]

在您的情况下,您希望在索引操作参数中使用 $count,因此在 url 管理器中您需要定义“count” token ,就像“id”一样

关于php - Yii2:ActiveController 中的 REST API 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36300972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com