2017-02-04 3 views
0

Привет, ребята! Я использую Laravel 5.4, WAMP для localhost. Я борюсь с проблемой, чтобы вызвать в моем header.blade.php файле, потому что я хочу показать в своем файле header.blade.php все уведомления для Пользователя. Обычно я получал все необходимые данные с помощью маршрутов на разных страницах. Но для этого случая мне нужно позвонить без использования маршрутов. Вот мой код для моего NotificationController:Laravel, вызов контроллера метод из файла шаблона лезвия

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 :: сделать ("NotificationController") -> getNotification()}} и {{NotificationController :: getNotification()}} Но это говорит Class NotificationController does not exist. Пожалуйста, послушайте!

+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

Добро пожаловать :-) –

0

Попробуйте использовать полное пространство имен:

Например, App\Http\Controllers\NotificationController::getNotification

но, конечно, контроллеры не должны называться так, как вы их используете. Они предназначены для маршрутов. Лучшее решение заключается в добавлении отношения в модели пользователя следующим образом:

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

И затем использовать это на ваш взгляд, как так:

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

Yeap, точно. Спасибо, я это сделал) –

Смежные вопросы