CakePHP - Может ли CakeLog :: write () прервать дальнейшее выполнение кода? - PullRequest
1 голос
/ 28 июня 2011

Функция входа в систему записывает пару переменных сеанса после успешной аутентификации, а затем перенаправляет на себя для печати приветственного сообщения (представление изменяется в зависимости от статуса аутентификации).Это прекрасно работает с debug> = 0. Теперь, когда я добавляю CakeLog :: write () к той же функции входа в систему, он перестает работать с debug = 0 и отображается пустая страница.Он продолжает работать с отладкой> 0.

Согласно журналам Apache, белая страница является результатом ошибки 500 после запроса POST.

Что делает CakeLog :: write ()кроме записи в файл журнала?

Участвуют компоненты 'Session', 'Security' и 'Auth', но я не вызываю метод requirePost.

CakeLog :: write ()возвращает true в случае успеха, но перехват кода возврата не меняет проблему того, что дальнейшее выполнение кода прерывается.Я должен перезагрузить белую страницу, чтобы продолжить (т.е. заменить POST запросом GET).

Вот логин users_controller:

function login(){
 [if form contains data do some LDAP checking...]
  if($permission>0){
   $this->Session->write('logname', $samaccountname);
   $this->Session->write('logperm', $permission);
   [...]

   // Here is where it blocks. Without this line debug=0 is okay
   $result = CakeLog::write('log', $samaccountname);

   $this->Auth->login();
   // the Auth redirect target is set in the app_controller to allow jumping right 
   // to the originally intended URL, usually it redirects to itself
   $this->redirect($this->Auth->redirect());
   }
  }

А это - beforeFilter для app_controller:

function beforeFilter(){
 $this->Security->blackHoleCallback = 'showErrorPage';
 $this->Security->requireAuth();
 $this->Security->requireSecure();

 if($this->Session->read('logperm') < 1 && $this->here != '/users/login'){
  $this->Auth->redirect($this->here); // store chosen URL
  $this->redirect('/users/login');
  }
 if($this->Session->read('logperm') == 3)
  $this->Auth->allow('*');
 elseif[...]
 }

Ответы [ 2 ]

0 голосов
/ 28 июня 2011

Спасибо @ Франсуа, это указало мне правильное направление.Необходимо было установить

Configure::write('log', true);

, чтобы обеспечить ведение журнала сообщений и ошибок, даже если debug = 0 (добавлено в загрузчик).
Кстати, в кулинарной книге 1.3 четко указано, что ведение журнала включенопо умолчанию, даже если debug = 0.Это может быть сбой в документации.

0 голосов
/ 28 июня 2011

Это длинный выстрел, но 'log' не является допустимым типом журнала, поэтому вы можете попробовать еще раз что-то вроде 'notice'.

Единственное, о чем я могу думать, это то, что каталог файлов журнала не доступен для записи PHP. Вы также можете это проверить.

...