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

问题描述 投票:1回答:3

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

我有这样的功能。

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

我怎样才能做到这一点?

php laravel laravel-5.2
3个回答
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')和日志显示你的控制器或视图中没有额外的代码行


1
投票

在您的基本控制器中:

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

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


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

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

© www.soinside.com 2019 - 2024. All rights reserved.