2016-12-28 15 views
0

私はthis oneと同様のことに取り組んでいます。しかし、誰かがグループに参加しているかどうかに基づいて、 "Join"または "Enter"ボタンを割り当てようとしています。問題は、カテゴリID($cats_id)の変数をビューファイルに渡す方法がわからないことです。mvc(PHP)のビューからモデルに変数を渡すには

モデルに、行が存在し、trueを返す関数を作成しました。

// check if joined the group 
    public static function checkIfJoined($cats_id) 
    { 
     $database = DatabaseFactory::getFactory()->getConnection(); 
     $users_id = Session::get('user_id'); 

     $sql = "SELECT cats_id,users_id FROM categories_joined WHERE users_id = :users_id AND cats_id = :cats_id"; 
     $query = $database->prepare($sql); 
     $query->execute(array(':users_id' => $users_id, ':cats_id' => $cats_id)); 

     // fetchAll() is the PDO method that gets all result rows 
     if ($query->rowCount() >= 1 || Session::get('user_account_type') == 7) { 
      return true; 
     } 
    } 

次に、コントローラーでモデルをビューにレンダリングします。

public function index() 
{ 
    $cats_id = ""; // this doesn't work right obviously 
    $this->View->render('dashboard/index', array(
     'categories' => DashboardModel::getAllCategories(),    
     'joined' => DashboardModel:: checkIfJoined($cats_id)   
    )); 
} 

私は変数をプレビュー関数 'categories'から渡します。

<?php if ($this->categories) { ?> 

        <?php foreach($this->categories as $key => $value) { ?> 
... 
<?php $cats_id = $value->cat_id; if ($this->joined == true): ?>Enter 
<?php else: ?>Join 
<?php endif; ?> 
+0

ビューからコントローラにデータを渡そうとしていますか? – BugHunterUK

答えて

2

コントローラの後にビューが解析されるため、ビューからコントローラに何も渡すことはできません。

ここでできることは、ビューでDashboardModel::checkIfJoined($cats_id)を呼び出すことによって直接モデルを使用することですが、それは完璧なアプローチではありません。

コントローラーでそのデータを準備し、それを表示することをお勧めします。

例コントローラ

public function index() 
{ 
    $this->View->render('dashboard/index', array(
     'categories' => DashboardModel::getAllCategories(), 
     'userCategories' => DashboardModel::getUserCategories() 
    )); 
} 

例図

<?php 
if ($this->categories) { 
    foreach ($this->categories as $key => $value) { 
     if (in_array($value->id, $this->userCategories) { 
      echo 'Joined'; 
     } else { 
      echo 'Join'; 
     } 
} 
?> 

この例では、DashboardModel::getUserCategories()SELECT cats_id FROM categories_joined WHERE users_id = :users_idから結果を返すべきです。

+0

ビューファイルではどのように変更されますか? – Guliverkel

+0

@Guliverkel編集 –

+0

@ Guliverkelおそらく、ユーザーが参加したすべてのカテゴリを取得してビューに渡すのが最善です。指定したカテゴリIDがそのリストに存在するかどうかを確認できます。個別のクエリで各カテゴリをチェックするよりも効率的です。 –

関連する問題