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

如何在Laravel 5.4中使公共可访问控制器?,laravel,Laravel,我不确定我的问题是否清楚。我的控制器中有一个查询,它统计尚未读取的消息。我插入了一个特定页面的控制器。当我刷新页面时,结果很好,但是当我单击另一个页面(这意味着另一个路由)时,它抛出一个错误,表示变量未声明(我注意到了,因为我只在一个特定的控制器中插入了它)。 结果应该在我的页面视图的标题中通知(我的标题在我的站点的所有页面中都可见)。问题是如何进行单个调用,以便在所有页面中应用查询。下面是用户界面 插入查询的控制器 class InvPaginateController extends Con

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

插入查询的控制器

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'));
    }
}

你可以试试这样的东西
在您的
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.blade.php
创建的视图中可用。您需要声明自定义控制器

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的控制器都将共享此变量

您需要一个中间件。请单击链接查看图像sirs。查看下面我简单回答的链接,通过template@Inject()方法在视图中插入InvPaginateController对象,并调用一个只返回计数器的方法,在这个控制器中定义另一个方法并只从中返回计数器,你是说home.blade.php吗?非常感谢!我已经让它工作了。我将它放在AppServiceProvider的引导函数中,并将layouts.default替换为adminlte::layouts.app我是否需要路由此控制器?如何调用此自定义控制器?我需要创建路由吗?应该如何创建?不,需要从BaseController扩展控制器类(需要共享此变量)