2

私は MVC が (とても) 好きで、今日のすべての主要な Web 言語で MVC アーキテクチャのフレームワークを独学で学ぼうとしています。

私は現在 CodeIgniter と PHP を使用しています。同じ関数を POST と GET で異なる動作にする方法をオンラインで検索しましたが、何も見つかりませんでした。CodeIgniter にはこの機能がありますか?

Ruby On Rails または ASP.NET MVC を使用したことがある場合は、私が話していることを理解できるでしょう。これらのフレームワークでは、次のことができます。

[GET]
public ActionResult Edit(int Id)
{
    // logic here for GET
}

[POST]
public ActionResult Edit(EntityX EX)
{
    // logic here for POST
}

私はこれに慣れすぎて、その便利な機能なしで同じスムーズな機能を得る方法に頭を悩ませるのが難しいと感じています.

何か不足していますか?CodeIgniter で同じことを達成するにはどうすればよいですか?

ありがとう

4

2 に答える 2

5

何か不足していますか?CodeIgniter で同じことを達成するにはどうすればよいですか?

PHP で MVC に真にアプローチする方法を学びたい場合は、Tom Butlerの記事から学ぶことができます。

CodeIgniter は、MVC ではなく、Model-View-Presenter パターンを実装しています (そうは言っても)。真に MVC に似たアプリケーションを実装したい場合は、間違った方向に進んでいます。

MVP では:

  • ビューは、クラスまたは html テンプレートにすることができます。ビューはモデルを認識するべきではありません。
  • ビューにビジネス ロジックを含めないでください
  • プレゼンターは、ビューとモデルの間の単なる接着剤です。また、出力の生成も担当します。

注: モデルは特異なクラスであってはなりません。それはクラスの数です。デモンストレーションのためだけに「モデル」と呼びます。

したがって、次のようになります。

class Presenter
{
    public function __construct(Model $model, View $view)
    {
       $this->model = $model;
       $this->view = $view;
    }

    public function indexAction()
    {
         $data = $this->model->fetchSomeData();

         $this->view->setSomeData($data);

         echo $this->view->render();
    } 
}

MVC では:

  • ビューは HTML テンプレートではなく、プレゼンテーション ロジックを担当するクラスです。
  • ビューはモデルに直接アクセスできます
  • $_GETコントローラーは応答を生成するべきではありませんが、モデル変数を変更する必要があります (つまり、またはから変数を割り当てます)。$_POST
  • コントローラーはビューを認識すべきではありません

例えば、

class View
{
   public function __construct(Model $model)
   {
       $this->model = $model;
   }

   public function render()
   {
      ob_start();

      $vars = $this->model->fetchSomeStuff();

      extract($vars);

      require('/template.phtml');

      return ob_get_clean();
   }
}

class Controller
{
    public function __construct(Model $model)
    {
      $this->model = $model;
    }

    public function indexAction()
    {
        $this->model->setVars($_POST); // or something like that
    }
}

$model = new Model();
$view = new View($model);

$controller = new Controller($model);

$controller->indexAction();

echo $view->render();
于 2013-04-29T09:21:30.797 に答える
2

パラメータでは、変数を取得することしかできませんGET。変数を取得したい場合はPOST、CodeIgniter によって自動的に読み込まれる入力ライブラリを使用する必要があります。

$this->input->post('data');

したがって、あなたの場合は次のようになります。

public function edit($id = -1)
{
    if($id >= 0 && is_numeric($id))
    {
        // logic here for GET using $id
    }
    else if($id === -1 && $this->input->post('id') !== false)
    {
        // logic here for POST using $this->input->post('id')
    }
}

このライブラリを使用してGETCOOKIEおよびSERVER変数を取得することもできます。

$this->input->get('data');
$this->input->server('data');
$this->input->cookie('data');
于 2013-04-29T09:01:29.693 に答える