在 rbac 中处理 yii2 中的运行时异常
Handle runtime exception in yii2 in rbac
如何处理 yii2 中的 rbac 异常。
以下函数在为用户分配角色时生成异常。
$r = new DbManager;
$r->init();
$role = (object) array('name' => $roleName);
if ( $r->assign($role, $userId) ) {
以上$r->assign
产生异常,如"Integrity constraint violation"。我想处理所有这些异常。我试过 try catch 块但没有成功?
这是我的完整代码:-
$roleName = $this->__checkIfRoleIsValid(\yii::$app->request->post());
$msg = "The role cannot be changed.";
$statusCode = 500;
$success = false;
if ( !empty($roleName) ) {
$userId = $this->_getUserId();
if ( empty($userId) ) {
\yii::$app->response->statusCode = 500;
return ['success' => false, 'message' => 'Unauthorize: Invalid x-user-authtoken provided.'];
\Yii::$app->end();
}
$r = new DbManager;
$r->init();
$role = (object) array('name' => $roleName);
if ( $r->assign($role, $userId) ) {
$statusCode = 204;
$msg = "";
$success = true;
}
}
\yii::$app->response->statusCode = $statusCode;
return ['success' => $success, 'message' => $msg];
\yii::$app->end();
您需要在 catch
中使用 yii\db\Exception
。
试试这个代码。
try {
$r->assign($role, $userId);
$statusCode = 204;
$msg = "";
$success = true;
} catch(yii\db\Exception $e) {
\Yii::$app->session->setFlash('warning', 'Your message.');
$success = false;
}
如何处理 yii2 中的 rbac 异常。 以下函数在为用户分配角色时生成异常。
$r = new DbManager;
$r->init();
$role = (object) array('name' => $roleName);
if ( $r->assign($role, $userId) ) {
以上$r->assign
产生异常,如"Integrity constraint violation"。我想处理所有这些异常。我试过 try catch 块但没有成功?
这是我的完整代码:-
$roleName = $this->__checkIfRoleIsValid(\yii::$app->request->post());
$msg = "The role cannot be changed.";
$statusCode = 500;
$success = false;
if ( !empty($roleName) ) {
$userId = $this->_getUserId();
if ( empty($userId) ) {
\yii::$app->response->statusCode = 500;
return ['success' => false, 'message' => 'Unauthorize: Invalid x-user-authtoken provided.'];
\Yii::$app->end();
}
$r = new DbManager;
$r->init();
$role = (object) array('name' => $roleName);
if ( $r->assign($role, $userId) ) {
$statusCode = 204;
$msg = "";
$success = true;
}
}
\yii::$app->response->statusCode = $statusCode;
return ['success' => $success, 'message' => $msg];
\yii::$app->end();
您需要在 catch
中使用 yii\db\Exception
。
试试这个代码。
try {
$r->assign($role, $userId);
$statusCode = 204;
$msg = "";
$success = true;
} catch(yii\db\Exception $e) {
\Yii::$app->session->setFlash('warning', 'Your message.');
$success = false;
}