Как добавить переменные в макет и быть доступным на всех страницах в Laravel? - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть некоторая функция для подсчета данных, и я хочу показать ее в шаблоне блейда. но у меня есть проблема. эта переменная просто работает в 1 представлении и не работает в другом представлении, потому что я НЕ анализирую эту переменную в другом представлении. Так как же я могу установить количество переменных для всех видов?

это сценарий иллюстрации:

 public function inventaris_baru()
{

    $user_id = null;
    $unit        = User::where('roles_id' , 1)->pluck('nama_unit', 'id'); 


    $alat    = Alat::with('users')
    ->where('jenis' ,'Alkes')
    ->where('is_active',  'false')
    ->orderBy('created_at', 'desc')->get();

    $count = $alat->count();

    return view('sarpras.inventaris_baru',['unit' => $unit, 'user_id' => $user_id ,'alat' => $alat ,'count' => $count]);
}

для этого блэйда в макете

 <li class="nav-item">
                <a href="{{route('inventaris_baru')}}" class="nav-link">
                  <i class="far fa-circle nav-icon"></i>
                  <p>Inventaris Baru <span class="badge badge-danger right"> {{$count}} </span></p>
                </a>
              </li>

этот счетчик $ работает только в представлении sarpras.inventaris_baru Как я могу установить глобальный и можно разобрать это на макетах?

Может кто-нибудь дать мне лучший способ для этого?

Ответы [ 4 ]

0 голосов
/ 24 февраля 2020

Вы можете создать вспомогательный файл

Создать функцию, которую можно вызывать глобально.

if (! function_exists('yourCount')) {
    function yourCount()
    {
         $alat = Alat::with('users')
            ->where('jenis' ,'Alkes')
            ->where('is_active',  'false')
            ->orderBy('created_at', 'desc')->get();

         return $alat->count();
    }
}

В вашем блейде:

 <p>Inventaris Baru <span class="badge badge-danger right"> {{ yourCount() }} </span></p>

Читать здесь для настройки вашего вспомогательного файла.

0 голосов
/ 24 февраля 2020

Вам необходимо использовать Laravel Просмотр composer. Надеюсь, эта ссылка вам поможет - https://scotch.io/tutorials/sharing-data-between-views-using-laravel-view-composers

0 голосов
/ 24 февраля 2020

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

public function inventaris_baru()
{

    $user_id = null;
    $unit        = User::where('roles_id' , 1)->pluck('nama_unit', 'id'); 


    $alat    = Alat::with('users')
    ->where('jenis' ,'Alkes')
    ->where('is_active',  'false')
    ->orderBy('created_at', 'desc')->get();

    $count = $alat->count();
    session(['count' =>  $count]);

    return view('sarpras.inventaris_baru',['unit' => $unit, 'user_id' => $user_id ,'alat' => $alat ,'count' => $count]);
}

Получите доступ к своим представлениям вот так

<li class="nav-item">
       <a href="{{route('inventaris_baru')}}" class="nav-link">
           <i class="far fa-circle nav-icon"></i>
           <p>Inventaris Baru <span class="badge badge-danger right"> {{session('count')}} </span></p>
        </a>
</li>
0 голосов
/ 24 февраля 2020

Есть много способов сделать это, но я лично создал бы Промежуточное программное обеспечение , которое будет считать и помещать результат в сеанс.

Редактировать:

Примером для вашего случая может быть:

  1. Создание промежуточного программного обеспечения с помощью команды php artisan make:middleware CalculateInventarisBaruCount
  2. В функции дескриптора нового промежуточного программного обеспечения добавьте счетную логи c, затем перед return $next($request) Вы бы добавили session()->put('inventoris_baru_count',$count)
  3. Зарегистрируйте свое промежуточное ПО, добавив \App\Http\Middleware\CalculateInventarisBaruCount::class к массиву $middleware в вашем Ядре (я считаю, что по умолчанию это должно быть app\Http\Kernel.php) файл
  4. Используйте считать в вашем макете с помощью {{session('inventoris_baru_count',-1)}}. Я добавил -1 в качестве значения по умолчанию, чтобы вы знали, если что-то пойдет не так.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...