在每个页面加载时在Laravel中运行命令

时间:2016-02-08 19:44:31

标签: laravel laravel-5 laravel-5.1

我想在每个页面加载时使用Laravel加载命令;

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

最好的方法是什么?然后,需要在页面的主模板中输出结果。

2 个答案:

答案 0 :(得分:6)

使用视图编辑器作为主模板,例如:

// 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)作为此示例。

答案 1 :(得分:3)

您可以在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);