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']));
}

私がやりたいのは、フロントエンドの誰もがバックエンド関数を呼び出せないようにすることです。そこで、関数を保護するように設定し、アクセス許可を調整するために2つの拡張クラスを作成することを考えました。そのようです

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

私のコントローラーに。それらを支配する1つのクラス。

//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 に答える