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

时间:2016-02-13 10:04:46

标签: php laravel laravel-5.2

我正在尝试创建一个我有用户活动日志的应用程序。我不想在所有页面中编写特殊功能。我只想将它用于metnion一次,然后在我去的所有页面或控制器上运行。它继续显示在header.blade.php上。我想一直使用该日志。

我有这样的功能。

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

我该怎么做?

3 个答案:

答案 0 :(得分:1)

在您的基本控制器中:

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

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

答案 1 :(得分:1)

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服务提供商添加到providers中的config/app.php数组即可注册。

现在您只需@include('layout.header.activity')即可显示日志,控制器或视图中没有额外的代码行

答案 2 :(得分:0)

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

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

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