繁体   English   中英

MVC - 此代码是否属于模型,控制器或视图?

[英]MVC - Does this code belong to model, controller or view?

我在我的网站通知,类似于Facebook。 但我只有3种类型的通知:

  • [昵称]发给你一个新的quize [quizename]
  • [nickname]将你添加到了他的论坛[groupname]。 接受| 拒绝
  • 您今天获得了100美元的信用额度。

表格通知

notification_id | 类型| item_id | from_id | to_id | 创建| 通知

item_id表示quize_id或group_id。 我进行额外的连接以获取所有数据。

我遇到的一个问题是如何显示每个通知取决于类型。 其中一个选项是组织字符串以在控制器中显示:

foreach($results as $key => $result){
  switch($result['type']){
    case 1:
    $string = "<a href=".baseUrl()."/users/$result['userId']>$result['nickname']</a> "._("wants you to take a quize")." <a href='".baseUrl()."/quize/$result['rel']'>$result['quizeName']</a>";
    break;
    case 2:
    $string = "<a href=".baseUrl()."/users/$result['userId']>$result['nickname']</a> "._("added you to his group")." <a href='".baseUrl()."/group/$result['rel']'>$result['groupName']</a>";
    break;
    case 3:
    $string = _("You received 100 credit for log in today");
  }
  $notifications[$key]['string'] = $string;
}

$data['notifications'] = $notifications;

$this->load->view('views/notifications/last_notification_view', $data);

该方法的问题是视图的一部分是在控制器内部。 我可以发送粗略的数据来查看,但问题是我需要在视图中制作类似的PHP代码。 那么哪种方法更好? 或者还有其他方法吗?

我个人的意见是你应该将$ results传递给视图,然后让循环获取结果并打印出视图中的链接。 你应该拥有的是控制器:

$data['notifications']=$results;
$this->load->view('views/notifications/last_notification_view', $data);

这在视图中:

foreach($data['notifications'] as $key => $result){
  switch($result['type']){
    case 1:
    echo "<a href=".baseUrl()."/users/$result['userId']>$result['nickname']</a> "._("wants you to take a quize")." <a href='".baseUrl()."/quize/$result['rel']'>$result['quizeName']</a>";
    break;
    case 2:
    echo "<a href=".baseUrl()."/users/$result['userId']>$result['nickname']</a> "._("added you to his group")." <a href='".baseUrl()."/group/$result['rel']'>$result['groupName']</a>";
    break;
    case 3:
    echo _("You received 100 credit for log in today");
  }
}

最佳选择是创建真实视图而不是使用模板

这段代码显然是表示逻辑的一部分,它在MVC设计模式的视图范围内。 不幸的是,CodeIgniter正在使用类似Rails的架构,这意味着您将不得不使用帮助程序 ,从而推动您更远离MVC启发的设计模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM