2011-03-10 8 views
3

コントローラからモデルに情報を渡すときのベストプラクティスとは何か考えています。具体的には、電子メール、名前、パスワードなどの特定の情報を要求するユーザークラス内にユーザー登録モデルを作成しています。PHP MVCでメソッド関数を作成するためのベストプラクティスは何ですか?

モデル関数内にパラメータを入れて渡す方が良いか、または関数を呼び出してクエリに$ _POST変数を使用する方が良いのではないかと思います。

ここに私が言及している2つの例があります。

方法1

function register(){ 

    $first_name = $this->input->post('first_name'); 
    $last_name = $this->input->post('last_name'); 
    $email = $this->input->post('email'); 
    $password = $this->input->post('password_1'); 

    $this->user_model->register_user($email, $password, $first_name, $last_name));} 

function register_user($email, $password, $first_name, $last_name){ 
    $sql = "INSERT INTO users (user_id, email, passwd, first_name, last_name, registration_date, confirmed, confirmation_code, banned)VALUES (NULL, ?, ?, ?, ?, '".date('Y-m-d')."', 'no', '1fg455675', 'no')"; 
    $register = $this->db->query($sql, array($email, $password, $first_name, $last_name)); 
    return $register; 
} 

方法2

function register(){ 
    $this->user_model->register_user());  
} 

function register_user(){ 

    $first_name = $this->input->post('first_name'); 
    $last_name = $this->input->post('last_name'); 
    $email = $this->input->post('email'); 
    $password = $this->input->post('password_1'); 


    $sql = "INSERT INTO users (user_id, email, passwd, first_name, last_name, registration_date, confirmed, confirmation_code, banned)VALUES (NULL, ?, ?, ?, ?, '".date('Y-m-d')."', 'no', '1fg455675', 'no')"; 
    $register = $this->db->query($sql, array($email, $password, $first_name, $last_name)); 
    return $register; 
} 

私は、検証コードの多くを削除しているとどのようなので、うまくいけば、あなたのアイデアを得る問題を単純化することではありません。

答えて

2

モデルからPOST変数にアクセスしないでください。これにより、POSTデータを使用して作業するため、モデルの再利用性が低下します。たとえば、同じことをする方法が必要だったにもかかわらず、他のソース(CSV)からデータを取得していたのであれば、同じモデルを使用することはできません。役職。

あなたはこのような構造

2

で作業しているときにそれらを分離するようにしてください私は、モデル層に$_POST(も、あなたのフレームワークとそれに相当)を使用することはありません:これは、場所を知っている必要はありません。データはから来ます。

モデルは、Webサービス、コマンドラインプログラムなどから呼び出すことができ、動作する必要があります。アプリケーションにPOSTされているものに依存してはいけません。

コントローラは、HTTPリクエスト(もちろんHTTPリクエストの場合)のパラメータを受信して​​呼び出されたものです;データを抽出し、このデータで動作するレイヤーに渡します:モデル。

関連する問題