我现在一直在阅读文档,但仍然不确定我做错了什么。在我看来,初学者很难理解文档。
无论如何,我正在尝试制作类似于Auth::user()
方法的东西,它会返回有关我将需要的登录用户的其他数据。
我在这里有这个助手课程:
namespace App\Helpers;
use Auth;
use Illuminate\Http\Request;
use App\Models\Grouping\User;
use App\Models\Grouping\Client;
use App\Models\Grouping\Rank;
class ClientUser {
public function __construct($request) {
$this->request = $request;
}
public function client() {
return Client::find($this->request->session()->get('client_id'));
}
public function auth() {
if (Auth::check()) {
// Get the client
$client = $this->client();
// Get the client's user
$user = $client->users()->find(Auth::user()['id']);
// Get the rank of the logged in user
$rank = Rank::find($user->pivot->rank_id);
return [
'user' => $user,
'rank' => $rank,
'client' => $client
];
}
return null;
}
}
这负责执行我所描述的内容,返回我无法通过Auth::user()
的其他数据。现在我正在尝试在AuthServiceProvider
public function register()
{
// Register client auth
$request = $this->app->request;
$this->app->singleton(ClientUser::class, function ($app) {
return new ClientUser($request);
});
}
现在我不明白的是,我应该如Auth::user()
那样在我的应用程序中全局访问它。
只是“导入”它的问题是它需要请求对象,这就是我将它传递给服务容器的原因。
现在这里我被困住了。我无法在我的控制器或任何地方访问app
,我无法定义Facade,因为Facade希望您返回一个应该“别名”的绑定服务字符串。
答案 0 :(得分:1)
像这样更改您的服务提供商:
$this->app->bind('client.user', function ($app) {
return new ClientUser($app->request);
});
创建另一个从Illuminate\Support\Facades\Facade
扩展的类。
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class ClientUserFacade extends Facade {
public static function getFacadeAccessor(){
return "client.user";
}
}
在'ClientUser => ClientUserFacade::class
alias
键中添加app.php