我正在尝试创建一个我有用户活动日志的应用程序。我不想在所有页面中编写特殊功能。我只想将它用于metnion一次,然后在我去的所有页面或控制器上运行。它继续显示在header.blade.php上。我想一直使用该日志。
我有这样的功能。
public function headerLogs()
{
$latestActivities = Activity::with('user')->latest()->limit(10)->get();
return view('layouts.header')->with('logs', $latestActivities);
}
我该怎么做?
答案 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变量