我尝试通过引用Yii2 REST GUIDE创建REST API,但不幸的是我只有GET方法工作.
示例网址:
除了上面的URL,其他一切都给了我一个NOT FOUND(404)错误页面(甚至不是JSON响应).
应用\控制器\ EmployeeController.php
<?php
namespace app\controllers;
use yii\rest\ActiveController;
class EmployeeController extends ActiveController
{
public $modelClass = 'app\models\Employee';
/**
* @return array
*/
protected function verbs()
{
return [
'index' => ['GET', 'HEAD'],
'view' => ['GET', 'HEAD'],
'create' => ['POST'],
'update' => ['PUT', 'PATCH'],
'delete' => ['DELETE'],
];
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序\型号\ Employee.php
<?php
namespace app\models;
use Yii;
class Employee extends \yii\db\ActiveRecord
{
public $primaryKey = 'emp_no';
/**
* …
Run Code Online (Sandbox Code Playgroud) 我正在构建一个测试API。我创建了一个从yii \ rest \ Controller扩展的Controller Page。动作需要发送响应。
要访问此控制器中的操作,需要发布service_id值。如果存在,我需要评估该service_id是否存在,是否处于活动状态并且属于已登录的用户。如果验证失败,则需要发送响应。
我正在尝试使用beforeAction()来执行此操作,但是问题是返回数据用于验证操作是否应该继续。
因此,我的临时解决方案是将服务对象保存在Class属性中,以便在操作中评估它并返回响应。
class PageController extends Controller
{
public $service;
public function beforeAction($action)
{
parent::beforeAction($action);
if (Yii::$app->request->isPost) {
$data = Yii::$app->request->post();
$userAccess = new UserAccess();
$userAccess->load($data);
$service = $userAccess->getService();
$this->service = $service;
}
return true;
}
public function actionConnect()
{
$response = null;
if (empty($this->service)) {
$response['code'] = 'ERROR';
$response['message'] = 'Service does not exist';
return $response;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我可能有20个需要进行此验证的操作,有没有办法从beforeAction方法返回响应以避免重复代码?