0
我們在Cake組件中有一個靜態方法。如果此組件引發特定錯誤,則該任務是將用戶重定向到登錄頁面。目前的(工作)的解決方案是:Cake:以組件靜態方式訪問控制器
class SomeComponent extends Component {
static $controllerObject;
function startup(&$controller) {
SomeComponent::$controllerObject =& $controller;
}
(...)
public static function decodeResponse($response) {
if($response == null || trim($response) == '') {
return null;
}
$result = json_decode($response, true);
if($result == null) {
throw new FatalErrorException('Could not parse api server response: ' . $response);
}
if(isset($result['error'])) {
if ($result['error'] === "IncorrectCredentialsException") {
self::$controllerObject->Session->destroy();
self::$controllerObject->Session->setFlash(__('Your session has ended. Please log in again.', true), 'default', array(), 'error');
self::$controllerObject->redirect(array(
'language' => Configure::read('Config.language'),
'controller' => 'users',
'action' => 'login'
));
}
else { throw new ApiServerException($result); }
}
return $result;
}
然而,我的團隊的同事,誰負責軟件的質量,沒有找到這個解決方案滿足。他說:「請找一個更好的方式將控制器傳遞給解碼方法,將控制器設置爲靜態變量不是最好的方法。」
有沒有更好的方法來做到這一點?