如何在Laravel 5.4中创建公共可访问控制器?

时间:2017-05-18 03:57:52

标签: laravel

我不确定我的问题是否清楚。我的控制器中有一个查询,用于计算尚未读取的消息。我插入了一个特定页面的控制器。当我刷新页面时结果很好,但当我点击另一个页面意味着另一个路径时,它会抛出一个错误,表示该变量未被声明(我注意到因为我只在一个特定的控制器中插入它)。 结果应该在我的页面视图的标题中通知(我的标题在我的网站的所有页面中都可见)。问题是如何进行单个调用,以便查询将应用于所有页面。 Bellow是用户界面。enter image description here

我插入查询的控制器

class InvPaginateController extends Controller
{
    public function inv_pagination()
    {
        $it_equipments = DB::table('it_equipments')->paginate(7);
        $areas = Areas::all(['id','area_name']);
        $dept_offs = DeptOffice::all(['id','dept_name']);
        $messages = DB::table('messages')->where('status','=', 0)->count();
        $messbody = DB::table('messages')->where('status','=', 0)->paginate(5);
        return view('it_equipments.inv_pagination', compact('it_equipments'), compact('areas','dept_offs','messages','messbody'));
    }
}

2 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情 在AppServiceProvider

 view()->composer('layouts.default', function($view){
           $it_equipments = DB::table('it_equipments')->paginate(7);
           $areas = Areas::all(['id','area_name']);
           $dept_offs = DeptOffice::all(['id','dept_name']);
           $messages = DB::table('messages')->where('status','=', 0)->count();
           $messbody = DB::table('messages')->where('status','=', 0)->paginate(5);
           $view->with(compact('it_equipments','areas','dept_offs','messages','messbody'));
       });

layouts.default - 您正在使用的默认布局。
您传递的所有变量都将在使用default.blade.php文件夹中的layouts创建的视图中提供

答案 1 :(得分:0)

您需要声明自定义控制器

class BaseController extends Controller
{
   public function __construct() 
    {
        $it_equipments = DB::table('it_equipments')->paginate(7);
    $areas = Areas::all(['id','area_name']);
    $dept_offs = DeptOffice::all(['id','dept_name']);
    $messages = DB::table('messages')->where('status','=', 0)->count();
    $messbody = DB::table('messages')->where('status','=', 0)->paginate(5);
    View::share(compact('areas','dept_offs','messages','messbody'));
    }
}

现在每个控制器扩展为BaseController将共享此变量