PHP laravel boot() 中的中间件
PHP laravel middleware in boot()
在我的项目中,我正在使用 Laravel 5.2,现在我被这个小问题困住了,不知道如何解决。
我需要在所有视图上仅与签名用户共享一个变量。
我知道我需要使用 view() -> composer()
来做到这一点,但是怎么做呢?
代码会去哪里?我不能在 AppServiceProvider 中使用它,因为在会话开始之前 boot()
方法是 运行。我看到有人推荐使用中间件来做我想做的事情,但我也想不通。
我会在哪里写这个新的中间件?我会在哪里使用 view() -> composer()
?
更详细一点:
我正在尝试检查好友请求,如果有任何请求,则将其放在每个视图的用户侧边栏中。
我的视图编辑器在 boot()
方法中看起来像这样,但由于 Auth::check()
而不起作用
if (Auth::check()) {
view() -> composer('*', function($view) {
// Check for friend requests
$friend_requests = DB::table('friends')
-> where('user_id_receiver', '=', Auth::user() -> id)
-> where (function($query) {
$query -> where('status', '=', 2);
})
-> get();
$view -> with('friend_requests', $friend_requests);
});
}
我的 blade 布局也很简单,只是使用 extends 和 include 来做侧边栏和其他东西。
如果我需要澄清什么,请告诉我。
提前致谢。
好吧,我真的想通了。
我创建了一个名为 ViewComposerServiceProvider 的新提供程序(从 artisan 命令行执行此操作)。
提供程序中的 boot()
方法现在如下所示:
public function boot()
{
view() -> composer('*', 'App\Http\ViewComposers\UserMenuComposer');
}
然后我在 App/Http 中创建了一个名为 ViewComposers 的新文件夹,这是我现在绑定某些视图所需的变量的地方。在这个文件夹中,我现在有 1 个文件,因为这就是我现在所需要的。
该文件名为 UserMenuComposer,内容是这样的:
<?php
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class UserMenuComposer {
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
$view -> with('friendRequests', $this -> getFriendRequests());
}
/**
* Get all friend requests
*
* @return mixed
*/
private function getFriendRequests()
{
if (Auth::check()) {
return DB::table('friends')
-> where('user_id_receiver', '=', Auth::user() -> id)
-> where (function($query) {
$query -> where('status', '=', 2);
})
-> get();
} else {
return false;
}
}
}
最后,如您所见,我现在可以访问她的 Auth()。
在我的项目中,我正在使用 Laravel 5.2,现在我被这个小问题困住了,不知道如何解决。
我需要在所有视图上仅与签名用户共享一个变量。
我知道我需要使用 view() -> composer()
来做到这一点,但是怎么做呢?
代码会去哪里?我不能在 AppServiceProvider 中使用它,因为在会话开始之前 boot()
方法是 运行。我看到有人推荐使用中间件来做我想做的事情,但我也想不通。
我会在哪里写这个新的中间件?我会在哪里使用 view() -> composer()
?
更详细一点: 我正在尝试检查好友请求,如果有任何请求,则将其放在每个视图的用户侧边栏中。
我的视图编辑器在 boot()
方法中看起来像这样,但由于 Auth::check()
if (Auth::check()) {
view() -> composer('*', function($view) {
// Check for friend requests
$friend_requests = DB::table('friends')
-> where('user_id_receiver', '=', Auth::user() -> id)
-> where (function($query) {
$query -> where('status', '=', 2);
})
-> get();
$view -> with('friend_requests', $friend_requests);
});
}
我的 blade 布局也很简单,只是使用 extends 和 include 来做侧边栏和其他东西。
如果我需要澄清什么,请告诉我。 提前致谢。
好吧,我真的想通了。 我创建了一个名为 ViewComposerServiceProvider 的新提供程序(从 artisan 命令行执行此操作)。
提供程序中的 boot()
方法现在如下所示:
public function boot()
{
view() -> composer('*', 'App\Http\ViewComposers\UserMenuComposer');
}
然后我在 App/Http 中创建了一个名为 ViewComposers 的新文件夹,这是我现在绑定某些视图所需的变量的地方。在这个文件夹中,我现在有 1 个文件,因为这就是我现在所需要的。
该文件名为 UserMenuComposer,内容是这样的:
<?php
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class UserMenuComposer {
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
$view -> with('friendRequests', $this -> getFriendRequests());
}
/**
* Get all friend requests
*
* @return mixed
*/
private function getFriendRequests()
{
if (Auth::check()) {
return DB::table('friends')
-> where('user_id_receiver', '=', Auth::user() -> id)
-> where (function($query) {
$query -> where('status', '=', 2);
})
-> get();
} else {
return false;
}
}
}
最后,如您所见,我现在可以访问她的 Auth()。