나는 세션을 많이 사용하는 프로젝트에서 일한다. 우리는 db handler (Zend의 표준 핸들러)를 가지고 있으며, 현재 preDispatchLoop을위한 플러그인에서이 초기화 (db handler + session start)를 가지고 있습니다. 이전에는 preDispatch에 있었지만 각 작업 ('전달 된'작업에 포함 된 작업 포함) 때문에 문제가 발생했습니다.젠드 프레임 워크 - 라우터가 액세스해야 할 때 세션 초기화 위치
내 문제는 내가 국제화 작업을 시작했고 라우터를 사용하여 검색을 시작했기 때문입니다. URI의 언어 :/language/controller/action 형식 사용). 라우터가 세션을 사용하여 언어를 읽고 저장하려고합니다. 하지만 라우터가 처음에 나온 다음 (사전/사후) 발송자 정보를 알 수 있습니다.
그래서 질문은 : 세션 초기화를 부트 스트랩으로 이동하지 않는 이유는 무엇입니까? 전에 거기 있었기 때문에 그것은 db (세션이 db를 사용한다는 것을 기억해야합니다)가 오류를 방지하기 위해 액세스 할 수 있는지 테스트해야하기 때문에 이동해야했습니다. 그리고 오류가 있다면 단순히 리디렉션 (request-> setController/setAction 오류). 내가 세션 초기화 코드를 부트 스트래핑으로 옮기면 DB에 액세스 할 수없는 경우 리디렉션을 만들 수 없습니다.
다른 질문을 읽고 많은 사람들이 부트 스트래핑에서 요청 개체에 액세스하도록 요청했습니다. 그러나 그들은 모두 이렇게 말합니다. 하지만이 경우 어떻게해야합니까? 내 마지막 옵션은 세션 초기화를 부트 스트랩으로 되돌려 놓는 것이고, 실패하면 수동으로 헤더를 보내고 뷰를 읽지 만 오류 코드는 무시 무시한 해킹입니다.
내 생각에 세션을 일찍 사용해서는 안된다는 것입니다. 요청 된 컨트롤러/동작을 아직 완전히 알지 못하기 때문에 부트 스트랩에서 호출해서는 안됩니다. 나는 언어를 얻으려면 쿠키 (수동)에 의존하고 거기에서 (URI뿐만 아니라) 그것을 얻을 수 있다고 생각한다. 그리고 결국 언젠가 세션 정보가 부트 스트래핑에서 사용되어야한다면 나는 전역 변수를 사용할 것입니다.
당신은 어떻게 생각하십니까? 내가 응용 프로그램을 제어하는 방식에 오류가 있습니까?
몇 가지 질문을 볼 :
Zend Framework: Getting request object in bootstrap
Best way to deal with session handling in Zend Framework
(젠드 버전 1.9.6, 응용 프로그램이나 부트 스트랩 사용하지 않는) 난에 세션 초기화 및 DB 연결을 움직일 것입니다
왜 DB를 부팅 한 다음 세션을 부트 스트랩 할 수 있는지 명확하지 않습니다. db에 액세스 할 수없는 경우 리디렉션하기 위해 세션을 왜 필요로합니까? –
내가 오류가 있으면 리디렉션 할 수 없기 때문입니다. 부트 스트래핑에서 요청 개체에 직접 액세스 할 수 없지만 가져올 수는 없지만 (그게 내가 읽은 것입니다). 그래서 나는 에러시 리디렉션 할 수 있도록 db (및 세션) 초기화 코드를 플러그인으로 옮겼습니다. 하지만이 플러그 인은 라우터 뒤에 만 호출됩니다 (http://framework.zend.com/manual/en/zend.controller.basics.html의 흐름 참조). 오류가 발생하면 리디렉션하기 위해 세션이 필요하지 않습니다. 결국 내가 한 것은 단순히 부트 스트랩에서 세션 정보를 사용하는 것을 중단하는 것이 었습니다. –