У нас есть статический метод в компоненте 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;
}
Однако моя команда коллега, который отвечает за качество программного обеспечения, не находит это решение удовлетворяет. Он говорит: «PLS найдет лучший способ передать контроллер методу декодирования. Установка контроллера как статической переменной - это не лучший способ».
Есть ли лучший способ сделать это?