2011-04-25 5 views
0

필자는 app_controller에서 함수를 사용하여 인터페이싱하는 정교한 로깅 및 오류보고 시스템을 만들었습니다. 컨트롤러가 app_controller를 확장함에 따라 시스템의 모든 컨트롤러에서이를 호출 할 수 있습니다. 내가 뭘 할 수 있기를 바라는 것은 모델 함수 내에서이 함수를 호출하는 것이다. 누구든지이 일을하는 방법이나 그런 일을하는 다른 방법에 대해 조언 할 수 있습니까?모델 내에서 app_controller 함수 액세스

+0

당신은 모델에서 컨트롤러에 액세스 할 안돼요. 이 함수가 구체적으로 무엇을 구체적으로 설명 할 수 있습니까? – deceze

+0

기본적으로 개발/qa 서버에서 매우 자세한 로깅을 수행하고 프로덕션 서버에서는 적게 처리하는 상당히 고급 로깅 ​​기능을 원합니다. 로그 항목에 심각도 (DEBUG, INFO, CRITICAL 등)가 부여됩니다. 응용 프로그램 코드의 여러 위치에서이 코드를 사용하고 싶습니다. 나는 fat-model 방법론을 선호하지만 app_controller에 존재하는이 로깅 기능은 그다지 잘 작동하지 않습니다. – Excalibur

답변

3

몇 가지 옵션 :

  1. 사용자 정의 AppModel이 (APP/app_model.php)를 사용하여 모델 층에 논리를 마이그레이션합니다. 모든 컨트롤러가 적어도 하나의 모델을 사용한다고 가정하면 모든 모델에 대해 로깅 기능을 호출 할 수 있습니다. 즉 : $this->MyModel->customLog('test');
  2. 로직을 클래스로 마이그레이션하고 app/libs에 저장 한 다음 필요에 따라 컨트롤러 또는 모델에로드하십시오.

예는 :

App::import('Lib', 'CustomLog'); 
$this->CustomLog = new CustomLog(); 
$this->CustomLog->customLog('test'); 
+0

감사합니다. 아마도 라이브러리 기능을 사용하는 것이 최선의 방법이라고 생각합니다. 설명해 주셔서 고맙습니다. – Excalibur

+0

이 점에 대해 한 가지 더 자세히 설명합니다. 특정 상황에서이 함수 내에서 $ this-> Session-> setFlash() 또는 $ this-> redirect()를 호출 할 수 있기를 바랍니다. app_controller에서 함수를 제거하면 해당 함수를 사용할 수 없게 될 수도 있습니다 ... 아마도? – Excalibur

+0

@Excalibur 사용자 상호 작용 흐름 논리와 로깅 논리를 섞어서는 안됩니다. 로깅 코드를 호출하고 필요할 때 리디렉션/깜박이는 컨트롤러 기능을 만드십시오. – deceze

관련 문제