2011-08-16 5 views
0

저는 CodeIgniter를 사용하여 웹 API를 작성했으며 업데이트 된 버전을 출시하려고합니다. 자, 다음과 같이 호출 할 수 있다고 가정 해 봅시다 :CodeIgniter - 버전 라이브러리 및 모델

mysite.com/api/v1.0/get_customers 
mysite.com/api/v2.0/get_customers 

(올바른 컨트롤러 버전을 얻으려는 경로를 사용한다고 가정 해 봅시다).

나는이 같은 CI 라이브러리 구조가 있습니다

controllers/ 
    + 1.0/ 
     + Api.php 
    + 2.0/ 
     + Api.php 
libraries/ 
    + 1.0/ 
     + Customer.php 
    + 2.0/ 
     + Customer.php 
models/ 
    + 1.0/ 
     + Customer_model.php 
    + 2.0/ 
     + Customer_model.php 

지금 가정합니다 V1.0의 전화가 걸려 온다 나는 1.0 라이브러리와 모델을로드 1.0 컨트롤러를로드합니다. 그 후 v2.0 호출이오고 2.0 버전을 모두로드합니다 ...

CI는 1.0 클래스의 경로가 2.0 클래스와 다르다는 것을 인식하고 (이미 생각한 것보다) 다시로드합니다. 실제로 1.0 버전 일 때 같은 클래스 이름을 공유하기 때문에로드됩니까?)

사람들은 어떻게 처리합니까? 나는이 같은 다른 클래스 이름을 사용해야합니까 :

내가하지 희망
class Customer_1_0 
class Customer_2_0 
class Customer_model_1_0 
class Customer_model_2_0 

...이 할 수있는 청소기 방법이 있나요? 나는 근본적인 무언가를 놓치고있는 것처럼 느낀다.

는 스티브에게 감사

CI 클래스를 검색 할 때, 당신의 캐싱을하지 않는 한 <domain>/foo/bar 다음 <domain>/foo/bar 다시 여전히 클래스 푸를 다시로드로드 요청별로 요청으로 (에 보이는
+0

나는 그것을 얻지 못한다. 두 개의 개별 HTTP 요청에 대해 이야기하고 있습니다. 그렇다면 Codeigniter는 왜 그들이 이미로드했다고 생각합니까? –

+0

API1이 현재 존재하거나 미래를위한 구조를 설계하려고하십니까? –

+0

v1이있는 경우 v2를 추가합니다. –

답변

0

어떤 형식), 적절한 클래스가 있다고 느낄 때 종료됩니다 (너무 공격적이라면 충돌을 일으킬 수 있기 때문에 좋습니다).

주어진 CI 버전이 어떤 디렉토리에 있는지 알고 있다고 가정하면 문제가 발생하지 않습니다. 물론 동일한 파일에 동일한 클래스의 두 버전이있는 경우 PHP에서 일반적으로 작동하지 않습니다.

+0

그래서 두 라이브러리를 모두 "고객"이라고 지정하더라도 \t \t $ this-> load-> library ("1.0/customer") 및 $ this-> load-> library ("2.0/customer") 나중에 CI는 이미로드 된 버전 (1.0)을 2.0 호출에 다시 사용할 수 있다고 가정하지 않을 것입니다. 로그에 다음과 같은 것들이 나타납니다. "DEBUG - 2011-08-F16 14:21:10 -> 고객 등급이 이미로드되었습니다. 두 번째 시도는 무시되었습니다." –

+0

일종. 동일한 요청 (둘 중 하나의 컨트롤러 메소드)에서 둘 다 호출하면 유형 충돌이 발생하고 CI는 두 번째 호출을 무시합니다. 즉, 먼저 불리는 것이 무엇이든 의미합니다. 디버그 라인에 대해서는 걱정할 필요가 없습니다. 라이브러리에 라이브러리가 필요한 경우가 있습니다. – cwallenpoole