运行 Laravel 5.2 整个应用程序中的函数或路由

Run a function or route in whole application in Laravel 5.2

我正在尝试创建一个我有用户 activity 日志的应用程序。我不想在所有页面中都写一个特殊的功能。我只想在所有页面或控制器上访问它一次并 运行 无论我走到哪里。一直显示在 header.blade.php 上。我想一直使用那个日志。

我有这样的功能。

public function headerLogs()
    {
        $latestActivities = Activity::with('user')->latest()->limit(10)->get();
        return view('layouts.header')->with('logs', $latestActivities);
    }

我该怎么做?

在你的基础控制器中:

view()->composer('layouts.header', function($view){ //your code for header logs which gives $logActivites. $view->with('logs', $logActivites); }

因此,无论何时创建视图 layouts.header,此 $logActivites 都将可用。

Laravel 具有内置功能:View Composers。如果您希望在每个加载的视图中都包含一些数据(当然您可以准确指定哪些视图),它们就是您所使用的

因此,根据文档,我们将为我们的视图编辑器创建一个服务提供者:

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class ActivitiesComposerServiceProvider extends ServiceProvider
{
    /**
     * Register bindings in the container.
     *
     * @return void
     */
    public function boot()
    {    
        // Using Closure based composers...
        view()->composer('layout.header.activity', function ($view) {

        $latestActivities = Activity::with('user')->latest()->limit(10)->get();

        $view->with('logs', $latestActivities);
        });
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

然后您只需将 ActivitiesComposerServiceProvider 服务提供商添加到 config/app.php 中的 providers 数组即可注册您的服务提供商。

所以现在您可以简单地 @include('layout.header.activity') 并且日志将在您的控制器或视图中显示而没有额外的代码行

每个人都遇到过这样一种情况,即必须在每个视图 (blade) 文件中访问一个变量。一种可能的解决方案——让服务提供商加载我们的全局视图信息。例如,在您的服务提供商中键入此内容。

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // Using view composer for specific view
        view()->composer('welcome',function($view) {
            $view->with('latestActivities', Activity::with('user')->latest()->limit(10)->get());
        });
    }
}

然后您可以从所有查看文件中访问 latestActivities 变量