这个目标可以通过不同的方法来实现,
1.使用BaseController
我喜欢设置方式,我制作了一个BaseController
扩展Laravel自己的类Controller
,并在那里设置了各种全局性的东西。然后,所有其他控制器都从BaseController
Laravel的控制器扩展而来。
class BaseController extends Controller
{
public function __construct()
{
//its just a dummy data object.
$user = User::all();
// Sharing is caring
View::share('user', $user);
}
}
2.使用过滤器
如果您知道要为整个应用程序中的每个请求的视图设置某种事实,您还可以通过在请求之前运行的过滤器来进行设置-这就是我在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::share
一起使用middleware
Route::group(['middleware' => 'SomeMiddleware'], function(){
// routes
});
class SomeMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}
4.使用View Composer
View Composer还可以帮助绑定特定数据以不同方式进行查看。您可以将变量直接绑定到特定视图或所有视图。例如,您可以根据需要创建自己的目录来存储视图编辑器文件。并且这些视图组成文件通过Service提供与视图的交互。
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的“ providers”部分下。
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}}
此方法仅对特定视图有用。但是,如果要触发ViewComposer到所有视图,我们必须将此单个更改应用于ServiceProvider。
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}
参考
Laravel文档
进一步澄清 拉拉卡斯特集》
如果我这边仍然不清楚,请告诉我。