【问题标题】:Laravel - display notification count on navigation barLaravel - 在导航栏上显示通知计数
【发布时间】:2015-10-10 06:38:44
【问题描述】:

目前我正在开发我的 laravel 应用程序中的通知功能。通知不需要是实时的,用户只需刷新页面,系统就会再次获取最新的通知计数并显示在导航栏的顶部。我通过在我的基本控制器中实现 get count 功能实现了这一点,我的所有其他控制器都将从它扩展。以下是我如何获取通知计数的示例。

我有两张桌子,ap_threadap_thread_comment。 ap_thread 有一列 last_visit_date,ap_thread_comment 有一列 created_at。一个线程可以有多个 cmets,我只需查询 ap_thread_comment created_date 何时大于 ap_thread last_visit_date 并获得总未读评论。 ap_thread last_visit_date 将在线程所有者访问其线程时更新。

现在的问题是当一些用户对线程发表评论时,假设有 2 个未读的 cmets。但是当线程所有者再次访问他们的线程时,它会显示 2 个未读的 cmets 这是因为基本控制器将首先触发而不是仅跟随控制器更新last_visit_date。如果我再次刷新页面,我可以获得正确的计数。我在执行这样的通知时做错了吗?下面是我的代码

class BaseController extends Controller{
public function __construct() {
   $new_thread_comment_count = 50; // 50 unread comments for example.
   View::share('new_thread_comment_count', $new_thread_comment_count);
}

class ThreadController extends BaseController{
   // update last visit date function
}

【问题讨论】:

  • 只是为了检查我是否正确,您是否看到接收通知的用户在访问线程时应该看到计数为 0 时看到计数为 2?

标签: php laravel laravel-5


【解决方案1】:

我认为这与您设置线程评论计数有关。由于您在方法的构造函数中调用它,因此您在程序中过早地获得未读计数。

我建议您实际使用view composer,而不是使用View::share()。视图作曲家本质上是给你一个惰性评估,因为它们在视图渲染之前被调用。

您可以在注册方法中附加应用程序服务提供者中的视图编辑器;

// '*' will attach this composer to all views, if you want only a single view
// specify it's name, or you can specify an array of views.
view()->composer('*', function (View $view) {
    $new_thread_comment_count = 50;
    $view->with('new_thread_comment_count', $new_thread_comment_count);
});

如作曲家文档中所述,如果您不喜欢闭包或将太多逻辑放入服务提供者,那么您可以在其中放置一个命名类;

view()->composer('*', 'App\Http\ViewComposers\NewThreadCommentCounter');

【讨论】:

  • 我在 app app/http 目录下的 ViewComposers 中创建了一个 ViewComposer 类。之后,我在 app.php 中添加了“App\Providers\ViewComposer”,它给了我“App\Providers\ViewComposer”类未找到..我做错什么了吗?
  • 你放错了命名空间。如果类在 app/Http 中,则命名空间是 App\Http。
猜你喜欢
  • 1970-01-01
  • 2018-04-23
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 2014-06-30
相关资源
最近更新 更多