2016-02-08 2 views
1

Я хочу загрузить команду с Laravel при каждой загрузке страницы;Запустите команду в Laravel при каждой загрузке страницы

$mail_count = mail::where('to_id', '=', Auth::user()->id)->where('read', '=', '0')->count('read'); 

Какой был бы лучший способ сделать это? Затем это необходимо для вывода результата в мастер-шаблоне для страницы.

+0

Лучше поместить это в конструктор контроллера. –

+0

Какой контроллер? Должен ли я включить его во все или только из главного контроллера? –

ответ

5

Используйте View Composer для главного шаблона, например:

// app/providers/ComposerServiceProvider.php 
public function boot() 
{ 
    view()->composer(
     'layouts.master', 'App\Http\ViewComposers\MasterComposer' 
    ); 
} 

Затем создать класс Composer:

namespace App\Http\ViewComposers; 

use Auth; 
use App\Mail; 
use Illuminate\View\View; 

class MasterComposer 
{ 
    public function compose(View $view) 
    { 
     $mail_count = Mail::where('to_id', Auth::user()->id) 
          ->where('read', 0) 
          ->count('read'); 
     $view->with('mail_count', $mail_count); 
    } 
} 

Наконец, вы можете использовать {{$ mail_count}} в вашем мастер зрения чтобы распечатать результат. Итак, в этом случае, что он делает, всякий раз, когда ваш views\layouts\master.blade.php будет визуализирован, будет вызван метод compose, и $mail_count будет прикреплен к представлению. Не забудьте использовать точное имя для представления, я использовал layouts.master (views/layouts/master.blade.php) для этого примера.

2

Вы можете использовать его в поставщика Laravel идти к AppServiceProvider.php внутри функции boot вставки переменной

$mail_count = mail::where('to_id', '=', Auth::user()->id)->where('read', '=', '0')->count('read'); 

, то вы можете сделать это с одним из вариантов:

1.

view()->composer('*', function($view) use($mail_count){ 
    $view->with('mail_count', $mail_count); 
}); 

2.

view()->share('mail_count', $mail_count); 
Смежные вопросы