2011-08-16 48 views
0

我已經使用CodeIgniter構建了一個Web 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 

我希望不是......有沒有一種更清潔的方式做到這一點?我覺得我在這裏錯過了一些基本的東西。

謝謝 史蒂夫

+0

我不明白。你正在談論2個獨立的HTTP請求。那麼爲什麼Codeigniter會「認爲他們已經加載」? –

+0

API1目前是否存在,或者現在正在考慮設計未來的結構? –

+0

v1存在,我添加v2 –

回答

0

當CI尋找一類,它看起來在請求被請求的基礎(加載<domain>/foo/bar然後<domain>/foo/bar再次仍然會重新加載類Foo,除非你有緩存某種形式),當感覺它具有合適的類時它就終止了(這很好,因爲如果它過於激進,就會導致衝突)。

假設您給定的CI版本知道它應該查找哪個目錄,您應該沒有問題。當然,如果你在同一個文件中有兩個相同類的版本,那麼在PHP中通常不起作用。

+0

因此,即使這兩個庫被稱爲「客戶」,如果我做\t \t $ this-> load-> library(「1.0/customer」),然後$ this-> load->庫(「2.0/customer」)後,CI不會假設已經加載的版本(1.0)可以重新用於2.0調用?我在日誌中看到一堆令我擔心的信息:「DEBUG - 2011-08-f16 14:21:10 - >客戶類已經加載,第二次嘗試被忽略。」 –

+0

類別。如果您在同一個請求(一個控制器方法)中調用兩者,則會出現類型衝突,CI將忽略第二個呼叫。這意味着無論什麼先叫,勝。至於調試行,這是沒有什麼可擔心的。有時候庫需要庫。 – cwallenpoole