0

我正在 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();
    }
}

其他人都会这样做还是有更好的方法?

4

2 回答 2

2

我想你可以从阅读这条旧评论开始。

基本思想是将控制器包裹在一个“保护壳”上,它负责保护里面的对象。

于 2012-05-15T15:37:40.187 回答
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 高手。所以这可能不是“最好”的方式;但它保持简单。

于 2012-05-15T12:01:58.330 回答