Использование представления доли в лезвии - PullRequest
0 голосов
/ 17 мая 2019

При отображении кода на экране выдает ошибку. Который является:

Неопределенная переменная: noti_count (представление: C: \ laravel \ Procure \ resources \ views \ layouts \ user.blade.php)

Я еще не привык использовать общий вид в контроллере. Нужны советы:

public function __construct()
{
    if (Auth::check())
    {
        if (Auth::User()->role == "Normal User")
        {       
            $noti_count = Notification
                              ::where('receive_id','=',Auth::user()->id)
                              ->count();

            view()->share('noti_count', $noti_count);

        }
        else if (Auth::User()->role == "PWD")
        {
            # code...
        }
        elseif (Auth::User()->role == "Senior Citizen")
        {
            # code...
        }
        else
        {       

        }    
    }    
}

Код клинка

<span class="badge badge-danger badge-counter">{!! $noti_count !!}+</span>

Ответы [ 3 ]

3 голосов
/ 17 мая 2019

view()->share() следует использовать в загрузке поставщика услуг.

Вы можете использовать AppServiceProvider или создать нового поставщика и не забудьте добавить его в конецмассив провайдеров в config / app.php .

Обратите внимание , что, когда ни один пользователь не вошел в систему, $noti_count будет неопределенным.Итак, вы должны сначала проверить это:

@isset($noti_count)
<span class="badge badge-danger badge-counter">{!! $noti_count !!}+</span>
@endisset
1 голос
/ 17 мая 2019

Вы можете проверить раздел документации Совместное использование всех просмотров документации.В нем говорится:

Совместное использование данных со всеми представлениями

Иногда вам может потребоваться поделиться частью данных со всеми представлениями, отображаемыми вашим приложением.Вы можете сделать это, используя метод share вида фасада.Как правило, вы должны совершать звонки на share в методе boot поставщика услуг.Вы можете добавить их в AppServiceProvider или создать отдельного поставщика услуг для их размещения:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        View::share('key', 'value');
    }
}

Как видите, это полезно для обмена данными между несколькими представлениями.Конечно, вы можете сделать это в вашем случае (документация очень ясна), но если вы собираетесь делать некоторые условные вещи, почему бы не вернуть данные в представление вместо этого?Вот так:

public $data;

public function __construct()
{
    if ($condition)
    {
        $this->data = 'Data for first option';
    }
    else if ($condition_two)
    {
        $this->data = 'Some other data';
    }
    else
    {
        $this->data = 'Another amount of data';
    }
}

Затем в методе внутри контроллера:

public function myMethod()
{
    // some stuff

    return view('my_view')->withData($this->data);
}
0 голосов
/ 17 мая 2019
public function __construct()
{        
    \View::share('key','value');
}

Затем в блейд-файле:

<span class="badge badge-danger badge-counter">{{ $key }}</span>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...