yii2 rest api实现自定义操作

时间:2015-10-19 19:38:57

标签: rest controller yii2

由于某种原因,我得到了:

{
  "name": "Not Found",
  "message": "Object not found: search",
  "code": 0,
  "status": 404,
  "type": "yii\web\NotFoundHttpException"
}

当我尝试在我的yii2 rest api应用中访问自定义操作(http://localhost/project/api/web/v1/userfunctions/search)时。 这是我在main.php配置文件中的内容

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

UserFunctionController类有一个actionSearch方法。

我在这里错过了什么吗?

当我添加空白操作方法时:

public function actions() 
{
  $actions = parent::actions();
  return $actions;
}

方法404消失但我得到一个空白的响应(状态代码200)[这与动作搜索是否定义无关]在这种情况下控制在哪里?

以下是actionSearch()代码

 public function actionSearch()
    { 
        $output = UserStatus::findAll();
        return $output;
    }

1 个答案:

答案 0 :(得分:0)

默认情况下,Yii将控制器名称复数化以用于端点。因此,如果您没有将yii \ rest \ UrlRule :: $ pluralize属性配置为不这样做,那么您的操作应该在以下位置可用:

http://localhost/project/api/web/v1/userfunctions/search

更新:

public function actionSearch()
{ 
    $output = UserStatus::findAll();
    return $output;
}

这应该抛出这个PHP错误:缺少yii \ db \ BaseActiveRecord :: findAll()的参数1,因为findAll()方法期待混合持有过滤条件的参数。

你应该改用:

public function actionSearch()
{ 
    $output = UserStatus::find()->all();
    return $output;
}

我认为您的服务器未正确显示错误消息。检查其配置,错误日志文件,并确保在应用程序处于 dev 状态时Entry Script中包含这些行:

// remember to remove them all when deploying to production

   error_reporting(E_ALL);
   ini_set('display_errors', 'on');

   defined('YII_DEBUG') or define('YII_DEBUG', true);
   defined('YII_ENV') or define('YII_ENV', 'dev');
相关问题