我正在使用Laravel 5.6编写Web应用程序。我需要在所有视图中列出当前会话用户拥有的所有连接。 我试过这样的事情
View::share('connections', Connection::getList(Auth::id()))
我将此代码放在AppServiceProvider的启动函数中。但是当用户尚未登录时会出现问题,因为此时Auth::id()
设置为空。
用户登录时不会生成连接列表。这会引发以下错误:
未定义连接变量。
答案 0 :(得分:1)
这个目标可以通过不同的方法实现,
<强> 1。使用BaseController
我喜欢设置的方式,我创建了一个RT_LIBS_PATH=-L/usr/local/Cellar/libre/0.5.7/lib
类,扩展了Laravel自己的BaseController
,并在那里设置了各种全局事物。然后所有其他控制器都从Controller
而不是Laravel的Controller扩展。
BaseController
<强> 2。使用过滤器
如果您知道在整个应用程序中为每个请求设置视图的事实,您也可以通过在请求之前运行的过滤器来实现 - 这就是我在Laravel中处理User对象的方式
class BaseController extends Controller
{
public function __construct()
{
//its just a dummy data object.
$user = User::all();
// Sharing is caring
View::share('user', $user);
}
}
或强>
您可以定义自己的过滤器
App::before(function($request)
{
// Set up global user object for views
View::share('user', User::all());
});
并通过简单的过滤器调用来调用它。
根据第5版进行更新。*
第3。使用View Composer
View Composer还有助于以不同方式绑定特定数据。您可以直接将变量绑定到特定视图或所有视图。例如,您可以根据需要创建自己的目录来存储视图编辑器文件。并且这些视图通过Service提供的composer文件提供了与视图的交互。
查看composer方法可以使用不同的方式,第一个例子可以看起来很相似:
您可以创建一个Route::filter('user-filter', function() {
View::share('user', User::all());
});
目录。
服务提供商
App\Http\ViewComposers
之后,将此提供程序添加到&#34; provider&#34;下的config / app.php中。部分。
TestViewComposer
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}
ViewName.blade.php
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
class TestViewComposer {
public function compose(View $view) {
$view->with('ViewComposerTestVariable', "Calling with View Composer Provider");
}
}
此方法仅对特定视图有帮助。但是,如果您希望将ViewComposer触发到所有视图,我们必须将此单个更改应用于ServiceProvider。
Here you are... {{$ViewComposerTestVariable}}