Laravel,从刀片模板文件调用控制器方法

时间:2017-02-04 18:29:54

标签: php controller laravel-blade laravel-5.4

嘿,伙计们!我使用Laravel 5.4,WAMP for localhost。我正在努力解决问题,在我的Controller@methodName文件中调用header.blade.php,因为我想在我的header.blade.php文件中显示用户的所有通知。通常我在不同页面的路线的帮助下获得所有需要的数据。但是对于这种情况,我需要不使用路由来打电话。这是我的NotificationController的代码:

class NotificationController extends Controller
{   
  public function getNotification(){
    $notifications = Notification::where('user_id',Auth::user()->id)->get();
    $unread=0;

    foreach($notifications as $notify){
        if($notify->seen==0)$unread++;
    }

    return ['notifications'=>$notifications, 'unread'=>$unread];
  }
}

我应该在头文件中收到所有这些数据。我用过: {{App :: make(“NotificationController”) - > getNotification()}} {{NotificationController :: getNotification()}} 但它说Class NotificationController does not exist。请嘿嘿!

2 个答案:

答案 0 :(得分:3)

您可以在User模型中创建一种关系方法来检索属于该用户的所有通知,并使用Auth::user()->notifications,而不是调用控制器方法来获取通知。例如:

// In User Model
public function notifications()
{
    // Import Notification Model at the top, i.e:
    // use App\Notification;
    return $this->hasMany(Notification::class)
}

view中,您现在可以使用以下内容:

@foreach(auth()->user()->notifications as $notification)
    // ...
@endforeach

关于当前的问题,您需要使用完全限定的命名空间来创建控制器实例,例如:

app(App\Http\Controllers\NotificationController::class)->getNotification()

答案 1 :(得分:0)

尝试使用完整的命名空间:

例如,App\Http\Controllers\NotificationController::getNotification

但当然,控制器并不意味着被称为您使用它们的方式。它们意味着路线。更好的解决方案是在用户模型中添加关系,如下所示:

public function notifications()
{
    return $this->hasMany(Notification::class)
}

然后在你的视图中使用它:

@foreach(Auth::user()->notifications as $notification)