gpt4 book ai didi

php - 如何将数据传递给 Laravel 5 中的所有 View ?

转载 作者:IT老高 更新时间:2023-10-28 11:49:17 24 4
gpt4 key购买 nike

我希望在我的 Laravel 5 应用程序的所有 View 中都可以访问一些默认数据。

我试图搜索它,但只找到 Laravel 4 的结果。我已阅读文档“与所有 View 共享数据”here但我不明白该怎么做。下面的代码应该放在哪里?

View::share('data', [1, 2, 3]);

感谢您的帮助。

最佳答案

这个目标可以通过不同的方法实现,

1.使用 BaseController

我喜欢设置的方式,我创建了一个扩展 Laravel 自己的 ControllerBaseController 类,并在那里设置了各种全局的东西。然后所有其他 Controller 都从 BaseController 而不是 Laravel 的 Controller 扩展。

class BaseController extends Controller
{
public function __construct()
{
//its just a dummy data object.
$user = User::all();

// Sharing is caring
View::share('user', $user);
}
}

<强>2。使用过滤器

如果你知道你想要为整个应用程序中的每个请求的 View 设置一些东西,你也可以通过在请求之前运行的过滤器来实现——这就是我在 Laravel 中处理 User 对象的方式.

App::before(function($request)
{
// Set up global user object for views
View::share('user', User::all());
});

您可以定义自己的过滤器

Route::filter('user-filter', function() {
View::share('user', User::all());
});

并通过简单的过滤器调用来调用它。

根据版本 5 更新。*

3.使用中间件

使用 View::sharemiddleware

Route::group(['middleware' => 'SomeMiddleware'], function(){
// routes
});



class SomeMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}

4.使用 View Composer

View Composer 还有助于以不同的方式将特定数据绑定(bind)到 View 。您可以直接将变量绑定(bind)到特定 View 或所有 View 。例如,您可以根据需要创建自己的目录来存储 View 编写器文件。并且这些 View 编写器文件通过 Service 提供与 View 的交互。

View Composer 方法可以使用不同的方式,第一个例子看起来很相似:

您可以创建一个 App\Http\ViewComposers 目录。

服务提供商

namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}

之后,将此提供程序添加到“提供程序”部分下的 config/app.php 中。

TestViewComposer

namespace App\Http\ViewComposers;

use Illuminate\Contracts\View\View;

class TestViewComposer {

public function compose(View $view) {
$view->with('ViewComposerTestVariable', "Calling with View Composer Provider");
}
}

ViewName.blade.php

Here you are... {{$ViewComposerTestVariable}}

此方法仅对特定 View 有帮助。但是如果你想为所有 View 触发 ViewComposer,我们必须将这个单一的更改应用到 ServiceProvider。

namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}

引用

Laravel Documentation

进一步澄清 Laracast Episode

如果我还有什么不清楚的地方,请告诉我。

关于php - 如何将数据传递给 Laravel 5 中的所有 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28608527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com