2016-12-28 27 views
0

我正在处理与this one类似的事情。但我试图根据是否有人加入该组来分配按钮“加入”或“输入”。问题是我不知道如何将变量从类别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是否存在于该列表中。这将比单独查询中检查每个类别更高效。 –

相关问题