Как передать одни и те же данные в несколько представлений в laravel

С помощью метода контроллера я отправляю $notifications на главный экран и отображаю уведомления в заголовке своего веб-сайта.

Представления профиля расширяют домашнее представление, и я также хотел отображать уведомления в представлении профиля.

Но он генерирует ошибку неопределенной переменной $ notifications, когда я запрашиваю представление профиля.

Я думаю, что одним из решений является отправка $notifications при возврате представления профиля из метода контроллера, но на веб-сайте есть много представлений, в которых я хотел бы показать вкладку уведомлений, поэтому я правильно думаю.

Я вернул домашний вид следующим образом

return view('home')->with(['unseen_notification_counter'=>$unseen_notification_counter,'notifications'=>$notifications]);

вот код в домашнем представлении в разделе заголовка

<ul class = "dropdown-menu" id = "notificationlist">
    @foreach($notifications as $notification)
        <li>
            <a href = "{{route('user.profile',$notification->id)}}" class = "dropdown-item">
                <img src = "http://localhost/webproject/public/user_images/{{$notification->image}}" class = "img-thumbnil" width = "20px" height = "20px">
                <strong>{{$notification->username}}</strong>
                <span style = "white-space: initial;">sent you a friend request.</span>
            </a>
        </li>
    @endforeach
</ul>

Как вы передаете уведомления представлениям?

Rwd 29.08.2018 18:57

Можете ли вы показать, на что вы расширяете свой обзор?

Carlos Salazar 29.08.2018 19:19

Можете ли вы показать, как вы тоже получаете уведомления (извините)?

Rwd 29.08.2018 19:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
3
3 248
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Создайте BaseController и поделитесь данными оттуда следующим образом:

<?php 
namespace App\Http\Controllers;

use View;

//You can create a BaseController:

class BaseController extends Controller {

    public $dataVariable = "some data";

    public function __construct() {

       $anotherVariable = "more data";

       $notifications = Notification::where('is_seen',0)->get(); // assuming this gets unseen notifications
       $unseen_notification_counter = count($notifications); 

       View::share ( 'notifications', $notifications );
       View::share ( 'unseen_notification_counter', $unseen_notification_counter );
       View::share ( 'data_variable', $this->dataVariable );
       View::share ( 'another_variable', $this->anotherVariable );
    }  

}

Все контроллеры, расширяющие BaseController, будут иметь доступ к данным. Сделайте что-нибудь вроде этого:

class DashboardController extends BaseController {

    public function Index(){
      return view('index'); // all the shared data is available in the view ($notifications and $unseen_notification_counter)
    }
}

Надеюсь, что это работает.

Ответ принят как подходящий

Если вы хотите передать одни и те же данные в несколько представлений в своем приложении, вы можете использовать Посмотреть композиторов

Например. в методе boot() вашего AppServiceProvider у вас будет что-то вроде:

public function boot()
{
    view()->composer(['home', 'profile'], function ($view) {

        $notifications = \App\Notification::all(); //Change this to the code you would use to get the notifications

        $view->with('notifications', $notifications);
    });
}

Затем вы просто добавляете в массив разные имена файлов лезвий (как в случае с маршрутом).


В качестве альтернативы вы можете доля уведомления со всеми представлениями:

public function boot()
{
    $notifications = \App\Notification::all(); //Change this to the code you would use to get the notifications

    view()->share('notifications', $notifications);
}

Другие вопросы по теме