由于某种原因,我得到了:
{
"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;
}
答案 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');