2012-05-15 34 views
0

我正在創建一個MVC文件結構的購物車,並且我有一個購物車控制器 ,它有一組前端和後端的功能。PHP MVC類結構

Class ShoppingCartController{ 

    //frontend function 
    public function viewCart(){ 
      //do something 
      require 'view/viewCart.php'; 
    } 

    //backend function 
    public function viewOrders(){ 
      //do something 
      require 'view/viewOrders.php'; 
    } 
} 

$controll = new ShoppingCartController(); 

if(isset($_GET['action']) && in_array($_GET['action'], get_class_methods($controll))){ 
    call_user_func(array($controll, $_GET['action'])); 
} 

我想要做的就是防止任何來自前端的人能夠調用後端函數。所以我想我會設置保護功能並編寫兩個擴展類來管理權限。像這樣

Class ShoppingCartController{ 

    //frontend function 
    protected function viewCart(){ 
      //do something 
      require 'view/viewCart.php'; 
    } 

    //backend function 
    protected function viewOrders(){ 
      //do something 
      require 'view/viewOrders.php'; 
    } 
} 

Class ShoppingCartFrontendController Extends ShoppingCartController{ 
    //frontend function 
    public function viewCartExtended(){ 
      //do something 
      $this->viewCart(); 
    } 
} 

Class ShoppingCartBackendController Extends ShoppingCartController{ 
    //backend function 
    public function viewOrdersExtended(){ 
     //do something 
     $this->viewOrders(); 
    } 
} 

難道大家都會這樣做還是有更好的辦法?

+0

實際上,這是一個更好的方法。使用現成的框架,或至少看看他們是如何做到的。我保證,你會從他們那裏得到很多靈感。 – zafarkhaja

回答

2

我想你可以從閱讀this old comment開始。

其基本思想是將控制器包裹在「保護殼」上,保護殼內的物體負責保護。

0

如果我這樣做我想補充

//frontend function 
public function viewCartExtended(){ 
     //do something 
     $this->viewCart(); 
} 

//backend function 
public function viewOrdersExtended(){ 
    //do something 
    $this->viewOrders(); 
} 

我的控制器。 一個類來統治他們。

//frontend function 
private function viewCartExtended(){ 
     //do something 
     require 'view/viewCart.php'; 
} 
//backend function 
private function viewOrdersExtended(){ 
    //do something 
    require 'view/viewOrders.php'; 
} 
//public method 
public function get_view($foo){ 
    //test if authed etc.. 
    switch($foo){ 
     case "foo": 
      return viewCartExtended(); 
     break; 
     case "bar": 
      return viewOrdersExtended(); 
     break; 
     ... .. . . 
     .. . 

依此類推。
雖然我不是CI專家。所以這可能不是「最好」的方式;但它保持簡單。

+0

感謝您的回覆。我想我會用這個,如果有的話只有兩個功能和他們在哪裏嚴格互換。但隨着視圖函數的建立,get_view()函數開始變得非常複雜,首先授權用戶,然後計算出他們需要的視圖。 –